-
[HackCTF] RTL_Wolrd Write-up표튜터와 함께하는 Pwnable/HackCTF Write-up 2019. 4. 21. 17:33
이번 문제는 RTL_World이다.
제목에서 볼 수 있듯이 RTL을 이용해야 할 것만 같다ㅎㅎ
우선 프로그램을 실행해보았다.
뭔가 돈을 벌어서 Binary Boss를 죽이는 게임인 것 같고
돈을 벌 수도 있고 돈을 통해 Shell Sword와 System Armor을
구입할 수도 있는 것 같다. 우리가 입력할 수 있는 부분은
메뉴선택과 Binary Boss를 Kill하기위한 Attack 부분이다.
그러므로 이 부분을 이용하여 공격을 진행하면 될 것 같다.
소스코드를 보도록 하자~
코드를 보게되면 우리가 입력할 수 있는 버퍼가 보이고
아래쪽 즉 Binary Boss를 kill 하기 위한 부분을 보면 read함수를 이용해서 입력을
받고 있는데 이 부분에서 BOF를 일으킬 수가 있게된다.
버퍼보다 더 큰 크기를 입력 할 수 있기 때문이다.
Mitigation 역시 예상대로 NX가 걸려있다. 그러므로 우리는 라이브러리에 있는
실행권한을 이용해서 공격을 하면 될 것이다~ 예상과 딱딱 들어맞는다ㅎㅎ
그렇다면 우리가 어떤 외부라이브러리 함수를 사용할까??
보통 이런 경우 대부분 System함수를 사용하는데 마침 System함수가
존재한다. 그러므로 system함수와 인자로 사용될 "/bin/sh" 그리고
ret값을 알아야한다. ret값을 구해서 system함수를 실행시키고 인자로
"/bin/sh"을 넘겨주면 된다!! 이제부터 하나씩 구해보도록 하자~
인자로 사용될 "/bin/sh"은 이런식으로 objdump를 이용해서 구할 수 있다.
system( )함수의 경우 IDA를 켜거나 gdb에서 info func을 이용해서 찾을 수 있다.
(그 외에 여러가지 방법이 존재하지만 편한 걸 사용하자)
< IDA를 이용하면 바로 보입니다^^ >
이런식으로 필요한 것들을 모두 찾았다.
4개의 "a"을 입력하였고 144개의 dummy 값 뒤에 ret가 있음을 확인하였다.
이제 필요한 것을 다 구했으니 Payload를 구성해보자
Payload는 다음과 같다~
우리가 구한 system함수의 주소와 "/bin/sh"의 주소를 이용하여 RTL을
진행해주면된다. 중간에 "a" 4개를 주는 이유는 ret인데 이 문제에서는
굳이 신경쓸 필요가 없어서 dummy값을 주었다.
위와 같이 진행하게 되면 이런 식으로 FLAG를 볼 수 있다~
반응형'표튜터와 함께하는 Pwnable > HackCTF Write-up' 카테고리의 다른 글
[HackCTF] Random Key Write-up (0) 2019.04.22 [HackCTF] BOF_PIE Write-up (0) 2019.04.21 [HackCTF] Offset Write-up (0) 2019.04.19 [HackCTF] Simple_Overflow_ver_2 Write-up (0) 2019.04.19 [HackCTF] x64 Simple_size_BOF Write-up (0) 2019.04.18 댓글