일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- sql
- 내부침투
- 취약점분석
- 취약점 스캔
- SQLINJECTION
- 스캔
- Kioptrix
- 해킹도구
- 권한상승
- 취약점
- 해킹
- SQL Injection
- Samba
- 칼리리눅스
- CTF
- 스캐닝
- 포트스캔
- 해킹툴
- 침투테스트
- root권한
- Metasploit
- 모의해킹
- Hacking
- web hacking
- 메타스플로잇
- 암호해독
- Los
- load of sqlinjection
- smb
- 시스템 해킹
- Today
- Total
감자 텃밭
[HackCTF] pwning 본문
이번에 풀어볼 문제는 pwning라는 문제이다 제목으로는 어떤 문제인지 추측이 불가능하니 해당 문제를 우선 실행시켜보자.
높은 수를 입력하게 되면 크다고 하고 종료되고 작은 수를 넣으면 통과되어 한번 더 입력을 받도록 되어있다.
해당 프로그램의 메모리 보호기법을 확인해보자.
NX가 걸려있다. 쉘코드작성은 불가능할 것이고, IDA를 통해 상세 확인을 해보도록 하자.
MAIN함수에서는 특별한 걸 발견할 수 없었다 바로 vuln함수를 호출하는 듯하다 해당 함수를 확인해보자.
nptr이라는 변수의 크기를 32로 지정해놓고 get_n이라는 사용자 정의함수로 nptr에 입력을 받는 듯하며 해당 입력값을
v2변수에 넣고 해당 변수가 32이상일 경우 크다는 내용 추려과 함께 종료되며, 그렇지 않을 경우 한번 더 입력받도록 되어있다. 해당 get_n이라는 사용자 정의 함수를 살펴보자
여기서 보면 변수들이 unsigned로 되어있다 음수가 가능하기에 이를통해 언더플로우를 이용해서 문제를 해결할 수 있다. 즉 -1을 입력 시 정수의 최댓값이 입력되게 된다.
그 후 두번째 get_n에서 v2의 값으로 nptr에 넣게 된다
해당 페이로드는 우선 vuln에서 printf가 우선적으로 호출되므로 printf함수를 이요하여 leak 하여 함수들의 실제주소를 얻어 system함수로 rop 하는 방법이다.
준비물
1. printf_plt
2. printf_got
3. vuln_plt( 첫 번째 페이로드가 종료되면 main으로 돌아가기 때문에 다시 vuln으로 돌아가야 함)
4. pr 가젯
여기서 나는 기존에 있던 libc.so.6 파일을 사용해서 해결했다.
익스 코드는 아래와 같다.
필요한 함수들의 주소를 모두 구한 후 ret까지의 거리인 48까지 더미 값을 주고 printf_plt로 printf_got주소를 구해
시스템 함수와 binsh문자열을 구한 후 해당 -1 값을 보내 rop를 진행했다
성공적으로 쉘을 획득할 수 있다.
'my_study > HackCTF' 카테고리의 다른 글
[HackCTF] - RTC (1) | 2021.11.25 |
---|---|
[HackCTF] - yes or no (1) | 2021.08.26 |
[HackCTF] ROP (0) | 2021.08.16 |
[HackCTF] gift (0) | 2021.08.16 |
[HackCTF] Look at me (0) | 2021.08.16 |