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'); // 这个编译好的模块名称
至于如何编写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 这两个效率相当不错。
结尾: 断断续续扯了很多,仅当笔记方便自己,分享与大家,有用你就捡走。个人的见识还是短浅,本文抛砖引玉,期待大家的分享深入的研究文章。
顶(0)
踩(0)
上一篇:服务器安全检查十大要素
- 最新评论