Try to be the expert.

Ainsetin's Hacking & PS & Math

Hacking/HackCTF

HackCTF Unexploitable #1 Write-up

Ainsetin 2020. 2. 20. 20:45

이번엔 기본 RTL 문제를 풀어보겠다.

 

 

우선 보호 기법부터 확인하자.

 

 

보니까 평범하게 컴파일된 바이너리이다. NX bit만 설정되어 있는 것을 볼 수 있다.

 

IDA로 코드를 보자.

 

main()

우선 64byte 입력에 s의 크기가 16byte이므로 BOF가 가능하다.

 

보니까 easy RTL 이라고 되어 있다. 왜 그런지 확인해보자.

 

gift()

여기서 system을 호출하므로 call 할 때의 주소를 RET에 집어넣으면 되겠다.

 

문제는 "/bin/sh"문자열을 구해야 한다는 것인데, 어디선가 "sh"라고만 쳐도 쉘이 실행되는 것을 본 적이 있었다.

 

일단 Shift+F12로 문자열 검색을 해보았다.

 

 

보니까 fflush 문자열이 있는 것을 확인할 수 있었다. 따라서 그냥 's'의 주소를 찾아 "sh" 문자열을 읽어낼 수 있다.

 

 

알파벳 하나 당 1byte이기 때문에 0x4003BB에 0x4를 더하면 "sh"의 주소는 0x4003BF이다.

 

 

위에서 system 주소는 0x4006D4이다.

 

64bit에서는 인자를 pop ret 가젯으로 줘야 하므로 ROPgadget으로 하나 가져오겠다.

 

pop ret : 0x4007d3

 

이제 exploit code를 작성해보자.

 

 

 

flag를 가져올 수 있었다.

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

HackCTF RTC Write-up  (0) 2020.05.01
HackCTF You are silver Write-up  (0) 2020.02.17
HackCTF ROP Write-up  (0) 2020.01.14
HackCTF pwning Write-up  (0) 2020.01.14
HackCTF Beginner_Heap Write-up  (0) 2020.01.13