일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 시스템 해킹
- CTF
- 모의해킹
- Kioptrix
- 스캔
- 취약점분석
- 해킹툴
- sql
- 취약점
- Samba
- Hacking
- 해킹도구
- 내부침투
- smb
- root권한
- 침투테스트
- Los
- 해킹
- 암호해독
- 포트스캔
- 권한상승
- load of sqlinjection
- 메타스플로잇
- web hacking
- 칼리리눅스
- 스캐닝
- SQLINJECTION
- 취약점 스캔
- SQL Injection
- Metasploit
- Today
- Total
감자 텃밭
rtl_core 본문
rtl_core
이번에 풀어본 문제는 hackCTF의 rtl_core다 이번 문제도 제목에서 유추 가능한 rtl을 이용한 문제이다
해당 프로그램을 일단 실행시켜보자
passcode라는것을 입력받게 되어 있다. 음.. 해당 문제는 아마 ASLR과 NX가 기본적으로 적용되어있을 거 같은데
일단 확인해보았다.
역시나 그렇듯 NX가 설정되어있다 ASLR도 설저되어 있을 것이다.
일단 해당 문제를 명확히 분석하기 위해 IDA를 통해 확인해보았다.
메인 함수를 살펴보면 check_passcode함수의 인자로 s를 전달하고 반환되는 값이 hashcode값과 같으면 특정 문자열을 출력하고 core함수를 실행시켜주고 그렇지 않을 경우 또 다른 문자열을 출력해준다 (확인해보니 성공과 실패 같은 문자열)
우선 hashcode값이 어떤 값인지 확인해보았다
hashcode값이 0 C0 D9 B0 A7 h 인 것을 확인할 수 있었다 그럼 이 값과 같게 되어야 할 check_passcode함수를 살펴보았다
4바이트씩 5번을 반복하여 v2 변수에 저장된다 그럼 hashcode값인 0C0D9 BA7h를 5로 나누어 입력하면 된다
하지만 그럴 경우 마지막에 2가 부족하게 나온다 그렇기에 5번째 값에 +2를 해서 보내주면 된다.
그 후 실행되는 core함수를 살펴보자
이렇게 해서 보낼 경우 pritf함수의 주소 값을 받게 된다 (미처 스샷을 찍지 못하였음)
이로써 pritf함수의 실 주소와 offset를 구해 libc_base주소를 찾아서 rtl을 하면 될 거 같다.
offset주소와 /bin/sh 문자열은 pwntools를 통해 얻었다. 최종 공격코드는 아래와 같이 작성하였다.
printf함수와 system함수의 offset를 받아와 특정 변수에 저장하고 bin/sh문자열을 특정 변수에 저장 그 후
첫 번째 페이로드에 /5의 값 중 4 갯값과 2가 부족하여 +2한 값 총 5개를 더한 값을 전송 그 후 core함수를 통해 얻게 되는
printf 주소를 recv를 통해 특정 변수에 저장 printf주소-printf함수의 offset를 통해 libc_base를 획득 후
libc_base +system_offset과 /bin/sh를 통해 함수의 주소를 획득하여 특정 변수에 저장
그 후 최종 페이로드는 core함수를 보게 되면 return read가 있다 이 부분에서 bof가 일어난다 입력받는 곳부터 rsp까지의 거리 값을 구해 66개를 채우고 시스템 함수를 넣고 그 후 4바이트를 더미 값으로 채우고 bin/sh문자열을 넣어 공격코드를 완성했다 해당 프로그램을 실행시키면
성공적으로 플래그 획득에 성공하였다.
처음에는 되게 막막했던 문제였지만 여러 번 보다 보니 조금씩 이해가 되었던 문제였다.