kangsecu's B1og

[HackCTF]Pwnable - fourth line 본문

System/wargame

[HackCTF]Pwnable - fourth line

Kangsecu 2020. 3. 9. 17:48

1. Poet

binary :

Nx bit ,Parial RELRO

get_poem.c :

rate_poem.c  :

reward.c : 

대충 보면 그냥 poem을 입력받아서 1000000점을 넘기면 플래그를 준다. 위에 rate_poem.c 에 있는 문자들을 입력하면

100점을 주는데 저걸로 1000000점을 채울 수 없다. 근데 점수를 저장하는 변수인 dword_6024E0이 bss영역에 있다.

gdb로 rate_poem를 보면 100점을 늘려주는 부분이 strcmp를 하고 나서 rip + 0x201bae에 존재하는걸 알 수 있다. 즉

rip + 0x201bae == dword_6024E0이다. 그리고 get_author를 보면 unk_6024A0과 dword_6024E0의 거리를 구해서 만족할 점수를 넣어주면 된다는것을 알 수 있다. 그리고 두 변수 사이의 거리는 64bytes이다. 

exploit :

간단하게 처음에 아무거나 입력하고 두번째에서 author을 물을때 값을 넘겼다. 

2. 1996

binary :

NX bit, Parial RELRO

main.c :

getenv에서 bof

shell.c : 

RTL로 호출하자

그냥 간단한 rtl문제이다. getenv에서 bof를 일으켜서 ret를 shell함수로 overwrite하면된다.

exploit :

3. Random key

binary :

main.c :

그냥 rand값으로 생성하는걸 맞춰주면 된다. 우리도 파이썬 CDLL을 이용하여 난수를 생성하자.

exploit :

4. RTL_core

binary :

main.c :

입력한 값을 hashcode랑 비교한 후 core실행

core.c :

후에 조건문을 맞추면 printf의 주소를 릭해준다.

check_passcode.c :

이걸 구하는게 사실 문제푸는것보다 오래걸렸다. 5번을 돌리면서 0C0D9B0A7h을 5로 나누고 다시 5를 곱하면 값이 부족하니까 그냥 4번을 곱하고 부가적으로 부족한 값을 더해줬다.

exploit :

끝. 

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

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