基于PHP的漏洞挖掘
------PHPAA文章管理系统漏洞分析
漏洞挖掘听起来很神秘,其实也并不是高不可及的。只要打好基础,一步一个脚印的学习,我们也可以挖到一些网站系统的0day漏洞。今天主要给大家说说基于PHP脚本的漏洞挖掘技术。
基于源代码的漏洞挖掘还是比较容易的,今天我们就拿PHPAA文章管理系统为例。版本是V0.3.1(老版本了,是个nday,亲不要在意那些细节,理解精神最重要^_^)。下载了源代码就可以在本机搭建环境进行测试了,先看文章显示页面代码:
show.php
$arc = getArticleInfo();
include_once 'footer.php';
/**
* 获取文章详情
* @param $id
*/
function getArticleInfo($id=0){
global $db;
if($id==0){
if(empty($_GET['id'])){
return false;
}else{
$id = $_GET['id'];
}
}
return $db->getOneRow("select * from cms_article where id=".$id);
}
可以看出这个函数并没有对id进行严格的过滤,也就是说只要id不为空即可执行查询数据库语句“select * from cms_article where id=".$id”。在show.php中向下看,当查询结束后会将结果中的'title'和'content'两个字段的内容显示出来。有了上面的分析我们就可以构造sql注入语句了,首先构造一个爆管理员账号和密码的sql注入语句吧。
用联合查询的方法可以很容易的获得管理员的用户名和密码信息,只要将id赋值为“-1%20union%20select%201,2,username,4,5,6,7,8,9,10,password,12,13,14,15%20from%20cms_users”提交即可。我们来看一下数据执行的过程吧,id传到getArticleInfo函数中后,首先判断id是否为0,不为0则执行sql查询语句:“select * from cms_article where id=-1 union select 1,2,username,4,5,6,7,8,9,10,password,12,13,14,15 from cms_users”。显然id=-1是不存在的,因此返回结果将是“select 1,2,username,4,5,6,7,8,9,10,password,12,13,14,15 from cms_users”的结果了,也就是将管理员账号赋值到结果的第三个字段,将管理员的密码(md5加密后的)赋值给第11个字段。show.php中的$arc['title']正好是结果的第三个字段,而$arc['content']则是结果的第11个字段。也就是说将管理员的账号信息,显示在网页上看。
好了,我们用IE提交一下看看效果吧:
是不是很神奇呢?有的朋友可能要问了,为什么要select后面要有15个字段呢?这是因为getArticleInfo函数在查cms_article表时会返回15个字段的结果(因为cms_article中有15个字段),而显示的又是第3和第11个字段的信息。
然后将把密码扔到CMD5.COM里解密一下,就可以登录后台了。后台地址是admin/login.php。
我们再来看看跨站脚本漏洞。由于对输入数据基本没有过滤,因此存在跨站脚本漏洞的页面较多,但是可利用的我认为是留言功能。首先看看message.php的代码。
session_start();
include_once 'header.php';
if(isset($_POST['name'])){
if($_SESSION['cfmcode']!=$_POST['cfmcode']){
echo "";
}
}
大意就是将留言信息简单的判断一下就直接写入到数据库中了。因此我们可以写入一下跨站脚本信息。但是要实现跨站脚本攻击必须要满足两个条件,一个是输入未过滤,还有一个就是输出未转译。写入的留言,管理员在后台登陆后会看到。因此我们来看看
Admin/message.php
$friendlink_list = $db->getList("select * from cms_message order by id desc");
…………
……
foreach ($friendlink_list as $list){
…………
……
QQ: Email: IP:
可以看出输出是直接的echo,并没有字符转译。也就是说我们提交的留言会完全在后台显示,只要管理员查看留言就会执行我们的跨站脚本。至于如何利用,大家就要多发挥想象力了,当然最直接的方法就是挂马了,在内容中输入“”提交即可,管理员在查看留言的时候就会中招。我们就用对话框脚本演示一下吧。留言内容中输入“”提交,然后到后台查看留言,
成功弹窗。
以上就是基于PHP脚本漏洞挖掘的简单应用,大家可以继续挖挖,别的页面还有不少问题。
领取专属 10元无门槛券
私享最新 技术干货