代码审计中XSS挖掘一些体会

0x01 XSS的挖掘思路

1.1 反射型

直接搜索 echo print_r print之类的函数即可
也可以寻找$_GET变量来判断是否存在输出(不过对于代码审计来说除非实在挖不出漏洞,否则没必要关注反射xss)

1.2 dom型

和反射型差不多
需要看网站的前端javascript(一般安装好网页直接查看源代码即可,和反射xss一样代码审计没必要太过于关注)。但是也和反射型有区别,domxss是不经过服务器处理的,也就是不需要经过后端代码,需要审计javascript。

1.3 存储型xss

对于代码审计,存储型xss才是需要关注的重点。

存储型xss一般是存在有数据库交互的地方,因为需要把数据写入进去数据库中才能长期储存数据。

所以我们在审计存储型xss的时候会关注数据库交互的地方。

这里举例两种思路:

思路一 : 从数据库类文件中开始审计

什么是数据库类文件呢?
其实在实际开发项目过程中,通常程序员都会把数据库操作封装成一个类来提供操作。

比如说我们需要设计一个留言板,留言板最基本得有这几个功能吧。比如说发表留言,查看留言,回复留言,删除留言,修改留言等等功能。

而这些是不是需要使用数据库来实现这类功能(下面用代码配合伪代码示意,注意代码可以不用理解功能,但是要能够理解代码为什么要这样写。)

# 比如用户发表一条留言

# uname就是用户名也就是"小明",content就是内容也就是"你好"

insert into text(id, uname, content) value(1, '小明', '你好');
# 然后用户发现你好不太恰当,想删掉替换成您好
delete from text where id = 1;
# id就是数据库用于区分不同数据的字段, delete from 表示删除表里面的内容
text表示需要删除的表
# 表示删除id=1的数据
where id = 1

# 那么php中的代码是这样看小明的:
$sql = "insert into text(id, uname, content) value(1, '小明',
'你好')";
// $conn就是我们数据库的链接
mysqli_query($conn, $sql);
$sql = "delete from text where id = 1";
mysqli_query($conn, $sql);
// 小明换成了您好
$sql = "insert into text(id, uname, content) value(2, '小明',
'您好')";
mysqli_query($conn, $sql);
$sql = "delete from text where id = 2";
mysqli_query($conn, $sql);

# 这样的代码是不是特别麻烦 把他简化一下(把sql查询做成一个函数)
function sql_insert($name, $content){
$sql = "insert into text(id, uname, content) value(1, '{$name}',
'{$content}',哈哈哈哈')";
mysqli_query($conn,$sql);
}

function sql_delete($id){
$sql = "delete from text where id = '{$id}'";
mysqli_query($conn,$sql);
}

// 好的封装完成了 这时候小明发送你好
sql_insert('小明', "你好");
sql_delete(1); // 想删除
// 发送您好
sql_insert('小明', "您好");
sql_delete(2); // 又删除

# 这样是不是无论小明发多少条留言都能够很轻松的删除插入
# 好了 这就是封装成的作用(把重复的操作放在一起)
#
这里是写完了,但是还是有一个问题,比如遇到sql注入怎么办。遇到xss怎么办。
# 很简单!只需要修改我们定义的两个操作函数即可
function sql_insert($name, $content){
$name = htmlspecialchars(addslashes($name));
$content = htmlspecialchars(addslashes($content)); // 添加了转义
$sql = "insert into text(id, uname, content) value(1, '{$name}',
'{$content}')";
mysqli_query($conn,$sql);
}

function sql_delete($id){
$id = intval($id); // 强制转换
$sql = "delete from text where id = '{$id}'";
mysqli_query($conn,$sql);
}

#
是不是这样的写法很方便,如果我们不定义一个函数集中操作的话每次拼接sql语句都需要添加htmlspecialchars和addlashes
#
这就是我们为什么要寻找数据库操作文件的意义。(因为程序员很有可能把过滤函数写在sql类中)

好了,进入正题。 关于如何找到sql封装文件,很简单。

搜索关键字即可(new mysqli, mysqli,
pdo)这里拿其他cms来实例(phpems架构比较复杂也就是上课时用的cms)这里我使用yixuncms_v2.0.3

打开文件,全局搜索

第二步 分析文件的功能 查找需要的关键函数

直接跟进query函数 查看是否有过滤

右键定位函数 定位escape_string_array函数

然后跟进审计

思路二: 使用输出函数进行动态输出查看是否过滤

因为源代码在我们服务器上,我们可以使用echo
或者var_dump查看过滤后的结果来判断过滤了什么。

由于我们不知道在程序在哪个页面做了sql查询,所以选择登录功能作为测试点

因为可以知道一点,那就是登陆功能一定是做了sql查询的,除非是前端登陆,而前端登陆本身也就是一个漏洞…

知道了这一点,登陆抓包,登陆账号密码有没有都不要紧。

我这里使用错误的账号密码登陆:

返回了一个操作失败

然后我们根据提示去全局搜索: 操作失败

至于为什么是这三个呢? 因为我们抓到的数据表访问的就是这个路径

进入app.php

然后定位getUserByUserName函数

然后就可以添加代码进行调试了(修改后记得保存 快捷键 ctrl + s)

再次发包进行调试发现已经返回sql语句了

思路在这里完结了。下面是漏洞复现

帮助网安学习,全套资料S信免费领取:
① 网安学习成长路径思维导图
② 60+网安经典常用工具包
③ 100+SRC分析报告
④ 150+网安攻防实战技术电子书
⑤ 最权威CISSP 认证考试指南+题库
⑥ 超1800页CTF实战技巧手册
⑦ 最新网安大厂面试题合集(含答案)
⑧ APP客户端安全检测指南(安卓+IOS)

0x02 漏洞的复现

因为上面已经知道了xss和sql在普通参数里面不存在,然后正常注册后登陆发现

那么直接根据注册ip搜索

跟进后再次全局搜索

由于程序开发中默认ip地址是安全的一般很少会进行过滤,所以这里直接猜测ip地址不存在过滤。

然后注册账号进行测试

payload:Client-ip: <svg/οnlοad=alert(1)>

然后放包,发现个人中心已经存储了我们的xss

同理,这里没有经过过滤也是存在注入的。这里就不在演示

0x03 总结

xss加固可以在前端或者后端实体编码 同时也要注意对单双引号的转义。

不要以为获取ip就是安全的,获取ip往往是不安全的。

思路 -》 找过滤函数 -》测试过滤是否有遗漏 -》 测试可能没有经过过滤的参数

有些网站会把在属性内的参数使用反斜杠编码.比如你输入 &url="
οnerrοr=alert(1) 双引号会被转义成
/",这时如果网站的编码是gb2312…之类的可以使用宽字节 %df"的方式绕过

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

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

相关文章

实验1_配置标准IPv4 ACL

1、实验目的 通过本实验可以掌握&#xff1a; IPv4 ACL工作方式和工作过程定义编号和命名的标准IPv4 ACL的方法接口和VTY下应用标准IPv4 ACL的方法 2、实验拓扑 配置IPv4 ACL的实验拓扑如图9-2所示 配置 ACL 实验拓扑如下图所示。本实验中&#xff0c;通过配置标准 ACL 实现…

第 54 期:MySQL Too many open files 报错

社区王牌专栏《一问一实验&#xff1a;AI 版》全新改版归来&#xff0c;得到了新老读者们的关注。其中不乏对 ChatDBA 感兴趣的读者前来咨询&#xff0c;表达了想试用体验 ChatDBA 的意愿&#xff0c;对此我们表示感谢 &#x1f91f;。 目前&#xff0c;ChatDBA 还在最后的准备…

56.SAP MII开发的一个系统响应错误 Error code: ICMETIMEOUT

问题 一个SAP MII开发的项目&#xff0c;最近新增了一个功能&#xff0c;查询数据源量比较大&#xff0c;逻辑有点复杂&#xff0c;大约7-8分钟。发布到生产系统后&#xff0c;发生响应错误&#xff0c;返回 Error code: ICMETIMEOUT <!-- Error code: ICMETIMEOUT -->\r…

DAY 45 企业级虚拟化技术KVM

企业级虚拟化技术KVM 1.kvm是什么 kernel virtualization machine 内核虚拟机 qemu的二次开发 软件全拼 qemu-kvm kvm virtulbox ovm vmware vsphere套件&#xff08;vmawre-esxi&#xff09; microsoft hyper-V 2.什么是虚拟化 资源利用 资源隔离 虚拟化管理&…

反激开关电源保险丝以及热敏电阻的选型

保险丝&#xff08;2A/250V&#xff09; 保险丝的选型及计算 1、保险丝的作用就是在电路出现故障造成过流甚至短路时能及时切断电路电源的联系。&#xff08; 保护后 级电路&#xff0c;一旦出现故障&#xff0c;由于电流过大温度过高&#xff0c;保险丝熔断 &#xff09; 2、…

ArcGIS arcpy代码工具——关于工具使用的软件环境说明

系列文章目录 ArcGIS arcpy代码工具——批量对MXD文件的页面布局设置修改 ArcGIS arcpy代码工具——数据驱动工具批量导出MXD文档并同步导出图片 ArcGIS arcpy代码工具——将要素属性表字段及要素截图插入word模板 ArcGIS arcpy代码工具——定制属性表字段输出表格 ArcGIS arc…

用户需求分析揭秘:最佳实践与策略

大多数产品团队都有自己处理客户需求的一套流程。但是那些潜在的客户和他们的需求呢&#xff1f;如果在产品管理上已经有一定的资历&#xff0c;很可能对此见惯不怪了。 通常&#xff0c;这些需求是销售人员跑来告诉你的&#xff0c;大概就是说&#xff1a;“超棒的潜在客户一…

MySQL 架构

本篇主要介绍一下MySQL的架构 目录 一、整体架构 二、连接层 网络端口 连接管理线程 三、服务层 NoSQL接口与SQL接口 Parser&#xff08;语法分析器&#xff09; Optimizer&#xff08;查询优化器&#xff09; Cache & Buffers(缓存&#xff09; 四、存储引擎层…

AI实时免费在线图片工具5:Glyph-ByT5图上添加文字显示

1、Glyph-ByT5图上添加文字显示&#xff08;支持多语言&#xff1a;中文、英文、韩文等&#xff09; 参考&#xff1a;https://github.com/AIGText/Glyph-ByT5 在线网址&#xff1a; https://huggingface.co/spaces/GlyphByT5/Glyph-SDXL-v2 下面是画框&#xff0c;一个框要点…

如何定位报错: indexSelectLargeIndex:... Assertion `srcIndex < srcSelectDimSize` fail

文章目录 1. 背景2. 准备工作2.1 debug工具2.2 设置准备工作 3. 开启 debug 1. 背景 在使用 cuda 在 gpu 计算的过程中&#xff0c;出现索引超过最大长度。 indexSelectLargeIndex:... Assertion srcIndex < srcSelectDimSize fail通常这种时候堆栈底部还伴随以下报错&…

Aiflow中,代码逻辑中明明不该触发的方法但是却触发了。

图中这个红圈的task&#xff0c;是我更新error记录的task&#xff0c;是某些特定的task特定情况会触发的。正常情况走的最下面的箭头的路径。但是现在就是就算只走了下面箭头的路径&#xff0c;红圈那个task依然被触发了。检查了半天才发现&#xff0c;它的TriggerRule设置的是…

【HarmonyOS】鸿蒙应用模块化实现

【HarmonyOS】鸿蒙应用模块化实现 一、Module的概念 Module是HarmonyOS应用的基本功能单元&#xff0c;包含了源代码、资源文件、第三方库及应用清单文件&#xff0c;每一个Module都可以独立进行编译和运行。一个HarmonyOS应用通常会包含一个或多个Module&#xff0c;因此&am…

第55期|GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区&#xff0c;集成了生成预训练Transformer&#xff08;GPT&#xff09;、人工智能生成内容&#xff08;AIGC&#xff09;以及大语言模型&#xff08;LLM&#xff09;等安全领域应用的知识。在这里&#xff0c;您可以找…

CIC-DDoS2019-Detection

CIC-DDoS2019 对CIC-DDoS2019数据集进行检测,本文提供了如下内容&#xff1a; 数据清洗与合并机器学习模型深度学习模型PCA,t-SNE分析数据&#xff0c;结果可视化 代码地址&#xff1a;[daetz-coder](https://github.com/daetz-coder/CIC-DDoS2019-Detection) 1、数据集加载…

【Anaconda】【Windows编程技术】【Python】Anaconda的常用命令及实操

一、Anaconda终端 在安装Anaconda后&#xff0c;电脑上会新增一个Anaconda终端&#xff0c;叫Anaconda Prompt&#xff0c;如下图&#xff1a; 我们选择“打开文件位置”&#xff0c;将快捷方式复制一份到桌面上&#xff0c;这样日后就可以从桌面上方便地访问Anaconda终端了&…

欢乐钓鱼大师游戏攻略:萌新必备攻略大全!钓鱼脚本!

《欢乐钓鱼大师》是一款休闲益智类游戏&#xff0c;以钓鱼为主题&#xff0c;玩家需要通过各种钓鱼任务和挑战&#xff0c;收集不同种类的鱼类&#xff0c;并提升自己的钓鱼技术和装备。本文将为大家详细解析游戏的各个方面&#xff0c;帮助玩家更好地掌握游戏技巧&#xff0c;…

Airbind - hackmyvm

简介 靶机名称&#xff1a;Airbind 难度&#xff1a;中等 靶场地址&#xff1a;https://hackmyvm.eu/machines/machine.php?vmAirbind 本地环境 虚拟机&#xff1a;vitual box 靶场IP&#xff08;Airbind&#xff09;&#xff1a;192.168.56.121 跳板机IP(windows 11)&…

BEV 中 multi-frame fusion 多侦融合(一)

文章目录 参数设置align_dynamic_thing:为了将动态物体的点云数据从上一帧对齐到当前帧流程旋转函数平移公式filter_points_in_ego:筛选出属于特定实例的点get_intermediate_frame_info: 函数用于获取中间帧的信息,包括点云数据、传感器校准信息、自车姿态、边界框及其对应…

半监督医学图像分割:基于对抗一致性学习和动态卷积网络的方法| 文献速递-深度学习结合医疗影像疾病诊断与病灶分割

Title 题目 Semi-Supervised Medical Image Segmentation Using Adversarial Consistency Learning and Dynamic Convolution Network 半监督医学图像分割&#xff1a;基于对抗一致性学习和动态卷积网络的方法 01 文献速递介绍 医学图像分割在计算辅助诊断和治疗研究中扮演…

移动app必须进行安全测试吗?包括哪些测试内容?

移动App已经成为我们日常生活中不可或缺的一部分&#xff0c;无论是社交娱乐还是工作学习&#xff0c;我们都离不开这些精心设计的应用程序。然而&#xff0c;随着移动App的广泛普及和使用&#xff0c;其安全性问题也逐渐浮出水面。为了确保用户数据的安全和减少潜在的风险&…