일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Kioptrix
- root권한
- 스캔
- 시스템 해킹
- 메타스플로잇
- Hacking
- 취약점분석
- load of sqlinjection
- Samba
- 스캐닝
- 내부침투
- Metasploit
- web hacking
- 암호해독
- 침투테스트
- 취약점 스캔
- 포트스캔
- CTF
- 해킹툴
- SQLINJECTION
- 해킹도구
- 권한상승
- 취약점
- smb
- Los
- sql
- 해킹
- 칼리리눅스
- SQL Injection
- 모의해킹
- Today
- Total
감자 텃밭
bof_pie 본문
이번에 풀어볼 문제는 bof_pie문제이다 pie메모리 보호 기법은 처음이라 조금 모호한 부분이 있었다
일단 해당 프로그램을 실행시켜보았다.
실행시켰더니 j0n9hyun을 아냐 물어보고 어떠한 주소 값을 출력시켜주는 거 같다 또한 문자를 입력하면
Nah...라는 문자열을 출력해준다.
적용되어있는 메모리 보호 기법을 확인해보았다.
NX와 PIE가 적용되어있다 그렇다면 쉘 코드를 실행시킬 수 없고 코드 영역을 포함한 모든 주소가 랜덤으로 매핑될 것이다.
좀 더 명확한 분석을 위해 IDA를 통해 확인해보았다.
main함수에서는 특별한 게 없다 welcome함수를 불러오고 puts를 이용하여 문자열을 출력한다
그럼 welcome 함수를 확인해보자
j0n9 hyun을 아냐고 묻고 j0n9 hyun의 주소가 아닌 welcome의 주소를 출력해주고 있다
그럼 여기서 뭘 해야 하는지 감이 잡혔다 j0n9 hyun의 주소를 찾아 아래의 scanf를 이용하여 bof를 일으킨 후
welcome대신 j0n9hyun의 주소를 이용하여 j0n9 hyun함수를 불러오면 될 것이다
j0n9hyun함수를 살펴보자
역시나 그렇듯 j0n9 hyun함수가 존재하고 fopen을 이용하여 플래그를 알려주는 것 같다.
그럼 scanf를 이용해서 ret까지의 거리 값을 구해보자
86번째 줄이 봐야 할 곳이다. ebp로부터 0x12(18바이트)만큼 떨어져 있으므로 18+sfp(4) 총 22 바이의 더미 값을 채운 후
ret부분에 j0 n9 hyun의 주소 값을 넣으면 될 것이다
하지만 pie가 걸려있기에 offset를 이용해야 한다.
j0n9 hyun의 offset는 00000890이고
welcome의 offset는 00000909이다 그럼 해당 공격코드를 작성하기 위해 필요한 정보는 모두 구해졌다
프로그램을 실행시킬 때 나오는 welcome 주소에서 offset값을 빼서 base주소를 구한 다음 j0n9 hyun의 오프셋을 더해
실제 j0n9hyun의 주소를 구하여 공격을 하면 된다.
이제 공격코드를 작성해보자
welcome의 오프셋 값과 j0n9 hyun의 오프셋 값을 특정 변수에 저장시켜놓고
recvuntill을 이용하여 특정 문자 이후의 값(주소)을 recv를 이용하여 welcome에 저장한다 #int형으로 10자리를 16진수로 받아 온다는 뜻
그 후 입력받은 welcome주소에서 welcome의 오프셋 값을 빼서 base주소를 구한다 그 후 base주소에서 j0n9 hyun의 오프셋주소를 더해서 j0n9 hyun의 주소를 구한다 그후 rsp까지의 22더미값을 채운 후 ret부분에 j0n9hyun의 주소를 넣어 실행시킨다
성공적으로 공격에 성고 하여 flag를 획득할 수 있었다.