-
-
[原创]PHP漏洞挖掘——进阶篇
-
发表于:
2017-10-10 12:02
3406
-
从常见的PHP风险点告诉你如何进行PHP漏洞挖掘,以及PHP渗透测试中的黑盒与白盒。你与PHP大师只有这一篇文章的差距!
一. PHP漏洞挖掘特点
PHP有着移植性好,容易部署,开发简单的特点,多用于中小型web应用的开发。这就导致了PHP应用的价值多体现在整站框架/模板的开发上。
程序员在设计一个站点的时候,永远会把功能实现和开发成本放在第一位,而这些恰恰是与安全相矛盾的。快速开发导致的后遗症就是,开发者在还未完全了解原站所有功能的情况下就将二次开发后的网站发布上线了。
很多开源模板被二次甚至三次开发,并冠以其它公司的名字。这类情况并不在少数。
PHP漏洞组成
PHP开发出来的系统存在很多特有漏洞,这些漏洞往往隐藏于服务端代码逻辑之中,而且极难通过黑盒的方式发现,传统的渗透性测试几乎无能为力。
于是我们需要转向更深处,看看盒子里面的构造。
二. PHP白盒审计
一句话描述我们要做的工作
起点 终点
被引用过很多次的一张图
一些特别的代码结构
当然还有“坑爹”的PHP特性
见过很多次的一个界面
三. 如何进行漏洞挖掘——常见的PHP风险点
可操作的参数名
如果我们提交URL:
key.php?<script>alert(1);</script>=1&bbb=2 那么就导致一个xss的漏洞,想象一下如果这个key提交给include()等函数或者sql查询呢。
变量覆盖
a)这时我们提交URL: var.php?a=bye那么最后的显示效果应该是什么呢?
b)需要注意的是那个%3d。这个问题也同样会作用于mb_parse_str()
c)在register_globals开启的时候,请求var.php?GLOBALS[a]=aaaa&b=111,效果会如何呢?
d) 在register_globals被禁止的时候,import_request_variables可以同样起到对全局变量赋值的作用。
magic_quotes_gpc
魔术引号magic_quotes_gpc其实某些意义上来讲并不算是一个风险点,相反它其实是一个PHP特有的安全设置。一般来讲,懒惰的程序猿们常常认为魔术引号是用来掩盖他们代码缺陷的万用过滤器。可惜那帮无聊的白帽子们总能想出绕过办法..
下面几种情况可能会导致GPC被绕过1.$_SERVER
2.getenv()得到的变量3.$HTTP_RAW_POST_DATA与PHP输入、输出流
数据库操作容易忘记使用单引号保护
宽字节注入
因此,各类编码的一编一转,最终被绕进去的很可能是程序员。可能出现问题的编码如下:
举个栗子——比如这段奇葩代码…
<?php
$sql = “SELECT * FROM article WHERE articleid='”.urldecode($_GET[id]).”‘”;
?>
GPC的高级“用法”
//提交 ’//魔术引号处理 \’//我们要的字符 \
eval/preg_replace命令执行
命令执行无疑是PHP漏洞中最耸人听闻的一类了。简简单单一个请求就能够一步拿shell,这是多少黑客们梦寐以求的事情了…然而对于程序员来讲,犯下这样的错误往往就在一念之间。
更多内容请访问绿盟科技博客@ http://blog.nsfocus.net/php-vulnerability-mining/
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)