咨询热线:15379976413 联系人:邱云平 地址:中国吉林长春市朝阳区红旗街万达广场4号楼1单元
通过代码审计找出网站中的XSS漏洞实战(三)
来源:亚洲城集团备用客户端 发布时间:2019-12-02 点击量:252
一、背景
笔者此前录制了一套XSS的视频教程,在漏洞案例一节中讲解手工挖掘、工具挖掘、代码审计三部分内容,准备将内容用文章的形式再次写一此,前两篇已经写完,内容有一些关联性,其中手工XSS挖掘篇地址为快速找出网站中可能存在的XSS漏洞实践(一)https://segmentfault.com/a/1190000016095198
本文主要记录通过代码审计的方式进行XSS漏洞挖掘,分为了找出关键位置,正向审计,反向审计三个部分,审计的系统为permeate渗透测试系统
,测试系统的搭建可以参考笔者的第一篇文章。
二、操作概要
- 找出关键位置正向审计反向审计
三、找出关键位置
打蛇打七寸,说明在关键位置做事效率会更高,代码审计找出漏洞也是同理,因此笔者需要找出XSS关键的位置;对于目前的大多数Web应用来说,MVC模式是非常主流的一种形式,因此笔者这里将找到对应的控制器和模板,在这一节当中主要讲解找出位置的思路
3.1 找出控制器
找出控制器的方式通常是通过主入口文件与URL地址两块去分析,现在笔者打开首页,发现URL地址为
http://permeate.songboy.net/home/index.php
当点击板块后,URL地址变成了如下地址
http://permeate.songboy.net/home/index.php?m=tiezi&a=index&bk=6
从URL地址中可以看到不管首页还是板块页面,都经过URL地址home/index.php
,因此笔者接下来便可以通过打开home/index.php
文件来查看控制器所存放的位置,打开后代码如下所示
<?phprequire_once "../core/common.php";include "./public/header.php";includeAction("$model","$action");include "./public/footer.php";
再次打开../core/common.php
文件,代码如下所示
function includeAction($model, $action){ //判断控制器是否存在 $filePath = "./action/$model.php"; if (is_readable($filePath)) { require_once $filePath; $class = new $model; if (is_callable(array($class, $action))) { $class->$action(); return true; } } //如果没有找到对应的控制器,直接调用模板文件 $tplFilePath = "./tpl/$model/$action.php"; if (is_readable($tplFilePath)) { require_once $tplFilePath; return true; } echo "控制器或模板文件" . $filePath . "不存在!"; die;}
从代码中可以看出,其控制器文件存放在home/action/
下,此时笔者打开此文件夹,可以看到几个php文件,如下图所示
回想刚才笔者所看到的URL地址如下
http://permeate.songboy.net/home/index.php?m=tiezi&a=index&bk=6
联想起来其控制器文件为tiezi.php
,将其打开一看
<?phpclass tiezi{ function __construct() { } public function index() { ..... $data["count"] = $count; $data["page_size"] = $page_size; $data["page_count"] = $page_count; $data["page_num"] = $page_num; displayTpl("tiezi/index", $data); }
果然发现了index方法
3.2 找出模板
得到控制器之后,笔者还需要找到模板存放的位置,通常模板与控制器是息息相关,因此可以控制其中找到蛛丝马迹,比如上面的代码当中,最后一行代码为displayTpl
函数,从字面意思上可以理解为显示模板,因此笔者通过PHPStorm的跳转功能直接跳过去查看该函数的具体流程,找到代码如下所示
/** * 加载模板文件 * @param $tplPath */function displayTpl($tplPath, $data = []){ $filePath = "./tpl/$tplPath.php"; if (!is_readable($filePath)) { echo "模板文件" . $filePath . "不存在!"; die; } foreach ($data as $key => $val) { $$key = $val; } require_once $filePath;}
在上面代码当中可以看出模板存放于home/tpl
目录下,通过文件夹打开查看,如下图所示
3.3 验证位置
通过上面的操作流程已经基本确定控制器与模板的位置,但为了防止意外,还是准确验证一下,在控制器中输出一个字符串1111111,在模板中输出字符串222222222,如果按照笔者之前所预想的,那么这两组字符串都会被输出,参考代码如下
在控制器中加入的测试代码如下
public function index(){ echo "11111111111";
在模板文件中加入的测试代码如下
222222222222222<?php$get = $_GET;?><section >
现在会到浏览器,在当前页面单击鼠标右键,选中查看源代码,如下图所示
在源代码当中,搜索字符串11111
,果然搜索到字符串,如下图所示
四、正向审计
在找到关键位置之后,笔者便可以针对性的去进行代码审计,XSS的代码审计主要有两种方式,正向代码审计,反向代码审计;正向代码审计的意思是从参数的接收到参数最后的使用这个流程进行检查,而反向审计则是相反从变量使用的位置上推到参数接收
4.1 接收参数位置
首先通过正向方式来进行代码审计,正向代码审计是从接收参数进行排查,因此找到控制器当中,通过编辑器的搜索功能,笔者在控制器文件当中搜索了关键字 **$_GET** 找到了tiezi.php
控制器中的index
方法,代码如下所示
public function index() { $id = $_GET["bk"]; $bk = &$id; //开始分页大小 $page_size = 15; //获取当前页码 $page_num = empty($_GET["page"]) ? 1 : $_GET["page"]; //中间代码.................省略 $data["bk"] = $bk; $data["count"] = $count; $data["page_size"] = $page_size; $data["page_count"] = $page_count; $data["page_num"] = $page_num; displayTpl("tiezi/index", $data); }
4.2 模板位置是否过滤
从上面代码当中可以看出参数bk
并没有进行任何过滤,便直接放到了模板当中,这便留下安全隐患,如果在模板当中也没用进行安全过滤,那么就存在着反射型XSS漏洞,打开模板文件并搜索关键词bk
,代码如下所示
<div > <div style="float: right"> <a href="fatie.php?bk=<?php echo $bk ?>">发帖</a> </div>
可以看出,模板中确实没有进行安全过滤
4.3 漏洞验证
http://permeate.songboy.net/home/index.php?m=tiezi&a=index&bk=6%22%3E%3Cscript%3Ealert(123)%3C/script%3E
如下图所示
五、反向审计
反向审计则从模板中找出使用了那些变量,并反推变量的来源,以及是否进行了安全过滤
5.1 找出模板中的变量
通过PHPStrom编辑器的正则表达式功能匹配变量,正则表达式如下
echo $([a-z]*)
这个正则表达式是匹配输出变量,比如匹配字符echo $zhangsan
,用PHPStorm匹配到的结果如下图所示
双击鼠标左键打开对应代码文件/home/search.php
,代码如下所示
在代码中可以看出变量直接放在模板当中,如果在控制器当中也没有转义此变量的来源,那么很有可能会存在XSS问题。
5.2 查找变量来源
追踪变量$keyword
,找到变量来源
<?phpinclude "public/header.php";include "../core/common.php";$keywords = $_REQUEST["keywords"];if (!empty($keywords)) { $where = " where title like "%$keywords%" ";
从上面的代码当中可以看出变量$keywords
并没有进行任何过滤,因此可以笃定此处也存在这XSS漏洞问题
5.3 漏洞验证
从代码的位置发现与前面的唯一入口不同,此代码文件并不是类文件,因此尝试直接访问,构造出URL地址如下
http://permeate.songboy.net/home/search.php?keywords=%E6%B5%8B%E8%AF%95%3Cscript%3Ealert(123)%3C/script%3E
通过火狐浏览器访问此URL地址之后,出现结果如下图所示
在提示框当中果然弹出了123
的提示
六、新书推荐
如果对笔者的Web安全文章较为感兴趣,可以关注笔者更多文章内容,新书《PHP Web安全开发实战》,现已在各大网点销售,封面如下图所示
作者:汤青松
微信:songboy8888
日期:2018-10-09
相关产品
-
一年又两个月之后,他在乌镇迎来了升级版的AlphaGo。但是,他并没有拿下想象中的胜利。在第三场较量中,一向自信满满的他一度离席,走到现场的背板后默默流泪。赛后,他说自己“输得不甘心”,并表示以后再也不会跟“AI”下棋了。
-
男星霍建华因此“躺枪”,因霍建华之前曾与张馨予传出绯闻,因此他被疑是张馨予的出轨对象。但霍建华方面目前暂未给出回应。
-
原著系列小说《心理罪》从2007年首次出版至今整整十年,十年来小说《心理罪》累计征服数百万读者,被书迷和业界誉为十年来最经典的国产犯罪悬疑小说。
-
英国“深度思维”公司开发出“阿尔法围棋”,该公司团队在新一期英国《自然》杂志上发表题为《在没有人类知识条件下掌握围棋游戏》的论文,介绍了最新版的“阿尔法围棋-零”。
-
在当下足球世界中,任何一位名帅都不是孤军奋战,而是打造了一个技术服务团队,从日常训练、战术分析、比赛部署到赛后理疗康复,每个人各司其职。曼诺与球队会合后,鲁能会在最短的时间内召开新闻发布会,届时新的巴西教练团队将正式亮相。
-
作为王晶导演上百部影视作品中第一部魔幻巨制影片,加以导演钟少雄的倾情加盟,郑恺、张雨绮、谢依霖、王祖蓝、罗家英等一众影星的实力演绎,大气精致的魔幻画面加上王晶导演的南派喜剧风格,相信《降魔传》一定会为大家带来非一般的视听感受!
-
打头阵的APP是今日头条。第二梯队包括火山小视频、西瓜视频、抖音、悟空问答,以及收购的美国短视频社区Flipagram、自营的“海外版今日头条”TopBuzz。第三梯队包括内涵段子、搞笑囧图、有点意思、东方IC等等。此外,还有数个应用在孵化阶段,尚未对外公布。
-
中新网12月16日电 据台湾“中央社”报道,台大医师柯文哲17日拜会民进党主席苏贞昌,民进党发言人林俊宪今天(16日)表示,民进党县市长选举提名采征召,且是“党员”征召。柯文哲入党与否,引发绿营内部争议。
热点资讯
- 拼多多一步步跌落深渊2019-11-15
- 男女通用/杜蕾斯同集团品牌,Clearasil旗舰店祛痘保湿乳39元2019-11-30
- 399元秒杀480GB固态硬盘,Gloway光威悍将中秋大促2019-06-24
- 《盟军敢死队》系列将复活?德国厂商称已买下IP开发新作中2019-12-02
- 第一批游戏已经过审核,发布号码正在发布。2019-06-24
- 生石花生长的四要素!2019-11-09
- 力帆股份:拟6.5亿元转让重庆力帆汽车2019-11-06
- 一线丨小鹏汽车回应苹果员工涉窃取商业机密:已对其办公用品封存2019-10-29