일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- smb
- load of sqlinjection
- sql
- SQL Injection
- Los
- 포트스캔
- 스캐닝
- 모의해킹
- 시스템 해킹
- 권한상승
- 해킹
- CTF
- Hacking
- 취약점 스캔
- 내부침투
- 암호해독
- root권한
- SQLINJECTION
- Kioptrix
- 해킹툴
- 스캔
- 침투테스트
- 칼리리눅스
- 메타스플로잇
- web hacking
- Metasploit
- 해킹도구
- Samba
- 취약점분석
- 취약점
- Today
- Total
감자 텃밭
rtl_world 본문
HcakCTF rtl_world문제
이번 문제도 IDA를 안 쓰고 풀고 싶었지만 이번 문제는 IDA를 써서 풀게 됐다.
일단 해당 프로그램에 메모리 보호 기법이 어떻게 적용되어있는지 확인했다.
NX가 걸려있는 걸 확인했다. 그렇다는 건 쉘 코드를 삽입해서 풀 수 없을 거 같다 그럼 시스템 함수를 실행시켜야 한다. 제목에 나와있듯이 RTL이라는 기법을 사용하여야 한다.
일단 프로그램이 어떻게 동작하는지 확인해보자.
해당 프로그램을 보면 2번을 통해 돈을 벌고 3,4번에서 시스템 함수와 빈 쉘의 문자열을 찾을 수 있고 5번을 통해 우리가 원하는 입력값을 받을 수 있다. 2번에서 4번은 히든 번호?로 수많은 돈을 획득할 수 있다 이것은 IDA를 통해 찾았다.
또한 프로그램에서 2,3번에 해당하는 시스템 함수의 주소와 /bin/sh의 주소가 다르게 나오는 거 같았다..
그래서 시스템 함수의 주소는 gdb를 통해 획득했다.
/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 |