XSS的构造技巧

By:Mirror王宇阳 E-mail:2821319009@qq.com

本文为长期持续维护,一旦遇到新的技术技巧将及时更新本文内容

非常的欢迎技术大佬纠正并补充,也欢迎技术同僚讨论学习

利用字符编码

利用字符编码构造成一个xss,在道哥的书中是这样描述的:

百度搜索存在一个script标签输出一个变量,但是转义了双引号

var ** = "  \";alert(/xss/);"

正常情况下,双引号被转义了,后面的(引号外)内容是会被赋给**并得不到有效输出的~(一旦赋值那么这就知识一个普通的字符串,而不会构成xss)

但是百度使用了GBK的编码方式返回页面,在返回中“%c1/”会组合成为一个Unicode字符,在浏览器中会被认为是一个合法的字符,意义:表示这个转义的斜杠就失去了作用,同理双引号也就不会被转义

# 构造
%c1";alert(/xss/);//
# 页面返回效果
var ** = "%c1/";alert(/xss/);//"
//这时的**的值时特殊的字符 alert(/xss/);被当做一条可执行的语句存在script标签中构成了xss

绕过长度限制

存在xss漏洞的攻击点,服务端对该处有逻辑上的长度限制;在有限的长度限定内无法完成自己需要的xss语句构造!

举例:<input type=text value="$var" > 该处的$var可以实现xss><script>alert(/xss/)</script>等一定字符限制内容的xss构造……

如果服务端对$var变量的长度设置了字符长度限制……攻击者可以利用事件Event来缩短自己xss的字符长度例如:" onclick=alert(/xss/) 这时候也会鼠标触发事件导致xss的执行……

但是如果长度的限制导致我们也无法使用事件来构造xss;道哥给出的解决办法是:将xss Payload写到其他地方,在构造简短的代码加载Payload xss

使用location.hash

location.hash是一个很好的藏代码的地方,他下载地址栏#符号后面,长度理论上没有限制而且HTTP协议中是不会计算该内容的……

# URL构造
http://www.xxx.com/index.html#alert(/xss执行/)
# 构造xss $var变量的值
" onclick="eval(location.hash.substr(1))"

当触发鼠标时间后,就会执行eval函数(执行js代码),调用location.hash的内容且从第一个字符开始(因为第0个字符是符号#)

特定环境注释绕过长度限制

当我们的xss测试环境下,有两个以及两个以上的可输入的文本框,则可以利用HTML的注释符特性,将两个文本框之间的HTML代码内容全部注释,最终将多个文本框之间连通在一起可以实现多字节长度的xss Payload的构造和使用……

<base>标签

<base>标签是一种用于定义HTML文档中定义的“相对路径”链接属性源地址的标签;通俗的说:

<img src="/imgage/2001/9/img_222993.png">

这是一个图片标签,使用的是相对地址,默认情况是从当前的位置寻找imgage文件夹一路追溯找到png图片,但是本地并没有这个png图片,这个图片是从一个图穿网站上找来的,但是没有使用绝对路径导致图片无法加载,而正有几百个img标签存在与这同样的问题;为了方便可以使用<base>标签,定义:

<base href="http://www.xxx.con/">

在这个标签之后的所有地址链接都会从这个网站开始构造成一个绝对路径进行追溯文件并加载……

攻击者可以在适当的地方加入<base>标签,导致该标签后的所有链接地址重新定义追溯地址的起点位置,攻击者可以利用这个伪造图片、链接等等……这是一种链接地址劫持

巧妙运用window.name

window.name是对当前窗口的对象操作,而非document……利用window.name可以实现不一样的神奇的操作…

index_1.html:

<script>
window.name = "text";
alert(document.domain + "~" + window.name);
window.location = "index_2.html";
</script>

index_2.html:

<script>
alert(document.domain + "~" + window.name)
</script>

最后的测试结果显示:两个HTML页面的window.name的内容为一致!由此可得出:window.name是可以跨站、跨页面实现一定的操作内容的

同理:window.name的内容值实现了跨页面后,就可以在另外一个由该页面跳转的HTML页面中发现xss漏洞后利用window.name;若window.name是一个xss Payload语句,在页面xss利用处直接写入eval(window.name)岂不是美哉!

XSS的构造技巧的更多相关文章

  1. 跨站的艺术-XSS Fuzzing 的技巧

    作者 | 张祖优(Fooying)  腾讯云 云鼎实验室 对于XSS的漏洞挖掘过程,其实就是一个使用Payload不断测试和调整再测试的过程,这个过程我们把它叫做Fuzzing:同样是Fuzzing, ...

  2. XSS构造技巧

    利用字符编码: 百度曾经出过一个XSS漏洞,在一个<script>标签中输出一个变量,其中转义了双引号: var redirectUrl="\";alert(/XSS/ ...

  3. WAF指纹识别和XSS过滤器绕过技巧

    [译文] -- “Modern Web Application Firewalls Fingerprinting and Bypassing XSS Filters” 0x1 前言 之前在乌云drop ...

  4. 学习xss模拟构造攻击(第一篇)

    本文作者:i春秋签约作家——rosectow 0×00前言 XSS又名叫CSS全程(cross site scriptting),中文名跨站脚本攻击,目前网站的常见漏洞之一,它的危害没有像上传漏洞,s ...

  5. Web安全攻防(简)学习笔记

    Web安全攻防-学习笔记 本文属于一种总结性的学习笔记,内容许多都早先发布独立的文章,可以通过分类标签进行查看 信息收集 信息收集是渗透测试全过程的第一步,针对渗透目标进行最大程度的信息收集,遵随&q ...

  6. XSS常用技巧

    一般发现一个xss漏洞后要做的基本上就是这些: 1. 伪造请求 使用$_REQUEST或$_GET 首先我们要找找该网站使用的程序是不是在网上能找到源码,如果能找到源码的话,就去分析后台管理员更改密码 ...

  7. xss构造--如何使用xss语句

    XSS的构造 1.利用[<>]构造html/js 如[<script>alert(/xss/)</script>] 2.伪协议 使用javascript:伪协议来构 ...

  8. xss脚本攻击

    xss脚本攻击不仅仅只是alert(1)就算完了,xss脚本攻击真正的用处是盗取普通用户的cookie,或者盗取管理员的cookie. xss分类(类型): 1. 反射型xss2. 存储型xss3. ...

  9. 谨慎能捕千秋蝉(一)——XSS

    最近在研读<白帽子讲web安全>和<Web前端黑客技术揭秘>,为了加深印象,闲暇之时做了一些总结. 下面是书中出现的一些专有词汇: POC(Proof Of Concept): ...

随机推荐

  1. Python之数据结构:列表、元组、字典、set

    列表 列表里可以存储任意的数据类型.可修改的结构,用[ ]括起来表示或用函数list()构建. eg: y = [1,1.5,'hello',True] 列表还可以嵌套列表 eg: y = [1,1. ...

  2. BuuCTF Web Writeup

    WarmUp index.php <html lang="en"> <head> <meta charset="UTF-8"> ...

  3. webpack 4.x版本手动配置

    运行 npm init -y 快速初始化项目 在项目根目录创建src源代码目录和dist产品目录 在src目录下创建 index.html mani.js文件如果后期使用entry打包,这里可以手动创 ...

  4. SpringCloud系列使用Eureka进行服务治理

    1. 什么是微服务? "微服务"一词来自国外的一篇博文,网站:https://martinfowler.com/articles/microservices.html 如果您不能看 ...

  5. 第四章 常用API(上)

    4.1.Object类 描述:该类是所有类的最终根类 方法 描述 public boolean equals(Object obj) 表示某个其它对象是否"等于"此对象 publi ...

  6. 微服务迁移记(五):WEB层搭建(4)-简单的权限管理

    一.redis搭建 二.WEB层主要依赖包 三.FeignClient通用接口 以上三项,参考<微服务迁移记(五):WEB层搭建(1)> 四.SpringSecurity集成 参考:< ...

  7. PHP mysqli_thread_id() 函数

    返回当前连接的线程 ID,然后杀死连接: <?php 高佣联盟 www.cgewang.com // 假定数据库用户名:root,密码:123456,数据库:RUNOOB $con=mysqli ...

  8. Java注解与反射

    概要 本文主要是总结Java注解与反射的相关知识,加深自己对Java类动态语言的理解,同时为日后学习Spring打下基础. 注解: 什么是注解 Annotation的作用 不是程序本身,但是可以对程序 ...

  9. luogu P4726 【模板】多项式指数函数 多项式 exp 牛顿迭代 泰勒展开

    LINK:多项式 exp 做多项式的题 简直在嗑药. 前置只是 泰勒展开 这个东西用于 对于一个函数f(x) 我们不好得到 其在x处的取值. 所以另外设一个函数g(x) 来在x点处无限逼近f(x). ...

  10. mongoDB数据库原生配置

    最近小冷在工作中使用到了mongoDB数据库,所以就简单的写了个demo,和大家简单分享下,如果大家也有想分享的东西或者需要分享的东西,生活或者其他都行,可以关注小冷公众号秦川以北或者加小冷微信qxy ...