kangsecu's B1og

[HackCTF]Pwnable - second line 본문

System/wargame

[HackCTF]Pwnable - second line

Kangsecu 2020. 2. 23. 02:24

1. x64 Buffer Overflow

binary :

Nx, Full RelRo

main.c : 

scanf에서 bof발생

callmemaybe.c :

이거 호출

exploit :

ez

 

2. x64 Simple_size_BOF

binary :

main.c :

gets에서 bof발생

exploit :

ez

총 shell_code(31) + dummy(27929) + ret(buf_addr)

3. Simple_Overflow_ver_2

binary :

Parial RelRO

main :

main func

이번 문제는 매우 간단하다.(사실 지금까진 다 간단하다.) 그냥 scanf에서 취약점이 발생한다. 그리고 ret까지는 0x88 = 140이다. 

payload :

shellcode(25) + dummy(115) + ret_addr 

Simplebof2ex.py

4. Offset

binary  : 

NX, PIE , Full RelRO

main :

main func

select_func :

select_func

print_flag :

print_flag 이름만 들어도 매력적인 함수

main에서 gets로 &s를 입력받아서 select_func함수의 인자로 전달한다. v3변수는 처음엔 two의 주소값을 갖지만, 인자로 전달받은 src의 값이 one이면 one의 주소값을 갖게된다. > 바로 이 점이 우리가 공략할 것 이다.

보호기법들 때문에 뭐 할 수 있는게 없다. 하지만 PIE가 있어도 오프셋값만 맞춰주면 되기 때문에 문제 이름이 Offset인 것 같다.

함수들을 뒤져보니 print_flag라는 함수가 있었고, 누가봐도 select_func에서 리턴될 때 마지막 값을 print_flag함수를 가르키게 하면 해결 되는 것 같았다.  그래서 gdb를 이용하여 dummy가 30인걸 구했다.  

payload :

dummy(30) + print_falg_addr 

offsetex.py

해결 한 후, 확인하기 위하여 이것저것 봤는데 보통은 strncpy함수에서 src의 1byte만 덮을 수 있어서 31바이트중에 dummy(30) + "\xd8"로 하는 풀이들도 봤는데 그게 더 현명한 것 같다,,,

'System > wargame' 카테고리의 다른 글

[HackCTF]Pwnable - fourth line  (0) 2020.03.09
[HackCTF]Pwnable - third line  (0) 2020.03.01
[HackCTF]Pwnable - first line  (0) 2020.02.23