감자 텃밭

rtl_world 본문

my_study/HackCTF

rtl_world

g2h 2021. 5. 28. 22:54

HcakCTF rtl_world문제

이번 문제도 IDA를 안 쓰고 풀고 싶었지만 이번 문제는 IDA를 써서 풀게 됐다.

일단 해당 프로그램에 메모리 보호 기법이 어떻게 적용되어있는지 확인했다.

적용된 메모리보호기법

NX가 걸려있는 걸 확인했다. 그렇다는 건 쉘 코드를 삽입해서 풀 수 없을 거 같다 그럼 시스템 함수를 실행시켜야 한다. 제목에 나와있듯이 RTL이라는 기법을 사용하여야 한다.

 

일단 프로그램이 어떻게 동작하는지 확인해보자.

해당 프로그램을 보면 2번을 통해 돈을 벌고 3,4번에서 시스템 함수와 빈 쉘의 문자열을 찾을 수 있고 5번을 통해 우리가 원하는 입력값을 받을 수 있다. 2번에서 4번은 히든 번호?로 수많은 돈을 획득할 수 있다 이것은 IDA를 통해 찾았다.

히든 번호를 IDA로 찾는 모습

또한 프로그램에서 2,3번에 해당하는 시스템 함수의 주소와 /bin/sh의 주소가 다르게 나오는 거 같았다..

그래서 시스템 함수의 주소는 gdb를 통해 획득했다.

/gdb 에서 info func를 통해 시스템함수의 주소를 알아냄

/bin/sh주소는 gdb에서 pada를 사용하면 찾을 수 있지만 나는 IDA를 통해 알아냈다.

빨간 창 부분을 더블클릭

이렇게 시스템함수의 주소와 /bin/sh의 주소를 알아냈으니 이제 거리 값을 구해 코드를 작성하면 된다.

일단 거리를 구하기 위해 gdb를 열어 확인하면

저기 빨갛게 네모 친 곳이 우리가 5번에서 입력하면 저장되는 버퍼의 주소 같다. 그럼 이제 거리를 구해보자

5번을 선택 후 메모리값이 맞는지 확인하기 위해 AAAA를 입력

제대로 찾은 거 같다 41이라는 값이 제대로 들어가 있다. 그럼 이제 저기서부터 ebp까지의 거리를 확인하였을 때 140이 나온다.

그럼 거리, 시스템 함수의 주소, /bin/sh의 주소를 모두 알아냈다. 이제 코드를 작성하면 된다

dummy(140)+sfp(4)+ret(system())+dymmy(4)+("/bin/sh") 이렇게 작성하면 될 거 같다. 시스템 함수 뒤에 더미를 넣는 이유는 RTL정리에서 확인해보자!

 

그럼 이제 공격코드를 작성하러 가자

해당 코드는 시스템 함수의 주소와 "/bin/sh"의 주소를 담아놓은 변수를 만들고 sendline로 프로그램을 실행시켰을 때 우리가 입력값을 전달할 수 있는 5번을 누른 후 recvuntil을 통해 [Attack] >라는 문자열이 나올 때까지 문자열을 출력되면 

그 후 pauload로 \x90*144+system() 주소+\x90*4+/bin/sh"주소를 넣었다. 이제 제대로 공격이 되는지 확인해보자!!!

성공!!!!!!! 적으로 문제를 해결했다 이문제를 풀면서 헷갈리는 부분이 많았다.. 더욱 찾아봐야겠다.

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

basic_fsb  (0) 2021.07.21
rtl_core  (0) 2021.07.21
offset  (0) 2021.05.26
Simple_overflow_bof_ver_2  (0) 2021.05.21
Simple_size_bof  (0) 2021.05.21