파일을 다운 받았다.
1.a를 충분히 많이 넣어주었을 때 중지된다.
2.a를 적당히 조금 넣어주었을 때 Nah..이라는 문자열이 나온다.
cat으로 코드를 살펴보자.
<코드 설명>
main 함수에서 func함수 인자로 '0xdeadbeef' 를 넣어준다.
func 함수를 살펴보면 char overflowme[32]를 선언한다.
"overflowme : "를 출력한다.
gets로 overflowme 를 받아준다.
if문으로 key값이 '0xcafebabe' 인지 비교한다.
같을 때 /bin/sh 쉘을 실행하고 다르면 "Nah..\n"를 출력한다.
gdb로 main 디스어셈블하기
gdb로 func 디스어셈블하기
func에 call이 4번 나오고 있다. 아까 c코드에서 봤을 때 printf(), gets(), system(), printf()
순서로 있었으므로 두 번째 call 이 gets()일 것이다. gets의 인자는 overflowme이므로
ebp-0x2c에 있고, key값이 어디있는지 보면 0xcafebabe와 비교하고 있는 ebp+0x8에 있을 것으로 예상 된다.
뒤에서 앞에 거를 빼주면 52byte를 채워주면 overflow 시킬 수 있다는 것을 알 수 있다.
python으로 익스플로잇 코드를 짜서 실행시키려고 했으나 pwntools 모듈이 없다는 오류가 뜸
python3버젼에서는 pwntools가 됐는데 현재 디폴트가 python2이므로 안 되는 것으로 보인다.
그래서 python -c로 코드를 넣어줬는데 아무 일도 일어나지 않았다. 이것도 python2와 python3 사이에 뭔가 있는 문제로 보인다. 그래서 python3 를 터미널 창에 쳐서 1줄씩 코드를 입력해주었다.
결국 어떻게든 성공
flag값은 "daddy, I just pwned a brFFer :)"인 것으로 보인다.
'Security study > Pwnable' 카테고리의 다른 글
[dreamhack] basic_rop_x86 문제 풀이 (0) | 2021.05.26 |
---|---|
ropasaurusrex 문제 풀이 (0) | 2021.05.26 |
gdb 활용 코드 분석 (0) | 2021.05.12 |
GDB 사용방법 (0) | 2021.05.12 |
[pwnable.kr] collision 문제 풀이 (0) | 2021.05.05 |