XSS(跨站脚本攻击)总结(二)

本文详细介绍了XSS跨站脚本攻击的常见类型、危害、利用方式及绕过方法,并通过实例展示了如何使用htmlentities()和htmlspecialchars()函数进行防御。同时,探讨了XSS的自动化工具和防范措施,强调了内容安全策略与HttpOnly Cookie的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一部分:XSS常用弹框测试语句

1.                  <script>alert('xss')</script>                          弹框事件

2.                  οnclick="alert('xss')                                      点击弹框事件

3.                  <a href='javascript:alert('xss')'>1</a>          点击弹框链接

其他:

>"'><script>alert(XSS)</script>

>"'><img src="javascript:alert(123456)">

1234<%00script>alert("123456")</script>

&{alert(123456)}

>%22%27><img%20src%3d%22javascript:alert(123456)%22>

[rm]"><img src=1 οnerrοr=alert(document.cookie)>[/rm]

\u003cimg src=1 οnerrοr=alert(/xss/)\u003e

\x20\x27onclick\x3dalert\x281\x29\x3b\x2f\x2f\x27

注意:使用时注意单引号   双引号   中括号等的灵活使用

第二部分:XSS基础讲解

1.XSS是什么?

XSS(Cross Site Scripting),即跨站脚本攻击,是一种常见于web application中的计算机
安全漏洞。XSS通过在用户端注入恶意的可运行脚本,若服务器端对用户输入不进行处理,
直接将用户输入输出到浏览器,则浏览器将会执行用户注入的脚本。


2.XSS漏洞的危害


(1)窃取管理员帐号或Cookie,入侵者可以冒充管理员的身份登录后台。
使得入侵者具有恶意操纵后台数据的能力,包括读取、更改、添加、删除一些信息。
(2)窃取用户的个人信息或者登录帐号,对网站的用户安全产生巨大的威胁。例如冒充用户身份进行各种操作。
(3)网站挂马。先将恶意攻击代码嵌入到Web应用程序之中。当用户浏览该挂马页面时,用户的计算机会被植入木马。
(4)发送广告或者垃圾信息。攻击者可以利用XSS漏洞植入广告,或者发送垃圾信息,严重影响到用户的正常使用。

第三部分: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绕过(代码和WAF)方法

一.绕过代码

1.大小写绕过                <Script>alert('xss')</sCript>

2.叠加代码绕过            oonnclick="alert('xss')

3.编码绕过                    javascript:alert('xss')  通过ASCLL 转 Unicode 后得到%6A%61.........%29

4.编码加http绕过           javascript:alert('xss')同上编码后加上//http://www.地址.com//进行绕过

5.利用函数绕过             如果存在 t_sort 等函数存在注入,则&t_sortty:pe="text" οnclick="alert('xss')

6.数据包添加referer绕过   通过抓包添加referer请求头实现,referer:type="text" οnclick="alert('xss')

二.绕过WAF

1.标签语法替换

2.特殊符号干扰

3.提交方式更改

4.垃圾数据溢出

5.加解密算法

6.结合其他漏洞

三.自动化工具

1.XSStrike工具

2.多线程爬虫

3.Context分析

第五部分:XSS防御方法

5.1 反射型xss漏洞防范

php中xss的漏洞防范方法总结:<参考自Segmentfault>

A.PHP直接输出html的,可以采用以下的方法进行过滤:

    1.htmlspecialchars函数
    2.htmlentities函数
    3.HTMLPurifier.auto.php插件
    4.RemoveXss函数

B.PHP输出到JS代码中,或者开发Json API的,则需要前端在JS中进行过滤:

    1.尽量使用innerText(IE)和textContent(Firefox),也就是jQuery的text()来输出文本内容
    2.必须要用innerHTML等等函数,则需要做类似php的htmlspecialchars的过滤

C.其它的通用的补充性防御手段

    1.在输出html时,加上Content Security Policy的Http Header
    (作用:可以防止页面被XSS攻击时,嵌入第三方的脚本文件等)
    (缺陷:IE或低版本的浏览器可能不支持)
    2.在设置Cookie时,加上HttpOnly参数
    (作用:可以防止页面被XSS攻击时,Cookie信息被盗取,可兼容至IE6)
    (缺陷:网站本身的JS代码也无法操作Cookie,而且作用有限,只能保证Cookie的安全)
    3.在开发API时,检验请求的Referer参数
    (作用:可以在一定程度上防止CSRF攻击)
    (缺陷:IE或低版本的浏览器中,Referer参数可以被伪造)


这里我们选用htmlentities()函数进行测试:

htmlentities() 函数把字符转换为 HTML 实体。

新建Xss_htmlentities.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>'.htmlentities($XssReflex);#仅在这里对变量 $XssReflex 做了处理.
?> 
</body> 
</html> 

在Firefox输入url:localhost/codoaudit/xss/Xsshtmlentities.php :

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

可以看到页面并没有弹窗。
我们再查看网页html代码:

可以看到htmlentities()函数对用户输入的<>做了转义处理,恶意代码当然也就没法执行了。
还有其他过滤函数,纸上学来终觉浅,有兴趣的同学可以自己去尝试一番

5.2 存储型xss漏洞防范

存储型XSS对用户的输入进行过滤的方式和反射型XSS相同,这里我们使用htmlspecialchars()函数进行演示:

htmlentities() :把预定义的字符 "<" (小于)和 ">" (大于)转换为 HTML 实体

htmlspecialchars和htmlentities的区别:

htmlspecialchars 只转义 & 、" 、' 、< 、> 这几个html代码,而 htmlentities 却会转化所有的html代码,连同里面的它无法识别的中文字符也会转化。

新建Xss_htmlspecialchars_Storage.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="Xss_htmlspecialchars_Storage.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="XssStorage.php"'/>  
    </form>  
    <?php  
    if(isset($_POST['user'])&&isset($_POST['desc'])){  
    $log=fopen("sqlStorage.txt","a");  
    fwrite($log,htmlspecialchars($_POST['user'])."\r\n"); # 在此对用户输入数据$_POST['user']进行过滤
    fwrite($log,htmlspecialchars($_POST['desc'])."\r\n"); # 在此对用户输入数据$_POST['desc']进行过滤
    fclose($log);  
    }  
      
    if(file_exists("sqlStorage.txt"))  
    {  
    $read= fopen("sqlStorage.txt",'r');  
    while(!feof($read))  
    {  
        echo fgets($read)."</br>";  
    }  
    fclose($read);  
    }  
    ?>  
    </body>  
    </html></span>  

在Firefox输入url:localhost/codoaudit/xss/Xss_htmlspecialchars_Storage.php :

当我们在Message中输入<script>alert('xss')</script>

可以看到页面并没有弹窗。
我们再查看网页html代码:

可以看到htmlspecialchars()函数对用户输入的<>做了转义处理。

文章部分转载,原文地址:https://www.jianshu.com/p/4fcb4b411a66

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值