命令执行漏洞
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
命令执行漏洞
作者美创科技安全实验室
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
访问:http://127.0.0.1/test.php?cmd=127.0.0.1;pwd
也就是执行了“pwd”命令
漏洞利用_2
访问:http://127.0.0.1/test.php?fun=system&par=whoami 其实就相当于执行了system("whoami")
漏洞利用_3
访问:http://127.0.0.1/test.php?code=phpinfo();
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指定的目录中才会允许执行,否则执行将失败。