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. DJANGO-天天生鲜项目从0到1-004-用户模块-个人中心页

    本项目基于B站UP主‘神奇的老黄’的教学视频‘天天生鲜Django项目’,视频讲的非常好,推荐新手观看学习 https://www.bilibili.com/video/BV1vt41147K8?p= ...

  2. vue学习 `${HH}-${mm}-${dd}` 按键修饰符

    vue 有一种拼接字符串的规范写法 //键盘 Tab 键 上边的键 英文输入状态 然后采用类似EL表达式${变量}return `${}:${}:${}` //有时候我们经常在输入完密码之后,按回车E ...

  3. python的__get__方法看这一篇就足够了

    get类型函数 直接上代码: class TestMain: def __init__(self): print('TestMain:__init__') self.a = 1 if __name__ ...

  4. centos7 离线安装paramiko

    离线安装paramiko   1. 利用yum下载paramiko依赖的rpm软件包 安装yum-utils yum -y install yum-utils yumdownloader python ...

  5. Django学习路32_创建管理员及内容补充+前面内容复习

    创建管理员 python manage.py createsuperuser   数据库属性命名限制 1.不能是python的保留关键字 2.不允许使用连续的下划线,这是由django的查询方式决定的 ...

  6. list 和 [ ] 的功能不相同

    对于一个对象: list(对象) 可以进行强制转换 [对象] 不能够进行强制转换,只是在外围加上 [ ] 列表推导式中相同   2020-05-06

  7. Python List list()方法

    描述 list() 方法用于将元组转换为列表.高佣联盟 www.cgewang.com 注:元组与列表是非常类似的,区别在于元组的元素值不能修改,元组是放在括号中,列表是放于方括号中. 语法 list ...

  8. ios企业签名为什么会掉签?

      我们都知道ios用户无法直接安装App Store之外的应用,对于那些无法上架苹果应用商店的APP,开发者们一般会选择苹果签名的形式.   目前的苹果签名有ios企业签名.超级签名和TF上架这三种 ...

  9. python4.4模块

    import random                         #import导入,random随机数模块a=random.random()                         ...

  10. Linux系统中玩到让你停不下来的命令行游戏!

    大家好,我是良许. 在使用 Linux 系统时,命令行不仅可以让我们在工作中提高效率,它还可以在生活上给我们提供各种娱乐活动,因为你可以使用它玩许多非常有意思的游戏,这些游戏可都不需要使用专用显卡. ...