일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 포트스캔
- 칼리리눅스
- root권한
- 암호해독
- 침투테스트
- SQL Injection
- web hacking
- 스캔
- 내부침투
- 취약점
- Metasploit
- load of sqlinjection
- SQLINJECTION
- 메타스플로잇
- 취약점 스캔
- Samba
- Kioptrix
- smb
- 시스템 해킹
- Hacking
- 권한상승
- 해킹툴
- Los
- 해킹도구
- CTF
- 해킹
- sql
- 스캐닝
- 취약점분석
- 모의해킹
- Today
- Total
감자 텃밭
[HackCTF] Look at me 본문
이번에 풀어볼 문제는 hackctf의 lookatme라는 문제이다 일단 제목으로는 추측이 안된다!!
해당 프로그램을 실행시켜 보았다.
해당 프로그램을 실행시키면 hellooooooooooo라는 문자열과 특정 값을 입력받을 수 있도록 되어있다.
흠 일단 적용되어있는 메모리보호기법을 확인해보았다.
nx가 걸려있는것으로 보아 쉘 코드는 실행이 되지 않을 것 같다.
해당 프로그램을 IDA를통해 좀 더 상세히 분석해보았다.
main함수에서는 해당 문제의 이름과같은 look_at_me 함수를 호출하고 해당 함수로 들어가 보면
puts로 문자열을 출력하고 gets로 문자열을 입력받는다 이 부분에서 bof가 일어난다
여기서 이상한 점을 발견했다
해당 프로그램에 함수가 굉장히 많이 있었다 여기서 이상한점을 느끼고 해당 파일을 확인했더니
역시나 dynamic linked방식이 아닌 static linked방식으로 되어있다 이 방식은 프로그램 내부에 모든 함수가 저장되어 있다 이를 통해 sysyem 함수와 binsh를 실행시키면 될 것이다. 방법은 mprotect함수를 이용한 rop를 사용하면 된다.
이 함수는 원하는 역역의 권한을 변경시켜줄 수 있다
bss영역을 찾아 해당 영역에 쉘 코드를 입력한 후 권한을 주어 실행시킬 수 있다.
이는 nx가 걸려있어도 쉘코드 실행이 가능하다.
우리가 찾아야 할 것은
1. gets의 주소
2. bss역역의 주소 (쉘 코드를 입력할)
3. bss영역의 시작 주소 (권한을 줘야 하기 때문)
4. pr 가젯
5. pppr 가젯
6. 쉘 코드
7. mprotect의 주소
해당 함수의 주소들을 구하고
가젯들을 구한 후
bss영역 까지 구해야 할 것들을 모두 구했다
그리고 우리가 입력받는 값의 위치부터 ret까지의 거리 또한 구해야 한다
0x18 즉 24 +sfp4까지 총 28바이트의 더미 값이 필요하다.
이제 해당 익스 코드는 아래와 같다
쉘 코드는 25비트 쉘 코드를 사용하였다
28바이트의 더미 값을 넣어 ret까지 접근하여 gets 함수를 호출하여 bss영역에 쉘 코드를 삽입하고 pr가젯을 이용하여 돌아갈 함수의 주소를 mprotect로 설정하여 mprotect를 실행 그후 bss시작주소를 넣는다 시작주소를 넣는 이유는 첫번째 인자값이 친자로 쓰일 주소의 값이 1000의 배수가 되어야 하기 때문이다. 그 후 값을 넣고 7은 rwx 의 권한이다.
그 후 pppr가젯을 이용하여 최종적으로 bss영역에 있는 쉘코드를 실행시킨다. ( 코드를 좀 더 이쁘게 짜야겠다..)
해당 코드를 실행시키면 성공적으로 쉘을 획득할 수 있었다.
'my_study > HackCTF' 카테고리의 다른 글
[HackCTF] ROP (0) | 2021.08.16 |
---|---|
[HackCTF] gift (0) | 2021.08.16 |
[HackCTF] Beginner_Heap (0) | 2021.08.10 |
[HackCTF] random (0) | 2021.08.09 |
[HackCTF] 1996 (0) | 2021.08.09 |