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

news/2024/5/9 3:10:37/文章来源:https://blog.csdn.net/weixin_34247032/article/details/89610614

一、背景

笔者此前录制了一套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

作者:汤青松

日期:2018-10-09

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

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

相关文章

html 树形结构_第四:高权重网站结构打造

第四&#xff1a;高权重网站结构打造网站结构是网站的骨架&#xff0c;就像人也有骨架一样&#xff0c;及其重要。在搜索引擎打分规则中&#xff0c;网站的得分占比还是非常大的&#xff0c;我们下面会给大家分享下网站结构优化建议。★ 什么是网站结构网站的结构&#xff0c;可…

jQuery css3仿游戏网站右键环形菜单

效果展示 http://hovertree.com/texiao/jquery/86/PC用户右键弹出环形菜单。手机用户扫描二维码&#xff1a;长安可以弹出环形菜单。 转自&#xff1a;http://hovertree.com/h/bjaf/aht9w1n8.htm web前端特效:http://www.cnblogs.com/jihua/p/webfront.html转载于:https://www.…

使用jenkins配置.net mvc网站进行持续集成一

最近好久没有更新文章了&#xff0c;因为好久没有写代码了&#xff0c;以至于我不知道同大家分享些什么&#xff0c;刚好&#xff0c;今天突然叫我学习下jenkins每日构建&#xff0c;我就把今天的学习笔记记录下来&#xff0c;这其中很多东西都是公司同事之前调研总结的&#x…

TLS 1.2 协议现漏洞,多个网站受影响

开发四年只会写业务代码&#xff0c;分布式高并发都不会还做程序员&#xff1f; >>> TLS 1.2 协议被发现存在漏洞&#xff0c;该漏洞允许攻击者滥用 Citrix 的交付控制器&#xff08;ADC&#xff09;网络设备来解密 TLS 流量。“TLS 1.2 存在漏洞的原因&#xff0c;…

PbootCMS V1.3.7 发布,PHP 建站系统

开发四年只会写业务代码&#xff0c;分布式高并发都不会还做程序员&#xff1f; >>> PbootCMS V1.3.7 build 2019-03-12 1、修复部分情况数据库语句执行发生的错误不能正常显示的问题&#xff1b; 2、修复搜索时表单传递字段控制被过滤掉的问题&#xff1b; 3、新增…

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

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

使用tomcat发布一个外网可以访问的网站

方法/步骤11.安装外网映射工具步骤阅读22.下载通tomcat33.更改tomcat的conf文件夹下文件server.xml1.<Connector port"8080" protocol"HTTP/1.1" connectionTimeout"20000" redirectPort"8443" />端口号:port改为802. <Engin…

【try..catch..】【判断输入是否为空】【onchange事件】【onmouseover和onmouseout事件】【onmousedown和onmouseup事件】...

1.try..catch.. <body><script>function myFunction(){try{ var xdocument.getElementById("demo").value;//取值if(x"") throw "值为空"; //返回错误提示if(isNaN(x)) throw "不是数字";if(x>10) …

使用Windows定时计划,7z开源压缩和批处理命令进行网站资料目录的定时备份

项目进行到数据备份阶段发现录入的数据很有必要进行备份,所以在实现sqlserver数据备份的前提下需要把上传目录下的文档进行备份 使用7zip来进行数据备份 首先创建一个文本文档,另存.bat批处理文档 备份代码如下 格式为 7z.ex a "压缩文件需要保存的路径" "要压缩…

电脑无internet访问_网站访问不了怎么办?

相信不少站长都会遇到过这样的问题&#xff0c;那就是网站打不开了&#xff0c;但是这里并不是说每次都打不开&#xff0c;其实网站打不开是有很多的原因的&#xff0c;有可能是域名解析错误&#xff0c;也有可能是服务器不稳定的原因等。大部分的用户都是搞不清楚是什么原因造…

tinymce移动端使用_中小站长该如何做好移动端SEO优化

点击上方"蓝字"&#xff0c;关注我们。文 | 陈老师来源&#xff1a;SEO轻松学对于网站来说&#xff0c;忽略移动端的流量从任何角度来看都是不划算的交易&#xff0c;就像流量站一样。这取决于流量实现它。虽然一些网站的移动端流量并不多&#xff0c;但还远远达不到…

网站后面为啥加端口_个人搭建博客网站的几种方案汇总

1、GitGithubMarkdownjekyll&#xff08;免费&#xff09;2、GitGithubMarkdownhexo&#xff08;免费&#xff09;3、虚拟主机插件Wordpress&#xff08;付费&#xff09;个人有个不成熟的小建议&#xff1a;如果你不想付费&#xff0c;也不想备案&#xff0c;那你基本上就已经…

Redis架构之防雪崩设计:网站不宕机背后的兵法

一、缓存穿透预防及优化 缓存穿透是指查询一个根本不存在的数据&#xff0c;缓存层和存储层都不会命中&#xff0c;但是出于容错的考虑&#xff0c;如果从存储层查不到数据则不写入缓存层&#xff0c;如图 11-3 所示整个过程分为如下 3 步&#xff1a; 缓存层不命中存储层不命…

手把手教程:如何在手机钉钉中添加企业自己的系统网站应用?

前言 在企业办公过程中&#xff0c;为了方便在钉钉中访问已经的系统或应用&#xff0c;可以通过在钉钉中添加自己的企业应用&#xff0c;方便快速找到&#xff0c;进行高效办公。 下面&#xff0c;以YesDev项目管理为例&#xff0c;图文说明如何操作。 用电脑操作&#xff1a…

大型网站架构演化

互联网网站的发展只经历了短短20多年&#xff0c;20多年时间发生了巨大的变化。今天全球有近一半的人口使用互联网。但是一些问题也产生了&#xff0c;电子商务火热的市场背后却是不堪重负的网站架构。12306等。如何打造一个高可用、高性能、易扩展、可伸缩的安全性网站&#x…

果创云-在线中文接口编程的网站,低代码快速开发你的接口

中文接口编程 果创云&#xff08;YesApi.cn&#xff09;&#xff0c;是一个API接口低代码开发平台。现在已经支持中文接口编程。也就是&#xff0c;你可以使用中文来自助开发自己的API接口。 不需要编程基础&#xff0c;就可以在线创建和开发自己的API接口&#xff0c;并且实…

ECS centos6.8系统下从nginx安装到简单网站上线配置操作的完整记录

1.准备工作 1.1已购买阿里云云服务器ECS 1.2域名已购买并解析成功 1.3安装有远程链接工具Xshell和文件传输工具Xftf&#xff0c;并链接上ECS实例 2.安装nginx&#xff08;在Xshell操作&#xff09; 2.1检查安装环境 Nginx是C写的&#xff0c;需要用GCC编译&#xff1b;Nginx的R…

JavaScript里mouseenter和mouseleave与mouseover和mouseout的区别

今天总结下mouseenter、mouseleave、mouseover、mouseout的区别&#xff0c;之前一直懵着用没仔细研究他们的区别&#xff0c;结果终于踢到铁板了。 上代码&#xff1a; <style> div { margin: 0 auto; }     .box { box-sizing: border-box; padding: 30px 0; width…

网站前端ajax翻页插件记录

网站前端ajax翻页插件记录 背景&#xff1a;写了个Django项目&#xff0c;但是在部署到服务器第一次打开网站前端首页的时候&#xff0c;加载速度超慢&#xff0c;主要集中在图片加载浪费时间&#xff0c;而此时我的前端很多部分还没有填充图片&#xff0c; 所以想写个ajax&…

这4个基本常识小窍门 做网站的你必须了解

互联网时代&#xff0c;长点基本网建知识和小窍门&#xff0c;是必须的。所谓知己知彼,方能百战不殆。今天&#xff0c;誉哥为大家GET点新技能。 第一步&#xff1a;域名注册。 域名又叫网址&#xff0c;有了域名不代表有网站&#xff0c;域名只是门牌号&#xff0c;无论用.COM…