命令执行漏洞
本次实验均在linux下测试:
1、命令执行(Command Execution)漏洞即黑客可以直接在Web应用中执行系统命令,从而获取敏感信息或者拿下shell权限
2、命令执行漏洞可能造成的原因是Web服务器对用户输入命令安全检测不足,导致恶意代码被执行
3、更常见的命令执行漏洞是发生在各种Web组件,包括Web容器、Web框架、CMS软件、安全组件等
可能存在漏洞的函数:system、exec、shell_exec、passthru、popen、proc_popen等
一.命令执行的原理和测试方法
源代码:
<?php show_source(__FILE__); echo"<pre>"; if(isset($_GET["cmd"])){ system($_GET["cmd"]); echo"</pre>"; ?>
传入?cmd=ipconfig
返回
这边就是一个很典型的命令执行漏洞
接下来当命令改变时:
<?php echo system("ping -c 2 " . $_GET[‘ip‘]); ?>
此时被限制为只能输入ip
使用&&,||等进行突破
这里的%26便是&的url编码,为了解决url中的歧义,会讲一些特殊字符进行编码
如果使用&&则不行
使用||
注意:&&与||均存在惰性,&&相当于and,当第一个命令返回真,则不执行第二个;||则相当于or,当第一个为假,便执行第二个,否则不执行第二个,因此这里url对应改变。
二、命令执行基础
1.windows中的转义字符是^,linux中的转义字符是\
可见转义字符的作用。
2.多条命令执行。
windows下可用&&,||,%0a;linux下可用&& || ;, $() `` %0a %0d 来连接多句命令
3.注释符号:
windows为::,linux中为#
三、存在过滤的绕过与技巧
空格过滤:
则可以使用url编码进行绕过,可以进行一波Fuzz
当url编码都被过滤,还可以通过截取的方式获取空格:
1.windows下:
%ProgramFiles:~10,`%
~相当于截取符,表示从$ProgramFiles的值中截取,一般为C:\Program Files. 代表从第10个开始并获取一个字符,则是空格。
2.linux下:
$IFS$9 {cmd,args} cat<>flag $[IFS]
变量拼接绕过黑名单:
linux:a=c;b=at;c=he;$a$b ${c}{c}
(cat 123.txt)
例子:/?ip=127.0.0.1;a=g;cat$IFS$1fla$a.php
使用通配符绕过:
?代表任意一个字符,*代表任意个字符串
借用已有字符,用substr截取获得<>等符号
base64绕过
三、执行无回显
1.http通道
2.dns通道
3.时间盲注
4.写入文件,二次返回