Try to be the expert.

Ainsetin's Hacking & PS & Math

Hacking/HackCTF

HackCTF ROP Write-up

Ainsetin 2020. 1. 14. 22:55

이번엔 Return Oriented Programming(반환 지향 프로그래밍)에 대한 문제를 풀어보겠다.

 

 

우선 ROP라는 것은 ASLR과 NX bit가 걸려 있는 바이너리라는 의미인데, 한번 checksec로 확인해보자!

 

 

적중했다. NX bit는 걸려 있는 것을 확인했다!

 

그럼 IDA로 코드를 보자.

 

main()

보니 vulnerable_fuction, 즉 취약점 함수가 존재한다. 한번 보자.

 

vulnerable_function()

캬.... 너무나도 깔끔해서 취한다~ read 함수로 buf에 입력받는다! BOF도 터진다!

 

그런데 printf가 없어서 인자가 3개인 write 함수를 써야 한다.... 따라서 가젯도 pop pop pop ret를 찾아야 한다. ㅠㅠ

 

 

바아아아~로 찾았다!

 

pop pop pop ret = 0x8048509

 

이번엔 libc의 read offset을 찾아보겠다. pwntool로 편하게 찾을 수 있다.

 

 

read_offset이 0xd4350이므로 마지막 1.5byte인 350으로 libc를 찾아보겠다.

 

 

system_offset = 0x3a940

binsh_offset=0x15902b

 

자, 이제 exploit code를 작성해보자.

 

여기서 전과 다른 점은 printf 대신 write 함수를 사용하여 익스를 하여 인자를 3개 넣기 위해 pppret를 사용하는 것이다.

 

 

flag가 출력되었다!

 

ROP로 안 풀었는데도 풀려서.... 그냥 쉬운 풀이로 라옵을 작성해봤다...

 

+) C0L4 님에 의하면 이 방법도 ROP라고 한다더라 ㅋㅋㅋㅋㅋㅋㅋ..

'Hacking > HackCTF' 카테고리의 다른 글

HackCTF Unexploitable #1 Write-up  (0) 2020.02.20
HackCTF You are silver Write-up  (0) 2020.02.17
HackCTF pwning Write-up  (0) 2020.01.14
HackCTF Beginner_Heap Write-up  (0) 2020.01.13
HackCTF gift Write-up  (0) 2020.01.08