如何通过代码审计找出网站中的XSS漏洞
如何通过代码审计找出网站中的XSS漏洞,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
一、背景
笔者此前录制了一套XSS的视频教程,在漏洞案例一节中讲解手工挖掘、工具挖掘、代码审计三部分内容,准备将内容用文章的形式再次写一此,前两篇已经写完,内容有一些关联性,其中手工XSS挖掘篇地址为快速找出网站中可能存在的XSS漏洞实践。
这里主要记录通过代码审计的方式进行XSS漏洞挖掘,分为了找出关键位置,正向审计,反向审计三个部分,审计的系统为permeate渗透测试系统
,测试系统的搭建可以参考笔者的第一篇文章。
二、操作概要
1.找出关键位置
2.正向审计
3.反向审计
三、找出关键位置
打蛇打七寸,说明在关键位置做事效率会更高,代码审计找出漏洞也是同理,因此笔者需要找出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
文件来查看控制器所存放的位置,打开后代码如下所示:
再次打开
../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
,将其打开一看:果然发现了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现在会到浏览器,在当前页面单击鼠标右键,选中查看源代码,如下图所示:
在源代码当中,搜索字符串
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
,代码如下所示:可以看出,模板中确实没有进行安全过滤。
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
,找到变量来源:从上面的代码当中可以看出变量
$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
的提示。关于如何通过代码审计找出网站中的XSS漏洞问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。
代码 审计 模板 控制 控制器 文件 位置 笔者 变量 漏洞 地址 关键 参数 字符 字符串 问题 搜索 安全 内容 方式 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 工控行业软件开发 app与服务器连接超时 王者荣耀防沉迷服务器崩溃 查询数据库前两条 海南电商软件开发外包 曙光服务器默认管理密码 时间管理app服务器端 电脑软件开发招工 c语言网络安全框架 网络安全知识竞赛相关题目 永康软件开发制度 红黑树数据库 游戏app软件开发商 西安android软件开发公司 打印机服务器 扫描 设置服务器自动关机 驰普网络技术公司 网络技术基础一般学什么 服务器脚本有哪些 网络安全攻防大赛解析 宽城区有名的网络技术服务哪家好 维护网络安全要坚持 sql数据库表格无法删除列 怎么用uniprot数据库 苏州网站建设软件开发 赢时胜软件开发岗位 阿里云东京服务器 28岁自学软件开发 微交易软件开发点位盘 鼎新erp软件开发