일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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권한
- 시스템 해킹
- Samba
- 취약점분석
- 암호해독
- Hacking
- 권한상승
- load of sqlinjection
- Metasploit
- SQLINJECTION
- 포트스캔
- sql
- 해킹툴
- web hacking
- 칼리리눅스
- 내부침투
- 모의해킹
- 스캐닝
- 침투테스트
- Los
- 취약점 스캔
- CTF
- SQL Injection
- smb
- 메타스플로잇
- 취약점
- 해킹도구
- Kioptrix
- Today
- Total
감자 텃밭
[HackCTF] Poet 본문
이번에 풀어볼 문제는 Hackctf에 Poet 문제 일단 해당 문제를 실행시켜 보았다.
해당 프로그램을 실행시키니 시인과 저자를 찾는? 프로그램인 거 같다 계속해서 입력을 받도록 되어 있는 거 같다.
해당 프로그램에 적용되어 있는 메모리 보호기법을 확인해보았다.
NX가 걸려있어 쉘코드는 실행이 되지 않을 것이다.
일단 IDA를 통해 상세한 분석을 해보았다.
IDA를 통해 확인하였을 때는 while문을 통해 계속 돌다 dword_6024E0의 값이 1000000과 동일하면 break를 통해 반복문이 종료되며 reward함수를 호출한다.
dword_6024E0은 bss영역에 존재하고 있다
reward함수를 확인해보면 flag를 던져주는 거 같다.
또한 이 외에 3개의 함수가 더 존재하는데 하나하나 확인해보았다.
먼저 get_poem함수를 보면 입력을 받을 수 있도록 gets를 통해 poem에 입력을 받는다 여기서 bof가 일어날 수 있다
하지만 여기서 중요한 것!!!
※ gets로 입력받은 후 우리가 변조시켜야 할 dword_6024E0 값을 을 초기화시킨다 그렇다는 건 이 함수에서는 bof를 일으켜도 값을 변조할 수 없다
그 후 get_author 함수를 보면 여기서도 gets를 통해 입력받을 수 있다 여기서 bof를 일으키면 될 거 같다
poem과 unk_6024 A0 둘 다 변조시켜야 할 값과 같은 bss영역에 존재하므로 bof를 통해 dword_6024E0의 값을 변경하면 된다는 것이 확실해 져싿
마지막 함수를 확인해보면
첫 번째 poem에 입력한 값을 통해 해당 if문에 있는 문자열과 일치할 경우 dword_6024E0에 값이 100씩 증가하는 거 같다.
그럼 이제 해야 하는 것은 unk_6024 A0로부터 dword_6024E0까지의 거리 값을 구하기만 하면 된다
이 값은 IDA로도 확인이 가능하고 gdb를 통해서도 확인이 가능하다.
먼저 gdb를 통해 확인해보면
85번째 줄을 보면 우리가 if에서 비교해야 할 eax에 들어갈 값을 표시해준다 0x6024e0인 거 같다
그 후 우리가 입력할 get_author함수에서 입력받는 값의 위치는
0x6024a 0이며 이 둘을 빼면
0x40이 나온다 즉 거리 차이는 10진수로 64만큼의 거리가 나온다.
IDA로 확인을 해보면
bss영역에서의 두 변수 간의 거리 차이도 0x40 즉 64만큼의 거리가 나온다.
그럼 이제 64만큼의 더미 값을 채운 후 dword_6024E0의 값을 1000000으로 바꿔주면 된다.
해당 코드는 아래와 같이 작성했다
두 번째 함수인 author에서 bof를 일으키기 위해
첫 번째 입력받는 부분에서 임의의 값을 보낸 후 그 후 페이로드를 보내 공격하도록 작성하였다
그 결과
성공적으로 공격하여 플래그를 획득하였다!!!
이번 문제는 ret에서 변조가 아닌 bss영역에 특정 변수 간의 거리를 확인 후 특정 변수의 값을 변조하는 문제였다
나름 재밌었다.
'my_study > HackCTF' 카테고리의 다른 글
[HackCTF] random (0) | 2021.08.09 |
---|---|
[HackCTF] 1996 (0) | 2021.08.09 |
g++ pwn (0) | 2021.07.23 |
bof_pie (0) | 2021.07.22 |
basic_fsb (0) | 2021.07.21 |