kangsecu's B1og

[HackCTF]Pwnable - first line 본문

System/wargame

[HackCTF]Pwnable - first line

Kangsecu 2020. 2. 23. 02:23

1. Basic_BOF #1

binary :

NX bit , Partial RelRO

main :

main func

뭐 굳이 쉘코드를 넣을 필요도 없다. 그냥 v5변수 값이 -559038737이면 되는데 이게 0xDEADBEEF이다. 

payload :

bof1ex.py

2. Basic_BOF #2

binary :

1과 동일

 

main : 

main func

이번에도 딱히 뭐 없다. 그냥 v5변수에 sup함수를 넣는다. 그럼 여기서 128바이트를 더미로 채우고 0804849b를 ret로 넘겨주면 된다.

payload :

dummy(128) + p32(0x0804849b)

$(python -c 'print "A"*128 + "\x9b\x84\x04\x08"'; cat) | nc ctf.j0n9hyun.xyz 3001

3. Basic_FSB

binary :

Partial RelRO

main :

사실 main이 볼게 없다.

vuln :

vuln func

이 함수의 snprintf와 밑에 &format에서 fsb취약점이 터진다. 

flag :

누가 봐도 수상함.

자 . fsb문제다.  Partial RelRO니까 GOT overwrite가 가능할 것이다. 

근데 아직 못풀음 ㅎㅎ 

4. 내 버퍼가 흘러넘친다!!!

binary :

Partial RelRO

main :

main func

매우 간단하다. read함수로 name값을 50을 받아오는데 여기서 취약점이 발생한다. 한가지  신경써야할 점은 name변수가 bss영역에 존재하기 때문에 이를 이용해서 해결하는 점이다. 

payload :

dummy(13) + shellcode(24) + dummy(13)

prob1ex.py

해결 후 확인해보니 , 초기화 되지 않는 정적변수인 name에 쉘코드를 넣고 , input에서 dummy를 넘겨준 후 name의 주소를 전송하는 풀이도 많은 것 같다. 

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

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