일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 스캔
- Samba
- 침투테스트
- Metasploit
- Hacking
- 취약점
- Los
- Kioptrix
- 메타스플로잇
- root권한
- sql
- 취약점분석
- 해킹
- 해킹툴
- SQL Injection
- 해킹도구
- web hacking
- smb
- load of sqlinjection
- 권한상승
- 시스템 해킹
- 칼리리눅스
- SQLINJECTION
- 포트스캔
- 내부침투
- 모의해킹
- 암호해독
- Today
- Total
감자 텃밭
[HackCTF] ROP 본문
이번에 풀어볼 문제는 hackctf의 rop문제이다
제목에서부터 유추할 수 있는 rop에 관한 문제이며 rop기초에 관한 문제인 거 같다.
해당 문제를 실행 및 적용된 메모리 보호 기법을 확인하였다.
문자열을 입력받고 입력 후 특정 문자열이 출력된다.
메모리는 역시 nx가 걸려있다.
해당 문제를 IDA를 통해 상세히 분석하였다.
main함수에서는 vulnerable_function함수를 호출하고 write함수를 통해 특정 문자열을 출력한다.
vulnerable_function함수에서는 136만큼의 buf변수를 선언하고 read함수를 통해 0x100(256)만큼 입력을 받는다
이 부분에서 bof가 일어날 거 같다. 정말 기본 rop사용 문제인 듯하다.
익스 코드는 read를 통해 bss영역에 /bin/sh문자열을 입력하고 write를 통해 read의 got를 출력하여 system함수의 실제 주소를 구한다 그 후 read함수를 통해 write의 got를 system함수의 실제 주소로 got overwrite 하고 write를 호출(system)
하여 인자 값으로 bss영역의 주소 값을 적으면 될 것이다.
이러기 위해 필요한 것은
1. read_plt
2. read_got
2. write_plt
3. write_got
4. bss영역의 주소
5. /bin/sh문자열
6. system함수의 주소
7. pppr 가젯
[해당 주소 및 가젯을 찾는 과정은 앞에서 했던 것들과 동일하기에 생략하겠다]
해당 익스 코드는 아래와 같다
좀 더 코드를 이쁘게 짜는 연습을 해야 할 거 같다...
해당 코드를 실행시키면 성공적으로 쉘을 획득할 수 있다.
'my_study > HackCTF' 카테고리의 다른 글
[HackCTF] pwning (0) | 2021.09.26 |
---|---|
[HackCTF] - yes or no (1) | 2021.08.26 |
[HackCTF] gift (0) | 2021.08.16 |
[HackCTF] Look at me (0) | 2021.08.16 |
[HackCTF] Beginner_Heap (0) | 2021.08.10 |