简介
1、命令执行(Command Execution)漏洞即黑客可以直接在Web应用中执行系统命令,从而获取敏感信息或者拿下shell权限
2、命令执行漏洞可能造成的原因是Web服务器对用户输入命令安全检测不足,导致恶意代码被执行
3、更常见的命令执行漏洞是发生在各种Web组件,包括Web容器、Web框架、CMS软件、安全组件等
函数
命令执行函数
System:system函数可以用来执行一个外部的应用程序并将相应的执行结果输出,函数原型如下:
string system(string command, int&return_var)
其中,command是要执行的命令,return_var存放执行命令的执行后的状态值。
Exec:exec函数可以用来执行一个外部的应用程序
string exec (string command, array&output, int &return_var)
其中,command是要执行的命令,output是获得执行命令输出的每一行字符串,return_var存放执行命令后的状态值。
Passthru:passthru函数可以用来执行一个UNIX系统命令并显示原始的输出,当UNIX系统命令的输出是二进制的数据,并且需要直接返回值给浏览器时,需要使用passthru函数来替代system与exec函数。Passthru函数原型如下:
void passthru (string command, int&return_var)
其中,command是要执行的命令,return_var存放执行命令后的状态值。
Shell_exec:执行shell命令并返回输出的字符串,函数原型如下:
string shell_exec (string command)
其中,command是要执行的命令。
popen()
proc_popen()
等等。
代码执行函数
eval(PHP代码)
payload:
<? eval('phpinfo();');?>
assert(PHP代码)
payload:
<? assert('phpinfo();');?>
preg_replace
preg_replace()函数的第一个参数存在e修饰符时,第二个参数和第三个参数可能当作PHP代码被执行
preg_replace漏洞触发有两个前提:
第一个参数需要e标识符,有了它可以执行第二个参数的命令
第一个参数需要在第三个参数中的中有匹配,不然echo会返回第三个参数而不执行命令
payload:
<?php preg_replace('/(.∗)/e','\\1','$_GET['a']);?>
请求1.php?a=[phpinfo()]
call_user_func()和array_map()
call_user_func()和array_map()等函数的作用就是调用其他函数,并将第二个参数作为回调函数的参数
payload:
<?php $b='phpinfo()'; call_user_func($_GET['a'],$b);?>
储备知识
转义字符:
windows下转义字符为^
linux下转义字符\
多条命令执行
windows下
&&
||
%0a
linux下
&&
||
;
$()
`` eg:`ls`
%0a
%0d
注:``和 ( ) 被 双 引 号 包 裹 的 字 符 串 被 当 做 命 令 执 行 , " ()被双引号包裹的字符串被当做命令执行," ()被双引号包裹的字符串被当做命令执行,"(id)"
注释符
windows下
:: 在BAT批处理脚本中用的较多
linux下
# 在bash脚本用的较多
小技巧
绕过空格过滤
1、通过其他空格形式替换
%0a,%0b,%0c,%0d,%09等等
2、截取空格
windows下
%ProgramFiles:~10,1%
~
相当于截取符,表示获取环境变量%ProgramFiles%
的值,一般为C:\Program Files
,第10个位置上是空格。
linux下
$IFS$9
bash有效,zsh、dash无效
{cmd,args}
{ecjo,aaa}
读取文件时:
cat<>flag
可使用${IFS}
注入
;IFS=,;
修改IFS变量为逗号来进行注入
黑名单关键字
过滤了cat,flag等关键字
1、利用变量拼接
Linux
a=c;b=at;c=he;d=llo;$a$b ${c}${d}
cat hello
2、通配符
?
代表任意一个字符,*
代表任意个字符
cat /tmp/f??
3、借用已有的字符串
会用substr等函数截取
执行无回显
1、HTTP通道
2、DNS通道
3、时间盲注
4、写入文件,二次返回
无字母数字构造命令
通过一些非字母数字运算获取字母数字
1、异或
2、取反
3、自增
详细参考
无字母数字webshell总结
无字母数字webshell之提高篇
未完待续。