이번엔 기본 RTL 문제를 풀어보겠다.
우선 보호 기법부터 확인하자.
보니까 평범하게 컴파일된 바이너리이다. NX bit만 설정되어 있는 것을 볼 수 있다.
IDA로 코드를 보자.
우선 64byte 입력에 s의 크기가 16byte이므로 BOF가 가능하다.
보니까 easy RTL 이라고 되어 있다. 왜 그런지 확인해보자.
여기서 system을 호출하므로 call 할 때의 주소를 RET에 집어넣으면 되겠다.
문제는 "/bin/sh"문자열을 구해야 한다는 것인데, 어디선가 "sh"라고만 쳐도 쉘이 실행되는 것을 본 적이 있었다.
일단 Shift+F12로 문자열 검색을 해보았다.
보니까 fflush 문자열이 있는 것을 확인할 수 있었다. 따라서 그냥 's'의 주소를 찾아 "sh" 문자열을 읽어낼 수 있다.
알파벳 하나 당 1byte이기 때문에 0x4003BB에 0x4를 더하면 "sh"의 주소는 0x4003BF이다.
위에서 system 주소는 0x4006D4이다.
64bit에서는 인자를 pop ret 가젯으로 줘야 하므로 ROPgadget으로 하나 가져오겠다.
이제 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 |