包含一些基础的XSS学习。
XSS跨站脚本分类
XSS漏洞介绍
跨站脚本攻击(Cross Site Scripting),为了不和层叠样式表(Cascading Style Sheets,CSS)的缩写混淆。故将其缩写为XSS。恶意攻击者往Web页面插入恶意Script代码,当用户浏览该页时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击者的目的
反射型XSS
非持久型XSS,这种攻击往往具有一次性。攻击者通过邮件等形式将包含XSS代码的连接发送给正常用户,当用户点击时,服务器接收该用户的请求并进行处理,然后把带有XSS的代码发送给用户。用户浏览器解析执行代码,触发XSS漏洞。
使用dvwa演示,演示时需注意设置dvwa安全性,否则可能无法成功
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
提交一个test_name,提交内容返回到页面
构造代码,输入并提交,触发代码,弹出对话框(包含对应Cookie值)
存储型XSS
持久性XSS,攻击脚本存储在目标服务器的数据库中,具有更强的隐蔽性(论坛、博客、留言板等,发帖过程中被嵌入XSS代码,帖子被目标服务器存储在数据库中,当用户进行正常访问时,触发XSS代码)
例如:dvwa中的Stored XSS
弹出弹窗以后,代码内容被保存,以后每次访问,都会触发代码
DOM型XSS
Document Object Model 使用DOM动态访问更新文档的内容、结构及样式。HTML标签都是节点,通过DOM可以对所有的节点进行修改。服务器响应不会处理攻击者脚本,而是用户浏览器处理这个响应时,DOM对象就会处理XSS代码,触发XSS漏洞。
例如:dvwa DOM XSS
点击select以后,在URL处直接修改为test,此时,修改的内容test直接反弹到了网页的选项中
XSS盗取Cookie
反射XSS盗取Cookie
存在反射型XSS漏洞的站点位置,利用以下链接盗取Cookie
url?uname=#
在本地文件夹下编写一个cookie.php
注意路径
提交以后,页面重定向
查看cookie.txt内容,cookie值被写入文件
利用cookie会话劫持
打开cookie.txt文件,找到cookie值,访问目标站点,修改cookie为cookie.txt中的内容,即可成功访问。
劫持会话后的操作
1.进入后台寻找上传点(一句话webshell)
2.修改配置
XSS篡改网页链接
XSS篡改链接
window.onload 当窗口加载时,执行匿名函数。
例如,将所有a标签的链接替换为自定义的链接:
将篡改代码注入到对应XSS位置,以dvwa 反射XSS为例,审查元素,此时链接为官方链接
将上述代码复制并提交,所有a标签链接发生改变
篡改链接指向流量URL
刷流量,某些站点的重定向。
例如:link[j].href = “http://qq.com”,点击以后跳转到腾讯网
篡改链接指向恶意URL
Beef进行恶意链接生成,利用hook.js执行其他命令
在kali中使用 beef-xss 生成恶意链接
使用 service apache2 start 开启服务器,使用leafpad打开/var/www/html下的index.html,将恶意链接添加进去
使用主机访问
返回kali查看beef,出现了一台新的机器,包含对应信息以及一些可执行的命令(绿色可用,红色不可用)
XSS盗取用户信息
盗取用户信息原理
克隆网站登录页面,利用存储XSS设置跳转代码,如果用户访问即跳转到克隆网站的登录页面,用户输入登录账号、密码被存储
setoolkit工具克隆网站
在kali下使用setoolkit,根据提示依次 set 1-2-3-2
复制目标网站的URL
在setoolkit中配置克隆网站的ip地址和被克隆网站的url
通过URL访问克隆网站,克隆成功
存储XSS跳转克隆网站
xss payload:
例如:在dvwa 存储型XSS中,将上述代码写入(长度受限制可通过审查元素修改)
提价以后页面跳转到克隆网站
查看盗取账号密码
当用户在克隆网站登录时,用户名和密码被发送给攻击者
没有过滤的XSS
实验环境:http://xss-quiz.int21h.jp/(一个日本安全研究员制作的练习靶场)
探测XSS过程
1.构造一个独一无二且不会被识别为恶意代码的字符串用来提交页面
例如:123thisisatestcode
2.进行代码审查,寻找构造的字符串是否在页面中显示
闭合文本标签利用XSS
1.简单payload:
提交以后,弹窗,可以进入下一关
2.闭合标签payload:(b标签表示加粗文本)
"
b标签被闭合,同样可以进入下一关,在payload前加自定义内容,效果一样
标签属性中的XSS
配置Chrome关闭XSS-Auditor
在实验过程中,如果无法正常提交,使用 --args --disable-xss-author 进行配置。右键属性,将上述命令填在目标位置后面
属性中的XSS闭合引入script
Ctrl+F,发现提交的参数以属性输出
闭合并引入script脚本
">
属性中的XSS闭合引入事件
例如鼠标移动:
" οnmοuseοver=alert(document.domain)>
当鼠标移动到search文本框区域时,弹窗弹出
选择列表中的XSS
select标签:创建单选或多选菜单
option标签:可用选项
表单:搜集用户输入
burpsuite测试XSS
使用burpsuite修改提交参数
点击Forward发送包,显示内容为修改后的内容
闭合触发XSS
修改参数进行闭合 ![](https://imgconvert.csdnimg.cn/aHR0cHM6Ly91cGxvYWQtaW1hZ2VzLmppYW5zaHUuaW8vdXBsb2FkX2ltYWdlcy8yMTAzNTQ4My01ZDM3NzhhMjM0N2JiMDJjLnBuZw?x-oss-process=image/format,png)右键复制响应链接
在浏览器中访问,弹窗弹出,确定以后可进入下一关
选择参数中的XSS
HTML表单隐藏参数
隐藏域是用来搜集或发送信息的不可见元素
代码格式:
burpsuite抓包测试
审查元素,查找隐藏参数
HTML中svg
SVG(可缩放矢量图形)使用XML格式定义图像。SVG文件可以通过以下标签嵌入HTML文档:、、。也可以使用
<svg/事件="">
闭合触发XSS
"><svg/οnlοad=alert(document.domain)>%0a(%0a替换空格)
例如:在前两个参数中,XSS被过滤,在第三个参数进行闭合
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ko4N0ygn-1596515414469)(https://upload-images.jianshu.io/upload_images/21035483-e73c15dbfdbfb829.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]
点击Forward,弹窗弹出,可进入下一关
限制长度的XSS
1.text:定义常规文本输入
属性:
value:输入字段初始值
readonly:输入字段只读
disable:输入字段禁用,不可点击,不会被提交
size:输入字段尺寸(以字符计)
maxlength:输入字段最大长度
2.XSS Payload长度计算
快速计算:使用python内置函数 len()
3.修改源码
浏览器审查工具修改
4.Payload触发XSS漏洞
HTML事件中的XSS
通关使用客户端的javascript,可以将某些特定的事件处理器作为属性添加给特定的标签,并可以在事件发生时执行一个或多个JavaScript命令或函数。例如当鼠标单击时运行脚本等等。
1.XSS漏洞发现
设置独一无二的优良字符串,在响应中寻找
2.闭合思路
1、通过HTML事件来触发XSS,例如:
" οnmοuseοver="alert(document.domain)
2、闭合 input 标签,例如:
">
空格分隔属性的XSS
提交 test">,无弹窗
进行测试,提交 test"123,123在 value 后面
提交 test",效果类似
提交 test 123,123成了新标签
(test 123=123)
构造XSS代码进行测试:
test οnmοuseοver=alert(document.domain)
JavaScript伪协议的XSS
将JavaScript代码添加到客户端的方法是把它放置在伪协议说明符 javascript: 后的URL中。该协议类型声明了URL的主体可以是任意JavaScript代码,由JavaScript的解释权运行。
例如:
javascript:var now = new Database();“
The time is:
” + nowJavaScript URL还可以含有执行动作,但不返回值的语句。
例如:
javascript:alert(“hello world!”)
提交test寻找XSS漏洞
输入内容为URL,利用JavaScript伪协议构造XSS代码
javascript:alert(document.domain)
点击链接即可弹出弹窗
过滤的XSS
绕过过滤domain为空的XSS
输入test">,发现 domain 被替换为空
双写绕过
payload:test">
成功绕过
编码绕过
eval:执行字符串
atob:将加密的base64字符串(在线网站即可加密)转换为对应字符串
payload:test">
成功绕过
绕过替换 script 和 on 的XSS
输入test">,script被替换为xscript
输入test" οnmοuseοver="alert(document.domain),onmouseover被替换为onxxx
伪协议空格绕过
输入test">xss
javascript被替换为javaxscript
payload:test">xss
(注:此空格为Unicode编码转换后的空格,即编码	也可进行XSS注入)
利用IE特性绕过XSS过滤
在stage12中,尝试HTML事件触发XSS,输入
test" οnclick=“alert(document.domain)
双引号和空格被过滤去掉
尝试闭合input,利用外部标签触发XSS,输入
test”>
双引号和尖括号被过滤去掉
IE特性
IE中,两个反引号可以闭合一个左边双引号 payload:
οnmοusemοve=alert(document.domain)
利用CSS特性绕过XSS过滤
background:url(“javascript:alert(document.domain);”); 设置背景颜色
目前IE支持(win10新版本不支持),其他浏览器不支持
payload:background-color:#f00;background:url(“javascript:alert(document.domain);”);
IE中利用CSS触发XSS
expression(css表达式) 可以在CSS中定义表达式来达到建立元素属性之间的联系等作用(IE5开始支持,IE8取消支持)
CSS中的注释//绕过对expression的过滤。例如:ex//pression
payload:xss:expre/**/ssion(if(!window.x){alert(document.domain);window.x=1;})
16进制绕过过滤触发XSS
可使用python(使用python2尽量)进行将字符串进行转换
输入">,双引号与尖括号被转义
双斜杠+16进制绕过
测试:\x3c \x3e
payload:\x3cscript\x3ealert(document.domain);\x3c/script\x3e
unicode绕过过滤XSS
可使用python(使用python2尽量)进行将字符串进行转换
输入:\x3cscript\x3ealert(document.domain);\x3c/script\x3e,并未输出尖括号
双斜杠+Unicode绕过
payload:\u003cscript\u003ealert(document.domain);\u003c/script\u003e