[理论-学习]Web安全原理剖析-02

声明:

由于笔者能力有限,难免出现各种错误和漏洞。全文仅作为个人笔记,仅供参考。

笔记内容来源于各类网课、书籍。

本章节内容来源:《Web安全攻防渗透测试实战指南》

三、XSS

1. XSS基础

1.1 XSS漏洞介绍

跨站脚本(Cross-Site Scripting,检测为XSS或跨站脚本或跨站脚本攻击),是一种针对网页应用程序的安全漏洞攻击技术,是代码注入的一种

它允许恶意用户将脚本代码注入网页中,其他用户在浏览网页会受到影响。恶意用户利用XSS攻击成功后,可能会进行高权限的操作、获取私密网页内容、会话劫持等操作。

XSS分为反射型、存储型、DOM型

1.2 XSS漏洞原理

1.2.1 反射型

又称为非持久性XSS,这种攻击是一次性的。

攻击方式:攻击者通过电子邮件等方式,将包含XSS代码的恶意链接发送给目标用户。当目标用户访问该链接时,服务器接收目标用户的请求并进行处理,然后服务器把带有XSS代码的数据发送给用户浏览器,浏览器解析XSS代码的恶意脚本,就会触发XSS漏洞。

举一个反射型XSS利用的例子:

攻击者找到一个可以利用反射型XSS的网址,发送给用户 。XSS脚本使网页重定位到攻击者的恶意URL地址,恶意URL地址内加载了Beef的hook.js,当用户点击了攻击者发送的网址,就会被Beef控制,攻击者可以进行一些操作。

1.2.2 存储型

又称为持久型XSS,攻击脚本被存储在目标服务器的数据库或文件中,具有很高的隐蔽性。

攻击方式:这种攻击多见于论坛、博客和留言板,攻击者在发帖的过程中,将恶意脚本混在正常信息中一起注入帖子中。随着帖子被服务器存储下来,恶意脚本也被存储在服务器中。当其他用户浏览了这个被恶意注入脚本的帖子时,就会触发其中的恶意代码。

与反射型不同的是,反射型XSS在URL中可以提现出部分恶意代码,如果仔细对待不明链接,可以大大减少收到的工具。但是存储型XSS是在URL返回的内容中,无法通过URL分辨有无恶意代码,危害更大。

1.2.3 DOM型XSS

DOM全称Document Object Model,使用DOM可以使程序和脚本能够动态访问和更新文档的内容、结构或样式。

DOM型XSS其实一种特殊的反射性XSS,它是基于DOM文档对象模型的一种漏洞。

由于DOM是在客户端修改节点的,所以基于DOM型的XSS漏洞不需要与服务器进行交互,它只发生在客户端处理数据阶段。

攻击方式:用户请求一个进过专门设计的URL,它由攻击者提交,而且其中包含XSS代码。服务器的响应不会以任何形式包含攻击者脚本。当用户的浏览器处理这个响应,DOM对象会处理XSS代码,导致XSS漏洞。

1.3 反射型XSS攻击

环境:DVWA的XSS(Reflected)[Low]

(1) 正常提交

提交后,会将提交的数据放在URL的参数位置,这就构成了一个带参数GET请求。

同时我们的数据显示在了html中的<pre>标签中。

(2) 触发XSS

我们尝试闭合<pre>标签,让恶意脚本插入其中并得到执行。

</pre><script>alert(document.cookie)</script>

脚本触发:

注入的脚本:

(3) 代码分析

Low级别的ReflectedXSS的后端代码。

<?php

header ("X-XSS-Protection: 0");

// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
    // Feedback for end user
    echo '<pre>Hello ' . $_GET[ 'name' ] . '</pre>';
}

?> 

后端处理如下:

通过if判断参数列表中有无name键的存在,并且获取到的name键的值不为空,进行下一步。

if内没有进行任何字符检测过滤,直接将我们提交的参数进行字符串拼接,并回显。

漏洞触发原因:

由于没有对用户输入的参数进行任何检测,导致用户可以进行恶意代码的注入。

其他:

在medium等级下,对某些标签有过滤,但是依然可使用其他标签触发(例如:img标签)。

1.4 存储型XSS攻击

环境:DVWA的XSS(Stored)[Low]

(1) 正常提交

数据提交方式是由POST提交。数据回显在HTML中。

(2) 存储恶意脚本并触发XSS

存储并触发XSS:

<script>alert(document.cookie);</script>

存储的恶意脚本:

 恶意脚本已经存储到数据库中。

以后任何用户访问该URL连接,都会触发XSS,危害很大。

(3) 代码分析

Low级别的StoredXSS的后端代码。

<?php

if( isset( $_POST[ 'btnSign' ] ) ) {
    // Get input
    $message = trim( $_POST[ 'mtxMessage' ] );
    $name    = trim( $_POST[ 'txtName' ] );

    // Sanitize message input
    $message = stripslashes( $message );
    $message = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $message ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));

    // Sanitize name input
    $name = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $name ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));

    // Update database
    $query  = "INSERT INTO guestbook ( comment, name ) VALUES ( '$message', '$name' );";
    $result = mysqli_query($GLOBALS["___mysqli_ston"],  $query ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );

    //mysql_close();
}

?> 

这里依然是没有对参数进行任何过滤和检测,导致的存储型XSS的出现。

1.5 DOM型XSS攻击

(1) 正常提交

我们可以看到数据由页面中js处理,服务器对输入的参数不进行处理。这里有可能存在DOM型XSS。数据在option标签中回显。

(2) 触发XSS

<script>alert(document.cookie);</script>

注入的恶意脚本:

(3) 代码分析

前端代码:

if (document.location.href.indexOf("default=") >= 0) {
						var lang =            document.location.href.substring(document.location.href.indexOf("default=")+8);
						document.write("<option value='" + lang + "'>" + decodeURI(lang) + "</option>");
						document.write("<option value='' disabled='disabled'>----</option>");
		}
document.write("<option value='English'>English</option>");
document.write("<option value='French'>French</option>");
document.write("<option value='Spanish'>Spanish</option>");
document.write("<option value='German'>German</option>");

这里是DOM型的XSS,后端没有对参数做任何处理。

DOM型和反射性的区别是:

DOM型的恶意代码不经过服务器处理,反射型的进过服务器处理。其实DOM型算是特殊的反射型。

2. XSS进阶

2.1 XSS常用语句

  • <script>alert(1);</script>
  • <img src=x οnerrοr=alert(1) >
  • <img src=javascript:alert(1)>
  • <svg οnlοad=alert(1)>
  • <a href=javascript:alert(1)>
  • <a href=javascript:alert(1)>hack</a>
  • <scr<script>ipt>alert(1);</scr</script>ipt> // 双写
  • '><script>alert(0)</script> // 闭合前面属性和标签
  • <? echo('<script>alert("XSS")</script>'); ?>  // php输出恶意脚本

2.2 编码绕过

常见的JS编码,HTML实体编码,URL编码绕过。

2.2.1 JS编码

  • 三个八进制数字,如果个数不够,在前面补0。例如'e'的编码:'\145'
  • 两个十六进制数字,如果个数不够,在前面补0。例如'e'的编码:'\x65'
  • 四个十六进制数字(Unicode编码),如果个数不够,在前面补0。例如'e'的编码:'\u0065'
  • 对于一些特殊字符,使用C类型的转义风格。例如\r,\n,\\

2.2.2 HTML实体编码

  • 命名实体:以&开头,以分号结尾的,例如'<'的编码是:"&lt;"
  • 字符编码:十进制、十六进制ASCII码或Unicode字符编码,样式为"&#数值",例如'<'的编码为"&#060;",和"&#x3c;"

2.2.3 URL编码

例如alert的URL编码为:

  • %61%6c%65%72%74 (一次全编码)
  • %25%36%31%25%36%63%25%36%35%25%37%32%25%37%34 (二次全编码)

在使用XSS编码测试时,需要考虑HTML渲染顺序,特别是针对多种编码组合时,需要选择合适的编码方式进行测试。

3. XSS漏洞修复建议

  • 过滤数据,包括单引号,双引号,大小于号,on*等非法字符。
  • 对字符串进行强制编码,将特殊的字符进行编码(HTML实体编码)
  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Web安全深度剖析》总结了当前流行的高危漏洞的形成原因、攻击手段及解决方案,并通过大量的示例代码复现漏洞原型,制作模拟环境,更好地帮助读者深入了解Web应用程序中存在的漏洞,防患于未然。 《Web安全深度剖析》从攻到防,从原理到实战,由浅入深、循序渐进地介绍了Web 安全体系。全书分4 篇共16 章,除介绍Web 安全的基础知识外,还介绍了Web 应用程序中最常见的安全漏洞、开源程序的攻击流程与防御,并着重分析了“拖库”事件时黑客所使用的攻击手段。此外,还介绍了渗透测试工程师其他的一些检测方式。 《Web安全深度剖析》最适合渗透测试人员、Web 开发人员、安全咨询顾问、测试人员、架构师、项目经理、设计等人员阅读,也可以作为信息安全等相关专业的教材。 第1篇 基础篇 第1章 Web安全简介 2 1.1 服务器是如何被入侵的 2 1.2 如何更好地学习Web安全 4 第2章 深入HTTP请求流程 6 2.1 HTTP协议解析 6 2.1.1 发起HTTP请求 6 2.1.2 HTTP协议详解 7 2.1.3 模拟HTTP请求 13 2.1.4 HTTP协议与HTTPS协议的区别 14 2.2 截取HTTP请求 15 2.2.1 Burp Suite Proxy 初体验 15 2.2.2 Fiddler 19 2.2.3 WinSock Expert 24 2.3 HTTP应用:黑帽SEO之搜索引擎劫持 24 2.4 小结 25 第3章 信息探测 26 3.1 Google Hack 26 3.1.1 搜集子域名 26 3.1.2 搜集Web信息 27 3.2 Nmap初体验 29 3.2.1 安装Nmap 29 3.2.2 探测主机信息 30 3.2.3 Nmap脚本引擎 32 3.3 DirBuster 33 3.4 指纹识别 35 3.5 小结 38 第4章 漏洞扫描 39 4.1 Burp Suite 39 4.1.1 Target 39 4.1.2 Spider 40 4.1.3 Scanner 42 4.1.4 Intruder 43 4.1.5 辅助模块 46 4.2 AWVS 49 4.2.1 WVS向导扫描 50 4.2.2 Web扫描服务 52 4.2.3 WVS小工具 53 4.3 AppScan 54 4.3.1 使用AppScan扫描 55 4.3.2 处理结果 58 4.3.3 AppScan辅助工具 58 4.4 小结 61 第2篇 原理篇 第5章 SQL注入漏洞 64 5.1 SQL注入原理 64 5.2 注入漏洞分类 66 5.2.1 数字型注入 66 5.2.2 字符型注入 67 5.2.3 SQL注入分类 68 5.3 常见数据库注入 69 5.3.1 SQL Server 69 5.3.2 MySQL 75 5.3.3 Oracle 84 5.4 注入工具 89 5.4.1 SQLMap 89 5.4.2 Pangolin 95 5.4.3 Havij 98 5.5 防止SQL注入 99 5.5.1 严格的数据类型 100 5.5.2 特殊字符转义 101 5.5.3 使用预编译语句 102 5.5.4 框架技术 103 5.5.5 存储过程 104 5.6 小结 105 第6章 上传漏洞 106 6.1 解析漏洞 106 6.1.1 IIS解析漏洞 106 6.1.2 Apache解析漏洞 109 6.1.3 PHP CGI解析漏洞 110 6.2 绕过上传漏洞 110 6.2.1 客户端检测 112 6.2.2 服务器端检测 115 6.3 文本编辑器上传漏洞 123 6.4 修复上传漏洞 127 6.5 小结 128 第7章 XSS跨站脚本漏洞 129 7.1 XSS原理解析 129 7.2 XSS类型 130 7.2.1 反射型XSS 130 7.2.2 存储型XSS 131 7.2.3 DOM XSS 132 7.3 检测XSS 133 7.3.1 手工检测XSS 134 7.3.2 全自动检测XSS 134 7.4 XSS高级利用 134 7.4.1 XSS会话劫持 135 7.4.2 XSS Framework 141 7.4.3 XSS GetShell 144 7.4.3 XSS蠕虫 149 7.5 修复XSS跨站漏洞 151 7.5.1 输入与输出 151 7.5.2 HttpOnly 158 7.6 小结 160 第8章 命令执行漏洞 161 8.1 OS命令执行漏洞示例 161 8.2 命令执行模型 162 8.2.1 PHP命令执行 163 8.2.2 Java命令执行 165 8.3 框架执行漏洞 166 8.3.1 Struts2代码执行漏洞 166 8.3.2 ThinkPHP命令执行漏洞 169 8.3 防范命令执行漏洞 169 第9章 文件包含漏洞 171 9.1 包含漏洞原理解析 171 9.1.1 PHP包含 171 9.1.2 JSP包含 180 9.2 安全编写包含 184 9.3 小结 184 第10章 其他漏洞 185 10.1 CSRF 185 10.1.1 CSRF攻击原理 185 10.1.2 CSRF攻击场景(GET) 186 10.1.3 CSRF攻击场景(POST) 188 10.1.4 浏览器Cookie机制 190 10.1.5 检测CSRF漏洞 193 10.1.6 预防跨站请求伪造 197 10.2 逻辑错误漏洞 199 10.2.1 挖掘逻辑漏洞 199 10.2.2 绕过授权验证 200 10.2.3 密码找回逻辑漏洞 204 10.2.4 支付逻辑漏洞 205 10.2.5 指定账户恶意攻击 209 10.3 代码注入 210 10.3.1 XML注入 211 10.3.2 XPath注入 212 10.3.3 JSON注入 215 10.3.4 HTTP Parameter Pollution 216 10.4 URL跳转与钓鱼 218 10.4.1 URL跳转 218 10.4.2 钓鱼 220 10.5 WebServer远程部署 224 10.5.1 Tomcat 224 10.5.2 JBoss 226 10.5.3 WebLogic 229 10.6 小结 233 第3篇 实战篇 第11章 实战入侵与防范 236 11.1 开源程序安全剖析 236 11.1.1 0day攻击 236 11.1.2 网站后台安全 238 11.1.3 MD5还安全吗 243 11.2 拖库 248 11.2.1 支持外连接 248 11.2.2 不支持外连接 253 11.3 小结 262 第4篇 综合篇 第12章 暴力破解测试 264 12.1 C/S架构破解 265 12.2 B/S架构破解 272 12.3 暴力破解案例 275 12.4 防止暴力破解 277 12.5 小结 278 第13章 旁注攻击 279 13.1 服务器端Web架构 279 13.2 IP逆向查询 280 13.3 SQL跨库查询 282 13.4 目录越权 283 13.5 构造注入点 284 13.6 CDN 286 13.7 小结 288 第14章 提权 290 14.1 溢出提权 290 14.2 第三方组件提权 294 14.2.1 信息搜集 294 14.2.2 数据库提权 296 14.2.3 FTP提权 302 14.2.4 PcAnywhere提权 312 14.3 虚拟主机提权 314 14.4 提权辅助 315 14.4.1 3389端口 315 14.4.2 端口转发 318 14.4.3 启动项提权 320 14.4.4 DLL劫持 321 14.4.5 添加后门 322 14.5 服务器防提权措施 324 14.6 小结 325 第15章 ARP欺骗攻击 326 15.1 ARP协议简介 326 15.1.1 ARP缓存表 326 15.1.2 局域网主机通信 327 15.1.3 ARP欺骗原理 328 15.2 ARP攻击 329 15.2.1 Cain 329 15.2.2 Ettercap 332 15.2.3 NetFuke 336 15.3 防御ARP攻击 339 15.4 小结 340 第16章 社会工程学 341 16.1 信息搜集 341 16.2 沟通 343 16.3 伪造 344 16.4 小结 345

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值