No.1
漏洞描述
命令执行漏洞是指服务器没有对执行的命令进行过滤,用户可以随意执行系统命令,命令执行漏洞属于高危漏洞之一。
如PHP的命令执行漏洞主要是基于一些函数的参数过滤不足导致,可以执行命令的函数有system( )、exec( )、shell_exec( )、passthru( )、pcntl_execl( )、popen( )、proc_open( )等。当攻击者可以控制这些函数中的参数时,就可以将恶意的系统命令拼接到正常命令中,从而造成命令执行攻击。PHP执行命令是继承WebServer用户的权限,这个用户一般都有权限向Web目录写文件,可见该漏洞的危害性相当大。
No.2
漏洞危害
- 继承Web服务器程序的权限,去执行系统命令或读写文件
- 反弹shell
- 控制整个网站,甚至控制整个服务器
No.3
漏洞产生的原因
1.没有对用户输入进行过滤或过滤不严
例如,没有过滤&、&&、|、||等连接符
2.系统漏洞造成的命令执行
bash破壳漏洞(CVE-2014-6271),该漏洞可以构造环境变量的值来执行具有攻击力的脚本代码,会影响到bash交互的多种应用,如http、ssh和dhcp等。
3.调用的第三方组件存在代码执行漏洞
例如:
php(system()、shell_exec()、exec()、eval())
JAVA中的命令执行漏洞(struts2/ElasticsearchGroovy等)
ThinkPHP命令执行
No.4
常见危险函数
1. Php代码相关
- eval()
- assert()
- preg_replace
- call_user_func()
- call_user_func_array()
- create_function
- array_map()
2. 系统命令执行相关
- system()
- passthru()
- exec()
- pcntl_exec()
- shell_exec()
- popen()
- proc_open()
- `(反单引号)
- ob_start()
No.5
漏洞利用
漏洞利用_1
点击添加图片描述(最多60个字)
访问:http://127.0.0.1/test.php?cmd=127.0.0.1;pwd
也就是执行了“pwd”命令
点击添加图片描述(最多60个字)
漏洞利用_2
点击添加图片描述(最多60个字)
访问:http://127.0.0.1/test.php?fun=system&par=whoami
其实就相当于执行了system("whoami")
点击添加图片描述(最多60个字)
漏洞利用_3
点击添加图片描述(最多60个字)
访问:http://127.0.0.1/test.php?code=phpinfo();
点击添加图片描述(最多60个字)
No.6
防范措施
1. 在PHP下禁用高危系统函数
找到php.ini,查找到disable_functions,添加禁用的函数名
2. 参数的值尽量使用引号包括,并在拼接前调用addslashes进行转义。
3. 不执行外部的应用程序或命令
尽量使用自定义函数或函数库实现外部应用程序或命令的功能。在执行system、eval等命令执行功能的函数前,要确认参数内容。
4. 使用escapeshellarg函数处理相关参数
escapeshellarg函数会将用户引起参数或命令结束的字符进行转义,如单引号"'"会被转义为"\’",双引号“””会被转义为"\"",分号";"会被转义为"\;",这样escapeshellarg会将参数内容限制在一对单引号或双引号里面,转义参数中包括的单引号或双引号,使其无法对当前执行进行截断,实现防范命令注入攻击的目的。
5. 使用safe_mode_exec_dir指定可执行的文件路径
将php.ini文件中的safe_mode设置为On,然后将允许执行的文件放入一个目录,并使用safe_mode_exec_dir指定这个可执行的文件路径。这样,在需要执行相应的外部程序时,程序必须在safe_mode_exec_dir指定的目录中才会允许执行,否则执行将失败。
转自杭州美创科技有限公司公众号,如需二次转载,请联系marketing@mchz.com.cn