RCE篇之命令执行中的各种绕过
常见管道符
windows
1. “|”:直接执行后面的语句。
2. “||”:如果前面的语句执行失败,则执行后面的语句,前面的语句只能为假才行。
3. “&”:两条命令都执行,如果前面的语句为假则直接执行后面的语句,前面的语句可真可假。
4. “&&”:如果前面的语句为假则直接出错,也不执行后面的语句,前面的语句为真则两条命令都执行,前面的语句只能为真。
linux
1. “;”:执行完前面的语句再执行后面的语句。
2. “|”:显示后面语句的执行结果。
3. “||”:当前面的语句执行出错时,执行后面的语句。
4. “&”:两条命令都执行,如果前面的语句为假则执行执行后面的语句,前面的语句可真可假。
5. “&&”:如果前面的语句为假则直接出错,也不执行后面的语句,前面的语句为真则两条命令都执行,前面的语句只能为真。
空格过滤
${IFS}
payload1:
payload2:

重定向符<>
payload1:
payload2:
黑名单绕过
拼接
base64编码
payload1:
payload2:
单引号、双引号
反斜线
$1、$2等和$@
读文件绕过
当cat被过滤时,可以使用如下命令代替
(1)more:一页一页的显示档案内容
(2)less:与 more 类似,但是比 more 更好的是,他可以[pg dn][pg up]翻页
(3)head:查看头几行
(4)tac:从最后一行开始显示,可以看出 tac 是 cat 的反向显示
(5)tail:查看尾几行
(6)nl:显示的时候,顺便输出行号
(7)od:以二进制的方式读取档案内容
(8)vi:一种编辑器,这个也可以查看
(9)vim:一种编辑器,这个也可以查看
(10)sort:可以查看
(11)uniq:可以查看
(12)file -f:报错出具体内容
通配符绕过
?字符代表单个字符
*字符代表任意数量的字符
[...]匹配方括号之中的任意一个字符
# 存在文件 a.txt 和 b.txt
$ ls [ab].txt
a.txt b.txt
$ ls *[ab].txt
ab.txt a.txt b.txt
内敛执行绕过
`命令`和$(命令)都是执行命令的方式
反引号``是命令替换,命令替换是指Shell可以先执行``中的命令,将输出结果暂时保存,在适当的地方输出。语法:`command`
例题解析——BMZCTF 端午就该吃粽子
打开环境后,通过题目给的提示,访问login.php文件。访问这个文件发现只有一个链接,点击链接,跳转到show.php文件中。
发现一个登录框,这个登录框是用来迷惑我们的,我们注意到url中的zhongzi参数是可控的,所以猜测存在文件包含漏洞。通过f12查看源码发现一个index.php的提示,提示我们读取index.php文件。
payload:php://fileter/convert.base64-encode/resource=index.php
然后base64解码得出index.php的源码。
核心语句是shell_exec("ping -c 4 ".$ip);
相当于就是一个有过滤情况下的命令执行,那按照前面讲的方法绕过的方法就很多了,很多种方法都可以拿到flag,我们先ls
一下根目录,空格就用%09
代替:
可以看到flag就在根目录下,那我们看它的方法就很多了:
1||c""at%09/???? 1||c\a\t$IFS$9/???? 1||/bin/c??$IFS/???? 1||c""at%09$(find%09/%09-name%09f??g) 等等等等非常多种,可以随意组合实现cat /flag这条命令,然后就得到flag了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效