通过代码审计找出网站中的XSS漏洞实战(三)

news/2024/5/3 14:35:05/文章来源:https://blog.csdn.net/weixin_33861800/article/details/88712721

一、背景

笔者此前录制了一套XSS的视频教程,在漏洞案例一节中讲解手工挖掘、工具挖掘、代码审计三部分内容,准备将内容用文章的形式再次写一此,前两篇已经写完,内容有一些关联性,其中手工XSS挖掘篇地址为快速找出网站中可能存在的XSS漏洞实践(一)https://segmentfault.com/a/1190000016095198

本文主要记录通过代码审计的方式进行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文件来查看控制器所存放的位置,打开后代码如下所示

<?php
require_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文件,如下图所示

image

回想刚才笔者所看到的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目录下,通过文件夹打开查看,如下图所示

image

3.3 验证位置

通过上面的操作流程已经基本确定控制器与模板的位置,但为了防止意外,还是准确验证一下,在控制器中输出一个字符串1111111,在模板中输出字符串222222222,如果按照笔者之前所预想的,那么这两组字符串都会被输出,参考代码如下

在控制器中加入的测试代码如下

public function index()
{echo '11111111111';

在模板文件中加入的测试代码如下

222222222222222
<?php
$get = $_GET;
?>
<section class="section">

现在会到浏览器,在当前页面单击鼠标右键,选中查看源代码,如下图所示

image

在源代码当中,搜索字符串11111,果然搜索到字符串,如下图所示

image

四、正向审计

在找到关键位置之后,笔者便可以针对性的去进行代码审计,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 class="post-list-controller"><div style="float: right"><a class="btn btn-primary" 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

如下图所示

image

五、反向审计

反向审计则从模板中找出使用了那些变量,并反推变量的来源,以及是否进行了安全过滤

5.1 找出模板中的变量

通过PHPStrom编辑器的正则表达式功能匹配变量,正则表达式如下

echo \$([a-z]*)

这个正则表达式是匹配输出变量,比如匹配字符echo $zhangsan,用PHPStorm匹配到的结果如下图所示

image

双击鼠标左键打开对应代码文件/home/search.php,代码如下所示

image

在代码中可以看出变量直接放在模板当中,如果在控制器当中也没有转义此变量的来源,那么很有可能会存在XSS问题。

5.2 查找变量来源

追踪变量$keyword,找到变量来源

<?php
include "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地址之后,出现结果如下图所示

image

在提示框当中果然弹出了123的提示

六、新书推荐

如果对笔者的Web安全文章较为感兴趣,可以关注笔者更多文章内容,新书《PHP Web安全开发实战》,现已在各大网点销售,封面如下图所示

image

作者:汤青松

微信:songboy8888

日期:2018-10-09

我的博客即将同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/dev...

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_831531.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

异步跳转火狐拦截 请求后跳转火狐拦截 Fiefix拦截了此网站的1个弹窗

#当我们从和后端请求数据后&#xff0c;然后根据请求来的数据判断是否跳转页面&#xff0c;或请求到数据再跳转&#xff0c;火狐、EDG浏览器就会拦截&#xff0c;如下图&#xff1a; 当我们点击选项&#xff0c;允许弹出窗口时&#xff1a; 以后就不会再弹出此窗口&#xff0c…

理清用户组概念及文件权限—搞懂网站权限设置

关于用户,用户组,角色和权限 用户组&#xff1a;比如 现在有4组&#xff0c;把一些功能赋给组 第1组 可以删除 第2组 可以查看 第3组 可以编辑 第4组 可以新增 当某一角色 比如管理员 普通管理员就是2个角色 分别属于不同的用户组 那么他实现的功能就不一样了 从而实现控制…

(2022年12月)解决: 您目前无法访问 因为此网站使用了 HSTS。网络错误和攻击通常是暂时的,因此,此网页稍后可能会恢复正常

1、问题描述&#xff1a; 您目前无法访问 因为此网站使用了 HSTS。网络错误和攻击通常是暂时的&#xff0c;因此&#xff0c;此网页稍后可能会恢复正常 2、概念解释&#xff1a; HSTS&#xff1a;HSTS 是 HTTP 严格传输安全&#xff08;HTTP Strict Transport Security&…

大型网站技术架构(五)网站高可用架构

2019独角兽企业重金招聘Python工程师标准>>> 网站的可用性&#xff08;Avaliability&#xff09;描述网站可有效访问的特性。 1、网站可用性的度量与考核 网站不可用时间&#xff08;故障时间&#xff09;故障修复时间点-故障发现&#xff08;报告&#xff09;时间点…

网站部署【宝塔,frp,ruoyi】

宝塔&#xff08;自定义域名访问宝塔面板&#xff09; 【必须】添加站点 【可选】有域名的去解析一下。【可选】没有域名&#xff0c;需要配置一下host文件【必须】反向代理设置 个人理解&#xff0c;配置了host文件&#xff0c;客服端就可以找到这台服务器&#xff0c;这个网…

IP直接访问网站

IP直接访问网站 宝塔新建一个站点 添加的域名和ip保持一致&#xff0c;具体为什么不清楚 通过浏览器访问成功 配置文件 在这里插入代码片server {listen 80;server_name 180.76.112.154;index index.php index.html index.htm default.php default.htm default.html;root /www…

html源码里面写current,网站背景代码蜘蛛网动态代码HTML代码

第一种&#xff1a;JS方式代码! function() {//封装方法&#xff0c;压缩之后减少文件大小function get_attribute(node, attr, default_value) {return node.getAttribute(attr) || default_value;}//封装方法&#xff0c;压缩之后减少文件大小function get_by_tagname(name) …

网站使得变灰的代码

首先&#xff0c;深切哀悼全国抗击新冠肺炎疫情斗争牺牲的烈士和逝世同胞。 在4月4日&#xff0c;全国多数网站响应国务院的号召&#xff0c;停止全国停止公共娱乐活动。将娱乐相关的网站内容暂时下架&#xff0c;并将网站主题变更为灰色。在那天&#xff0c;我们见到了许许多…

【初级篇】使得PC搭建的网站在非局域网也能访问的几种方法

使得搭建的网站不在同一个局域网也能访问的几种方法 注意&#xff1a;不是翻墙搭梯子之类的。不是翻墙搭梯子之类的。不是翻墙搭梯子之类的。&#xff08;文章是讲述怎么通过ip访问到自己的pc。第一个方法也可用于远程桌面连接&#xff09; 1.通过内网端口映射 需要的准备的…

【初级篇】建站需要做的前期工作

*建站主要准备以下工作 搭建服务器获取公网IP申请顶级域名将公网IP解析到对应顶级域名搭建相关服务&#xff08;Nignx/Tomcat等等&#xff09;设置SSL证书&#xff0c;设置HTTPS重定/向&#xff08;可选&#xff09;使用CDN加速网站访问&#xff08;可选&#xff09;内网穿透具…

史上最全的ACM OJ OI 算法竞赛 编程学习入门网站集合

https://leetcode-cn.com/problemset/all/ 链接 https://oi-wiki.org/ https://csacademy.com/app/graph_editor/ http://www.docin.com/p-500811100.html?docfromrrela https://www.cnblogs.com/ivorysi/ https://www.cnblogs.com/RabbitHu/p/BIT.html Cmd Markdown 编辑…

PPT精美模板免费下载网站 高清壁纸免费下载网站 在线PS(Photoshop在线网站)网站 分享

https://wallhaven.cc/ 网站链接 免费下载高清壁纸 https://www.uupoop.com/ 网站链接 在线使用PS作图 http://www.ypppt.com/ PPT模板免费下载链接

二手物品商城java web,java|web|jsp校园二手网站|二手商品交易市场|平台|毕业设计课设|...

演示地址&#xff1a;如有演示站请以演示为准&#xff0c;无演示站以截图为准,源码太多服务器有限&#xff0c;无法搭建所有源码演示站&#xff0c;请谅解&#xff01;新手购买指导&#xff1a;1.在本站注册账号 丨 2.登录已注册账号充值源码所需金币 丨 3.登录账号下载所需源码…

安装php cms 系统教程,phpcms怎么本地安装_CMS系统建站教程

如何批量替换WordPress自定义栏目值_CMS系统建站教程下面由WordPress教程栏目给大家介绍批量替换WordPress自定义栏目值的方法&#xff0c;希望对需要的朋友有所帮助&#xff01;将下面代码添加到当前主题函数模板 functions.php...适用于只修改链接地址中的域名&#xff0c;不…

本地服务器删除原网站,解决LNMP环境无法彻底删除原网站目录文件夹的方法

目前&#xff0c;如果我们需要用到在Linux配置网站WEB环境&#xff0c;LNMP一键安装脚本还是比较多用的&#xff0c;这个脚本算是运营至今是比较早的脚本之一&#xff0c;虽然有些脚本已经不再维护更新&#xff0c;但是LNMP一直保持着一年一次较大的更新。而且这个脚本在文档上…

Nginx配置SSL证书部署HTTPS网站

一、什么是 SSL 证书&#xff0c;什么是 HTTPS SSL 证书是一种数字证书&#xff0c;它使用 Secure Socket Layer 协议在浏览器和 Web 服务器之间建立一条安全通道&#xff0c;从而实现&#xff1a; 1、数据信息在客户端和服务器之间的加密传输&#xff0c;保证双方传递信息的安…

免费的大数据分析可视化网站-司南智图

司南智图: 一站式大数据分析可视化平台 先来个地址&#xff1a; http://gde.geo-compass.com 司南智图遵从“开放、融合、创新、共赢”的建设理念&#xff0c;紧密结合“大数据、互联网”技术&#xff0c;提供“空间数据非空间数据”的全平台解决方案&#xff0c;解决一份数…

网站访问认证服务器,域名认证_漏洞扫描服务 VSS_用户指南_网站漏洞扫描_华为云...

认证文件上传网站根目录的配置示例域名认证时&#xff0c;需要将下载的认证文件上传到网站根目录&#xff0c;然后进行认证。用户使用的服务器不同&#xff0c;文件上传的位置有所不同&#xff0c;请参照以下示例场景完成认证文件的上传。以下示例场景不能覆盖所有的场景&#…