跨站脚本攻击漏洞

漏洞讲解

漏洞运用过程:

攻击者会通过xss漏洞在网站注入恶意代码,使得用户在访问网页时,恶意代码执行,从而达到攻击的目的

漏洞原理:

程序对输入和输出的控制不够严格,导致恶意代码输入后,在前端浏览时被当作有效代码进行解析,从而产生各种危害。

漏洞危害:

1)网站中弹窗,影响用户体验和利益

2)网络钓鱼,盗取用户账号信息

3)劫持用户通话

4)盗取用户cookies,获取用户隐私信息

5)蠕虫病毒的传播

xss漏洞分类

1)反射型XSS

反射型xss又称非持久型xss,是发生在客户端上,并且要访问了构造好的恶意链接。

反射型xss是利用应用程对用户的输入和输出的不恰当处理,使得攻击者可以通过构造构造链接,将脚本注入到响应中。若有人访问该链接,在他那里的浏览器就会执行该脚本,从而导致攻击者盗取到用户敏感信息等。

常见注入点:网站搜索框、用户登录入口等

攻击流程:

1.攻击者找到有漏洞的网站,攻击者发送恶意链接给用户,并引诱用户点击

2.用户访问恶意链接

3.服务器会在响应时引入该恶意脚本

4.用户在浏览器打开响应时,恶意脚本执行,攻击者成功实现攻击

案例:(pikachu靶场)

get:

如图,我输入a后,message=后面跟着我们输入的

那么我们直接输入,成功

post:

其实也大差不差

post型,我们就打开bp嘛

在bp里面将它都改成进行测试

也确实是这样

2)存储型XSS

存储型与反射型不同,它是将恶意脚本永久地嵌入到网页界面中,当有用户访问时候便会执行,从而收到攻击,反射型攻击是客户端,它是服务器端,又称持久型xss。

常见注入点:论坛留言处、个人信息查看处、博客等

攻击流程:

1.攻击者在一个可以注入的地方,并留下恶意代码,也永久存储在服务器中

2.用户访问网站,打开留下恶意代码的帖子之类的

3.网站从其数据库获取其帖子内容,在用户的浏览器上解析出来

4.恶意脚本在浏览器上执行,攻击成功

案例:(pikachu靶场)

存储型XSS

输入

刷新一下界面后重新进入

3)DOS型XSS

DOM是一种表示HTML文档结构的对象模型,它运行程序和脚本动态地更新文档内容、结构、样式,并且处理后的结果能够被页面重新解析出来,又DOM型XSS至于后端服务器进行交互,所以DOM型XSS又是一种特殊的反射型XSS

常见注入点:可以通过JavaScript脚本对DOM文档对象进行修改的地方

攻击流程:

1.攻击者首先要找到一个可以通过用户输入或JavaScript脚本生成DOM结果的地方

2.对这个页面采取构造恶意URL等方式,将恶意代码注入到页面上

3.用户点击URL,进入界面,页面收到请求,返回HTML,此时是正常的

4.客户端在执行HTML内的恶意脚本后,注入到页面中

5.恶意脚本在浏览器上执行,修改了页面的DOM树结构,通过DOM元素和属性等来达到目的,通过攻击成功

案例:(pikachu靶场)

DOM型XSS

看到其实有提示

看到Javascript里面写的意思:

首先给变量str赋值上id=text的值(也就是输入框的值)

id=dom里面的内容是由<a href>和str拼接而成

document.getElementById("dom").innerHTML ="<a href='"+str+"'>what do you see?";来看这个结构

可以看到"<a href='" 和 str 和 "'>what do you see?" 三部分拼接、

那我们应该先闭合那个单引号

后面发现是标签<a href>

可以应用onclick

再加上onclick="alert('a')"

在闭合标签加上>

所以整体是'οnclick="alert('a')">(当然答案不唯一,还有其他的)

DOM型XSS-X

也是一样

' onclick="alert('a')">

此时这个链接重新打开,也是可以触发xss的

其他案例:

xss之盲打

盲打只是你输入的不是在你这个页面显示

我们两个输入框都输入

在后台我们就可以看到

xss之过滤

我们尝试几种,<script>等等

后面发现只要与<script>这样相近的就会被会被过滤

那没事,反正还是有其他标签可以触发的

试试之前的<a>

<a href='' onclick=alert('a')>

可以成功

xss之htmlspecialchars

htmlspecialchars() 函数把一些预定义的字符转换为 HTML 实体。语法为:htmlspecialchars(string,quotestyle,character-set).

预定义的字符是:

&(和号) 成为&

" (双引号) 成为 "

' (单引号) 成为 '

< (小于) 成为 <

> (大于) 成为 >

(参考于百度百科https://baike.baidu.com/item/htmlspecialchars/9713223)

简单来说,就是对特殊字符进行处理

输入<script>alert(1)

发现输入的在<a>标签内,跟前面的差不多

在输入框内输入' onclick='alert(123)'

xss之href输出

一开始,没思路,看了一下网上的,他们都看了看源码,我也去看了

从中我们获得了两个提示

一个是用了htmlspecialchars,不能采取闭合了

另一个是使用javascript协议

具体参考(https://blog.51cto.com/u_16175448/7480754)

因此输入JavaScript:alert('a')

成功

xss之js输出

<script>
    $ms='';
    if($ms.length != 0){
        if($ms == 'tmac'){
            $('#fromjs').text('tmac确实厉害,看那小眼神..')
        }else {
//            alert($ms);
            $('#fromjs').text('无论如何不要放弃心中所爱..')
        }

    }
</script>

这是网页源代码一部分

可以看到输入的,在

XSS常用标签

1)<script>

如:<script>alert('a')</script>

2)<a>

如:<a href=javascript:alert('a')>

3)<input>

有多种,主要是可以不同形式触发

如:

<input type="type" onclick="alert('a')">,鼠标光标点击时触发

<input type="type" onkeypress="alert('a')">,按下按键式时触发

<input type="type" onkeyup="alert('a')">,松开按键式时触发

4)<style>

如:<style οnlοad=alert('a')>,页面加载好时触发

XSS的检测手段

检测手段分为两种,有手动,有自动

自动的话,我们在搜索xss,也可以看到很多xss平台,除此之外还有其他工具(其他工具我是看网上的):APPSCAN、AWVS、Burp Suite

手工呢,我感觉先找可疑的地方,再去尝试一些特殊一点的字符如<、>、"、'等等啊

可能还有一些没学习到位的,到时继续补充(抓头)