본문 바로가기

WHOIS/Pwnable

Whois 7주차 문제 풀이 과제

1. Student ID

 

1번 문제는 다음과 같다. 문제를 다운 받고 IDA로 봐보면,

 

 

v5가 0x499602D2면 flag를 준다. scanf로 길이 제한 없이 v4부터 입력 받으니깐, 28개 A로 덮고 남은 4byte는 0x499602D2 로 덮어주면 풀린당

 

다음과 같이 exploit 코드 작성 후 실행하면 FLAG를 얻을 수 있다.

 

2. Magic Spell

2번 문제는 다음과 같다. 바로 IDA로 확인을 해보자

 

 

main에서 sepll1이라는 함수를 호출 해준다. spell1을 따라가 보자

 

spell1은 다음과 같다. scanf로 v1에다 길이 제한 없이 입력을 받고 v2가 0x4d와 같으면 다음 spell2를 호출한다. 다음으로 spell2를 보자

 

spell2는 다음과 같다 bss 영역에 있는 bof 에다가 입력을 받는데 이것 또한 길이 제한이 없으니 같은 bss영역에 있는 masic을 임의의 값으로 덮을 수 있다. 최종 익스 코드는 다음과 같다.

 

3. system

이번 문제는 다음과 같다. 바로 IDA를 보자

 

ggang이라는 변수에다가 gets로 입력을 받고 command라는 변수를 인자로 system 함수를 실행한다. 두 개의 변수가 속한 메모리 영역이 어딘지 보니

 

 

둘다 data영역에 위치함을 알 수 있다. 그냥 간단하게 ggang에서 입력을 받을 때 command 까지 '/bin/sh'로 덮을 수 있을 거 같다.

 

 

4. random

 

보너스 문제는 다음과 같다 IDA로 봐 보자

 

 

겉보기에는 rand함수가 계속 random 값을 반환해줄거 처럼 보이지만 seed 함수를 안 사용했기 때문에 여러번 실행해도 계속 같은 패턴의 값들을 리턴해준다. 그냥 gdb로 디버깅해서 rand함수가 반환하는 random값이 무엇인지 처음에 파악하면 바로 exploit 코드를 작성할 수 가 있다.

 

 

랜덤값 뒤에 p32(100)을 해준 이유는 변수 i를 100으로 덮어버려 i <=4 를 거짓으로 만들어 바로 반복문에서 탈출시키기 위함이다.

'WHOIS > Pwnable' 카테고리의 다른 글

Whois 9주차 문제 풀이 과제  (0) 2021.12.03
Whois 8주차 문제 풀이 과제  (0) 2021.11.26