WEB漏洞-XSS跨站之原理分类

XSS跨站漏洞

原理

一个可控的输出变量,代码对数据进行显示或者调试出现的安全问题。产生于前端代码和js代码中,XSS全称跨站脚本(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故缩写为XSS。跨站点脚本(XSS)攻击是一种注射型攻击,攻击者在可信的网页中嵌入恶意代码,用户访问可信网页时触发XSS而被攻击。
XSS是一种发生在前端浏览器端的漏洞,所以其危害的对象也是前端用户。

函数类

xss漏洞通常是通过php的输出函数将javascript代码输出到html页面中,通过用户本地浏览器执行的,所以xss漏洞关键就是寻找参数未过滤的输出函数。
常见的输出函数有:echo printf print print_r sprintf die var-dump var_export

危害影响

攻击者通过Web应用程序发送恶意代码,一般以浏览器脚本的形式发送给不同的终端用户。当一个Web程序的用户输入点没有进行校验和编码,将很容易的导致XSS。
• 网络钓鱼,包括获取各类用户账号;
• 窃取用户cookie资料,从而获取用户隐私信息,或利用用户身份进一步对网站执行操作;
• 劫持用户(浏览器)会话,从而执行任意操作,例如非法转账、强制发表日志、电子邮件等;
• 强制弹出广告页面、刷流量等;
• 网页挂马;
• 进行恶意操作,如任意篡改页面信息、删除文章等;
• 进行大量的客户端攻击,如ddos等;
• 获取客户端信息,如用户的浏览历史、真实ip、开放端口等;
• 控制受害者机器向其他网站发起攻击;
• 结合其他漏洞,如csrf,实施进一步危害;
• 提升用户权限,包括进一步渗透网站;
• 传播跨站脚本蠕虫等

特点

注入恶意的代码到用户浏览器的网页上,从而达到劫持用户会话的目的。

xss分类

反射性XSS
存储型XSS
DOM型XSS

反射性XSS

又称非持久型XSS,这种攻击方式往往具有一次性,只在用户单击时触发。
常见注入点
网站的搜索栏、用户登录入口、输入表单等地方,常用来窃取客户端cookies、钓鱼欺骗、
邮件等形式包含xss代码,用户点击时,服务器处理,触发XSS
攻击方式
攻击者通过电子邮件等方式将包含XSS代码的恶意链接发送给目标用户。当目标用户访问该链接时,服务器接受该目标用户的请求并进行处理,然后服务器把带有XSS的代码发送给目标用户的浏览器。
浏览器解析这段带有XSS代码的恶意脚本后,就会触发XSS漏洞。

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

相对的在白盒审计中, 我们首先要寻找带参数的输出函数,接下来通过输出内容回溯到输入参数,观察是否过滤即可。
案例:
新建 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> 

当我们输入 1 ,页面返回 1 :
在这里插入图片描述

以上都为正常的输出,但如果我们输出一些javascript代码呢?
比如我们输入
出现弹窗
在这里插入图片描述
在这里如果想要

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

这个代码弹窗的话是要将配置里的魔术引号关闭才可以,不然会被自动转义
在这里插入图片描述

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

存储型XSS

又称持久型XSS,比反射型XSS更具有威胁性,并且可能影响到Web服务器自身的安全。和反射性XSS的即时响应相比,存储型XSS则需要先把利用代码保存在比如数据库或文件中,当web程序读取利用代码时再输出在页面上执行利用代码。但存储型XSS不用考虑绕过浏览器的过滤问题,屏蔽性也要好很多。
常见注入点
论坛、博客、留言板、网站的留言、评论、日志等交互处。
攻击方式
攻击者在发帖或留言的过程中,将恶意脚本连同正常信息一起注入到发布内容中。随着发	布内容被服务器存储下来,恶意脚本也将永久的存放到服务器的后端存储器中。当其他用户	浏览这个被注入了 
 恶意脚本的帖子时,恶意脚本就会在用户的浏览器中得到执行。

实例:
文件名test.php 代码如下:

    <span style="font-size:18px;"><meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>  
    <html>  
    <head>  
    <title>XssStorage</title>  
    </head>  
    <body>  
    <h2>Message Board<h2>  
    <br>
    <form action="test.php" method="post">  
    Message:<textarea id='Mid' name="desc"></textarea>  
    <br>  
    <br>  
    Subuser:<input type="text" name="user"/><br> 
    <br>
    <input type="submit" value="submit" onclick='loction="test.php"'/>  
    </form>  
    <?php  
    if(isset($_POST['user'])&&isset($_POST['desc'])){  
    $log=fopen("sql.txt","a");  
    fwrite($log,$_POST['user']."\r\n");  
    fwrite($log,$_POST['desc']."\r\n");  
    fclose($log);  
    }  
      
    if(file_exists("sql.txt"))  
    {  
    $read= fopen("sql.txt",'r');  
    while(!feof($read))  
    {  
        echo fgets($read)."</br>";  
    }  
    fclose($read);  
    }  
    ?>  
    </body>  
    </html></span>  

页面功能简述:

这个页面采用POST提交数据,生成、读取文本模拟数据库,提交数据之后页面会将数据写入sql.txt,再打开页面时会读取sql.txt中内容并显示在网页上,实现了存储型xss攻击模拟。

随意输入东西,然后提交
在这里插入图片描述
可以看到页面正常显示页面留言信息。

当我们在Message中输入时,页面成功弹窗 :
在这里插入图片描述
并且我们重启浏览器之后再加载该页面,页面依然会弹窗,这是因为恶意代码已经写入数据库中,每当有人访问该页面时,恶意代码就会被加载执行!这就是所谓的存储型XSS漏洞,一次提交之后,每当有用户访问这个页面都会受到XSS攻击,危害巨大。

DOM型XSS

DOM(Document object model),使用DOM能够使程序和脚本能够动态访问和更新文档的内容、结构和样式。
DOM型XSS其实是一种特殊类型的反射型XSS,它是基于DOM文档对象的一种漏洞。DOM型XSS是基于js上的。不需要与服务器进行交互。

在这里插入图片描述

三者区别

反射型
发包 x=1 => x.php => 回显示

储存型
发包 x=1 => x.php => 数据库或者文件 => x.php =>回显

DOM型
发包 x=1 => 本地浏览器静态前端代码 => x.php
无表单数据提交操作

js

Js是浏览器执行的前端语言,用户在存在xss漏洞的站点,在输入数据的部分中插入js语言,服务器接收到此数据,认为是js代码,从而返回的时候执行。因此,攻击者可利用这个漏洞对站点插入任意js代码进行窃取用户的信息。

PHP与js的区别

在前端和后端的基础上这两种语言是不同的。JavaScript脚本语言是一种前端语言(除Node.js之外),而PHP是一种服务器端语言。

案例:
靶场地址
进入留言面板http://你的域名/index.php
在这里插入图片描述
进入后台
后台地址:http://你的域名/index.php?c=adminlogin
管理员默认帐号admin 密码 admin888
在这里插入图片描述

xss平台使用

网站上的xss平台1
网站上的xss平台2
安全起见的个人xss平台构建

cookie session

用户凭据:通过凭据可以判断对方身份信息
cookie 存储本地 存活时间较长 小中型网站
获取管理员cookie登录后台
session 会话 存储服务器 存活时间较短 大型网站

xss防御

使用XSS Filter
 输入过滤:
	输入验证对用户提交的数据进行有效验证,仅接受指定长度范围内的,采用	适当格式的内容提交,阻止或者忽略除此以外的其他任何数据。
 常见的检测或过滤:
	输入是否仅包含合法的字符
	输入字符串是否超过最大长度的限制
	输入如果为数字,数字是否在指定的范围内
	输入是否符合特定的格式要求,如邮箱、电话号码、ip地址等
 数据消毒:
  除了在客户端验证数据的合法性,输入过滤中最重要的还是过滤和净化有害的输入,例如如下常见的敏感字符:
  || < > ' " & # javascript expression
  输出编码:
  对输出的数据进行编码,如HTML编码,就是让可能造成危害的信息变成无害。
  白名单和黑名单
  定制过滤策略
  web安全编码规范
  防御DOM-Based XSS
 两点注意点:
    避免客户端文档重写、重定向或其他敏感操作,同时避免使用客户端数据,这些操作尽量在服务端使用动态页面来实现。
    分析和强化客户端Javascript代码,尤其是一些受到影响的Dom对象
 其他防御方式
	Anti_XSS
	微软开发的,.Net平台下的,用于方式XSS攻击的类库,它提供了大量的编码函数来对用户输入的数据进行编码,可以实现基于白名单的输入的过滤和输出编码。
	HttpOnly Cookie
	当Cookie在消息头中被设置为HttpOnly时,这样支持Cookie的浏览器将阻止客户端Javascript直接访问浏览器中的cookies,从而达到保护敏感数据的作用。
	Noscript
	Noscript是一款免费的开源插件,该插件默认禁止所有脚本,但可以自定义设置允许通过的脚本。
	WAF
	使用WAF,比如软WAF,硬WAF、云WAF等。

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值