任意命令执行漏洞浅析
2016-08-05 09:31
681 查看
0x00概念
是指攻击者可以随意执行系统命令
0x01成因
部分web应用程序在调用系统命令时,未对用户输入的指令进行过滤。
0x02漏洞分类
①代码层过滤不严格
②系统自身的漏洞-->bash破壳漏洞(CVE-2014-6271)
③第三方组件存在漏洞
WordPress:ImageMagick漏洞
Java:Struts2漏洞
0x03漏洞利用(以代码层为例)
--sysem($data)--
可控点直接是待执行的程序,我们如果能直接控制它,就能执行任意命令。
--sysem("/bin/prog $data")--
可控点是传入程序的整个参数,我们可以直接利用&&或|等等,利用管道命令来执行其它命令。
如果$data被escapeshellcmd(除去字符串中的特殊符号)函数处理了,我们可以看看这个程序自身是否有“执行外部命令”的参数或功能,比如Linux下的sendmail命令自带读写文件的功能,我们可以用来写webshell。
--sysem("/bin/prog -p $data")--
可控点是传入程序的某个参数值,同样可以使用前者的方法进行绕过。
--sysem("/bin/prog -p '$data' ")--
可控点是传入程序的某个参数值并用单引号包裹,我们要先闭合单引号才可以执行命令。如:system("/bin/prog -p 'aaa' | id
")
--sysem("/bin/prog -p \"$data\" ")--
可控点是传入程序的某个参数值并用双引号包裹。分两种情况绕过:
①引号未转义,我们可以先闭合引号再用管道命令进行绕过。
②引号被使用addslashes函数转义,这种情况下我们可以在双引号内利用反引号(键盘上的波浪线按键)执行任意命令。
0x04修复方案
尽量少使用执行命令的函数,并在php.ini中的disable_functions中禁止相关函数。
对于可控点是程序整个参数的情况,使用escapeshellcmd函数进行过滤。
对于可控点是程序某个参数值的情况,使用escapeshellarg(给字符串增加一个单引号并且能引用或者转码任何已经存在的单引号)函数进行过滤。
参数值尽量使用引号包裹,并调用addslashes(在引号前面添加反斜杠)函数进行转义。
是指攻击者可以随意执行系统命令
0x01成因
部分web应用程序在调用系统命令时,未对用户输入的指令进行过滤。
0x02漏洞分类
①代码层过滤不严格
②系统自身的漏洞-->bash破壳漏洞(CVE-2014-6271)
③第三方组件存在漏洞
WordPress:ImageMagick漏洞
Java:Struts2漏洞
0x03漏洞利用(以代码层为例)
--sysem($data)--
可控点直接是待执行的程序,我们如果能直接控制它,就能执行任意命令。
--sysem("/bin/prog $data")--
可控点是传入程序的整个参数,我们可以直接利用&&或|等等,利用管道命令来执行其它命令。
如果$data被escapeshellcmd(除去字符串中的特殊符号)函数处理了,我们可以看看这个程序自身是否有“执行外部命令”的参数或功能,比如Linux下的sendmail命令自带读写文件的功能,我们可以用来写webshell。
--sysem("/bin/prog -p $data")--
可控点是传入程序的某个参数值,同样可以使用前者的方法进行绕过。
--sysem("/bin/prog -p '$data' ")--
可控点是传入程序的某个参数值并用单引号包裹,我们要先闭合单引号才可以执行命令。如:system("/bin/prog -p 'aaa' | id
")
--sysem("/bin/prog -p \"$data\" ")--
可控点是传入程序的某个参数值并用双引号包裹。分两种情况绕过:
①引号未转义,我们可以先闭合引号再用管道命令进行绕过。
②引号被使用addslashes函数转义,这种情况下我们可以在双引号内利用反引号(键盘上的波浪线按键)执行任意命令。
0x04修复方案
尽量少使用执行命令的函数,并在php.ini中的disable_functions中禁止相关函数。
对于可控点是程序整个参数的情况,使用escapeshellcmd函数进行过滤。
对于可控点是程序某个参数值的情况,使用escapeshellarg(给字符串增加一个单引号并且能引用或者转码任何已经存在的单引号)函数进行过滤。
参数值尽量使用引号包裹,并调用addslashes(在引号前面添加反斜杠)函数进行转义。
相关文章推荐
- 深入浅析ImageMagick命令执行漏洞
- 深入浅析ImageMagick命令执行漏洞
- Microsoft Internet Explorer SP2远程任意命令执行漏洞
- 利用CouchDB未授权访问漏洞执行任意系统命令
- JBoss zecmd.war/zecmd.jsp 可执行任意命令漏洞
- Hive任意命令/代码执行漏洞+渗透实例
- PHPMailer命令执行及任意文件读取漏洞
- Struts S2-016 远程任意命令执行漏洞检测代码
- Elasticsearch Groovy任意命令执行漏洞EXP
- JBoss zecmd.war/zecmd.jsp 可执行任意命令漏洞
- Struts2/XWork < 2.2.0远程执行任意代码漏洞分析及修补
- 快客电邮(QuarkMail)远程命令执行漏洞
- Struts 2命令执行漏洞
- Struts 2命令执行漏洞
- ThinkPHP框架被爆任意代码执行漏洞
- PPLIVE源代码泄露及两个struts命令执行漏洞
- VMware Mac版本漏洞可任意执行恶意代码
- Sun Java Web Server可以远程执行任意命令
- ThinkPHP framework 任意代码执行漏洞预警
- 浅析Java执行外部命令的几个要点(1)——简单的使用范例以及在Cygwin上的注意点