본문 바로가기

Security study/Pwnable

[pwnable.kr] bof

파일을 다운 받았다.

 

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