技术社区
安全培训
技术社群
积分商城
先知平台
漏洞库
历史记录
清空历史记录
相关的动态
相关的文章
相关的用户
相关的圈子
相关的话题
注册
登录
对二进制安全中沙盒的深入了解与分析(rop与shellcode集合)
sanmu
二进制安全
641浏览 · 2025-04-11 08:39
返回文档
前言
起因
在每次遇到沙盒时都要重新写rop或者shellcode,这非常不健康,所以我写了这篇文章,尽可能的让这里的代码能拿来就能用。
在正篇里将直接用rop或shellcode中使用的函数进行命名,这样可以快速并清晰的找到要用的代码。
注意: open+read+write为模版,之后相对应的代码可以直接进行替换,比如pread64可以直接将read进行替换(活字印刷术)。
以下为例题程序
沙盒
沙盒是一种对程序的保护,他可以禁用一些系统调用从而增加pwn题目的难度,迫使pwner们通过ORW的方法进行绕过沙盒。比如最常见的禁用execve,那么就只能通过open,read,write来直接读取flag的内容。
沙盒检测
正篇
open+read+write
rop
shellcode
open替代
openat
rop
shellcode
openat2
rop
shellcode
read替代
pread
rop
shellcode
readv
rop
shellcode
preadv
rop
shellcode
mmap
rop
shellcode
sendfile
sendfile可以直接代替write与read
rop
shellcode
write替代
writev
rop
shellcode
sendfile
sendfile可以直接代替write与read
rop
shellcode
侧信道攻击
这个攻击比较特殊,实在没有输出手段的时候就利用此方法,此方法相当不准确,谨慎使用。
如果rop同上面一样使用
来转化成写shellcode
接下来看shellcode怎么写。
现在假设flag已经读到了栈上,但是没有办法读(没有系统调用 & close(1))。
那么可以进行爆破,因为没有返回,所以爆破就只能看时间来判断。
shellcode为读取文件的code。
很慢,但可行。
转32位
利用条件
●
沙箱没有arch==ARCH_x86_64检测
●
可以使用mmmap或者mprotect和32位的地址
rop
可以调用mprotect来转化成写shellcode
shellcode
绕过close(1)
侧信道攻击
同write替代中的侧信道攻击
远程链接socket&connect
有些程序会调用子进程,子进程对外开放,但是rop写后只能在主进程运行,输出没法显示在远程,或者
close(1)
,那么可以用此方法,此方法需要
公网ip
。
open("/dev/pts/?")
使用
open("/dev/pts/?")
重新打开标准输出
超级代码
这个代码利用了下面三个个系统调用
汇编如下
机器码如下
0
人收藏
0
人喜欢
转载
分享
0
条评论
某人
表情
可输入
255
字
评论
发布投稿
热门文章
1
从零掌握java内存马大全(基于LearnJavaMemshellFromZero复现重组)
2
突破网络限制,Merlin Agent助你轻松搭建跳板网络!
3
从白帽角度浅谈SRC业务威胁情报挖掘与实战
4
基于规则的流量加解密工具-CloudX
5
从0到1大模型MCP自动化漏洞挖掘实践
近期热点
一周
月份
季度
1
从零掌握java内存马大全(基于LearnJavaMemshellFromZero复现重组)
2
突破网络限制,Merlin Agent助你轻松搭建跳板网络!
3
从白帽角度浅谈SRC业务威胁情报挖掘与实战
4
基于规则的流量加解密工具-CloudX
5
从0到1大模型MCP自动化漏洞挖掘实践
暂无相关信息
暂无相关信息
优秀作者
1
T0daySeeker
贡献值:38700
2
一天
贡献值:24800
3
Yale
贡献值:21000
4
1674701160110592
贡献值:18000
5
1174735059082055
贡献值:16000
6
Loora1N
贡献值:13000
7
bkbqwq
贡献值:12800
8
手术刀
贡献值:11000
9
lufei
贡献值:11000
10
xsran
贡献值:10600
目录
前言
起因
沙盒
沙盒检测
正篇
open+read+write
rop
shellcode
open替代
openat
openat2
read替代
pread
readv
preadv
mmap
sendfile
write替代
writev
sendfile
侧信道攻击
转32位
绕过close(1)
侧信道攻击
远程链接socket&connect
open("/dev/pts/?")
超级代码
转载
标题
作者:
你好
http://www.a.com/asdsabdas
文章
转载
自
复制到剪贴板