漏洞成因
- 通过URL 可以执行系统命令 例如:ping 判断网络连接状况
- Web应用程序没有过滤好输出命令
命令可以连接执行
eg:ping www.xxx.com&& command
在windows上支持的管道符
- “|” 直接执行后面的语句
- “||” 如果前面的语句出错,则执行后面的语句
- “&”如果前面的语句为假,则执行后面的语句
- “&&”如果前面的语句为假则直接出错,后面的语句也不执行了;前面语句为真的情况下执行后面的语句
在Linux上支持的管道符
- “;”执行完前面的语句执行后面的语句
- “|”显示后面语句的执行结果
与Windows上执行效果相同的管道符
- “||”
- “&”
- “&&”
命令执行漏洞与代码执行漏洞的区别:
命令执行漏洞是直接调用系统命令
代码执行漏洞是靠执行脚本代码调用系统命令
可以执行系统命令的函数
PHP命令
- system()函数 :执行外部函数,并显示输出
- shell_exec()函数 : 执行Linux函数时,显示所有的输出
- exec()函数:执行外部函数,但只显示最后一行的数据
- passthru()函数:调用命令,但是不显示结果,但把执行结果输出到标准输出设备上
- preg_replace()函数:执行一个正则表达式的搜索和替换
- ob_start()函数:打开输出缓冲区
- array_map()函数:返回用户自定义函数处理后的数组
漏洞的利用
- 通过PHP和Java等脚本执行外部应用程序
- 框架执行漏洞
为了追求更高效、更省时、更简单,框架技术得到盛行,该技术也应用到了网站应用的设计中。但若发生了安全漏洞,使用该框架的用户越多,影响的范围也就越大。
struts2代码执行漏洞
- Struts被称为JAVA三大框架之一,但Struts2却存在许多漏洞。Struts2本身是Struts1和XWOF的结合,而且开发者在遇到漏洞时,并未从根本上进行解决,所以struts2上的两漏洞层出不穷。
- 可以 通过各种编码绕过被禁止的特殊字符
ThinkPHP命令执行漏洞
- preg_replace()函数中的第二个参数会被作为PHP代码执行
- 注意双引号,其中的PHP变量语法也可能被解析执行
漏洞防御
- 传入参数的值用双引号包围,并用addslashes函数进行转义。addshashes函数,在每一个双引号前加一个转义符。
- 尽量少用系统执行命令
- 在进行命令执行之前进行预编译,对参数进行过滤,对敏感字符进行转义
- 对于php来说,不能控制的危险语言尽量不要用
- 在使用动态函数之前,确保使用的函数时指定的函数之一
来源:freebuf.com 2020-09-14 19:17:58 by: Pretty
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
喜欢就支持一下吧
请登录后发表评论
注册