首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

你不知道的WEB漏洞挖掘(一)

基于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脚本漏洞挖掘的简单应用,大家可以继续挖挖,别的页面还有不少问题。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180210G015J200?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券