Page tree
Skip to end of metadata
Go to start of metadata



바이너리를 실행하면 요로코롬 숫자를 입력할 수 있다.

그냥 내가 30이라는 숫자를 만들면되는거같다.

그래서 노가다 뛰다가 안되서 때려치웠다.


그럼 문제 분석을 해보자.

checksec을 해보니 NX가 걸려있었다.

그리고 64비트 바이너리다.(젠장)

메인 함수는 요로코롬 생겼는데

입력을 받는 함수인 Your_turn 함수에서 취약점이 터진다. 


S 변수 부터 ebp까지의 거리는 0xb0인데 입력은 0x190만큼 받는다

0x190 - 0xb0 = 224

공간이 생각보다 많이 남는다.


일단 System 함수도 ELF에 없고, 원샷 가젯도 없으니 system("/bin/sh") 부터 써야될 것 같다.


read함수로 bss Section에 "/bin/sh" 를 적고, 
write함수로 read함수의 주소를 릭 해주고
그 릭된 read함수의 주소값을 이용해
read함수를 사용해 read함수의 got에 system함수의 주소를 Overwrite 할 것이다.


그러기 위해서는 Gadget을 찾아야하는데 64비트 바이너리이니 레지스터를 이용해서 ROP를 진행한다.


먼저 사용할 인자만큼의 필요한 레지스터들을 pop해주고 값을 넣어준 뒤에 함수를실행시키면 인자로 값이 들어간다.

일단 gadget을 구해보겠다.

read함수와 write함수만 사용할 것이니 레지스터를 3개 pop해주는 pop pop pop ret 가젯을 구하면 될 것이다.


helper 라는 이름의 함수가 보여서 gdb로 뜯어봤다

와! PPPR! 개꿀!

사실 gdb-peda에는 ropgadget 가 있다

\

지알아서 찾아준다. 개꿀이다.


아무튼 pppr = 0x40087a 니까,

이제 시스템 오프셋을 구해보자.


offset = 0xc0c30 이 나온다.



그래서 이런 형태의 익스를 짜서

슥삭 해주면 Profit!!!


  • No labels