+ +

XSS

今天主要了解了XSS攻击(跨站脚本攻击)

基本知识

1、HTML

超文本标记语言,标准通用标记语言下的一个应用。

“超文本”就是指页面内可以包含图片、链接,甚至音乐、程序等非文字元素。

超文本标记语言的结构包括“头”部分(英语:Head)、和“主体”部分(英语:Body),其中“头”部提供关于网页的信息,“主体”部分提供网页的具体内容。

网页的本质就是超级文本标记语言,通过结合使用其他的Web技术(如:脚本语言、公共网关接口、组件等),可以创造出功能强大的网页。

2、javascript(js)

一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标准通用标记语言下的一个应用)网页上使用,用来给HTML网页增加动态功能。



Javascript的一些弹窗函数:

1.alert() 用于提示

2.confirm() 用于和用户交互确认

3.prompt() 弹框让用户输入信息

XSS的概念

XSS是一种出现在web应用程序中的计算机安全漏洞,是由于web对用户输入过滤不严而导致的,黑客通过“HTML注入”篡改网页,使用户在浏览时,就会执行其中的恶意脚本,从而获得用户的cookie信息


XSS分成两类:反射型XSS,存储型XSS

反射型XSS


反射型跨站脚本也称作非持久型、参数型跨站脚本,这类型的脚本最常见,也是使用最为广泛的一种,主要用于将恶意的脚本附加到URL地址的参数中。

一般使用的已经构造好的恶意URL发送给受害者,诱使受害者点击触发,只执行一次非持久化。

反射型XSS过程

存储型XSS


存储型XSS比反射型跨站脚本根据威胁,并且可能影响到web服务器的自身安全。

此类XSS不需要用户点击特定的URL就能执行跨站脚本,攻击者事先将恶意JavaScript代码上传或存储到漏洞服务器中(例如在网页上输入一些评论(包含恶意代码),就会传送给数据库,只要用户浏览网页,我们就能获得相应信息),只要受害者浏览包含此恶意的代码页面就会执行恶意代码。

存储型XSS过程

XSS限制绕过

在测试的时候,我们可能会遇到我们输入的恶意代码某些字符被过滤掉,不能起到该起的作用,这时候我们就需要绕过这些限制了,主要有四种方法:

一、二:如果是alert()之类的括号里的某些单引号被转义了之类的,例如,magic_quotes_gpc=ON 是php中的安全设置,开启后会把一些特殊字符进行轮换,如单引号会被转义为',此时我们可以将我们需要输的字符转化为ASCII码或者16进制形式,这时候,我们就能输出我们想要弹出的字符。

转化为ASCII码的方式为:利用String.fromCharCode()函数将括号里的ASCII码值转化为我们想输的字符,注意,这里只是将ASCII码转化为我们需要的字符,并没有执行任何操作,在真正进行的时候,仍需JS的一些函数。

转化为16进制:就是将我们要输入的字符转化为16进制,用法与转化为ASCII码值是一样的。

三、改变大小写

四、关闭标签

在网页代码中输入框架中可能原本就有闭合符号,这时候我们利用闭合函数的形式来绕过闭合符号

关闭标签

中高低等级下dvwa平台XSS题目检测是否有XSS漏洞

反射型XSS:

low:输入,其中前面的为头标签,带斜杠的表示尾标签,得到结果:



说明有XSS漏洞

medium:页面源码如下:



我们可以看出,它把标签给替换成空了,这时候我们有两种方法绕过,第一种,标签大小写交替,第二种,换个标签



high:源码:



此时只能用替换标签的方法,图中的匹配替换,表示只要遇到script,无关大小写,都会被过滤



存储型:
low:分别输入script标签,中间加各个js弹出框函数,发现我们建立第二个的时候,第一个框依旧会弹出,是因为存储型XSS将脚本文件发送到了数据库,每次用户访问该网页,改脚本均会执行
![](https://i.imgur.com/EgkErH1.png)
medium:源码:
![](https://i.imgur.com/7pK0MAi.png)
我们可以看到此时的message用了htmlspecialchars函数,输入的恶意代码转换成HTML实体,即我们无法通过在message框中输入js代码,那我们只能在name取输入代码,而name区允许输入长度较小,此时我们通过burpsuit抓包,
![](https://i.imgur.com/2TOimwp.png)
在图中位置输入我们想输入的代码,然后点击forward,即可以看到网页上弹出了一个框
high:源码:
![](https://i.imgur.com/e5UzKuI.png)
图中两处地方可以看出,我们不能在message区输入js代码,也不能用script标签,步骤与上题一样,只不过在改name的时候采用其他标签即可。 ## XSS盗取cookie登陆 ## 1、在本地编写一个接受cookie的PHP脚本:
$cookie=$_GET[‘cookie’];
file_put_contents(‘cookie.txt’,$cookie);
?>
2、构造攻击盗取cookie脚本
![](https://i.imgur.com/4EScSAn.png)
具体步骤:
1、本地建立PHP文件
![](https://i.imgur.com/XCOr9Yn.png)
在dvwa上输入恶意代码
![](https://i.imgur.com/UHrDcAg.png)
页面会跳转到下图
![](https://i.imgur.com/fAzkCI4.png)
本地会生成一个cookies文本文件
![](https://i.imgur.com/7ouDYNy.png)
其中PHPSESSID即我们所需要的身份令牌,也就是cookies
![](https://i.imgur.com/5cSgSyQ.png)
换个浏览器重新打开登陆页面,右键检查,改一下信息,其中cookies为我们本地文件所获得的
![](https://i.imgur.com/uSY214P.png)
然后输入网址http://127.0.0.1/dvwa/index.php,就能登陆了
![](https://i.imgur.com/1GQmx8F.png)