作者:LoRexxar'@知道创宇404实验室

刚刚4月过去的TCTF/0CTF2018一如既往的给了我们惊喜,其中最大的惊喜莫过于多道xss中Bypass CSP的题目,其中有很多应用于现代网站的防御思路。

其中bl0g提及了通过变量覆盖来调用已有代码动态插入Script标签绕过strict-dynamicCSP的利用方式。

h4xors.club2则是通过Script Gadgets和postmessage中间人来实现利用。

h4x0rs.space提及了Appcache以及Service worker配合jsonp接口实现的利用思路。

其中的很多利用思路非常精巧,值得研究。所以我花费了大量时间复现其中题目的思路以及环境,希望能给读者带来更多东西...

bl0g

题目分析

An extremely secure blog

Just focus on the static files. plz do not use any scanner, or your IP will be blocked.

很有趣的题目,整个题的难点在于利用上

站内的功能都是比较常见的xss功能

new 新生成文章

article/xx 查看文章/评论

submit 提交url (start with http://202.120.7.197:8090/)

flag admin可以查看到正确的flag

还有一些隐藏的条件

1、CSP

Content-Security-Policy:

script-src 'self' 'unsafe-inline'

Content-Security-Policy:

default-src 'none'; script-src 'nonce-hAovzHMfA+dpxVdTXRzpZq72Fjs=' 'strict-dynamic'; style-src 'self'; img-src 'self' data:; media-src 'self'; font-src 'self' data:; connect-src 'self'; base-uri 'none'

挺有趣的写法,经过我的测试,两个CSP分开写,是同时生效并且单独生效的,也就是与的关系。

换个说法就是,假设我们通过动态生成script标签的方式,成功绕过了第二个CSP,但我们引入了

从CSP我们也可以简单窥得一些利用思路,base-uri 'none'代表我们没办法通过修改根域来实现攻击,default-src 'none'这其中包含了frame-src,这代表攻击方式一定在站内实现,script-src的双限制代表我们只能通过

2、new中有一个字段是effect,是设置特效的

POST /new HTTP/1.1

Host: 202.120.7.197:8090

Connection: keep-alive

Content-Length: 35

Cache-Control: max-age=0

Origin: http://202.120.7.197:8090

Upgrade-Insecure-Requests: 1

Content-Type: application/x-www-form-urlencoded

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8

Referer: http://202.120.7.197:8090/new

Accept-Encoding: gzip, deflate

Accept-Language: zh-CN,zh;q=0.9

Cookie: BL0G_SID=vV1p59LGb01C4ys4SIFNve4d_upQrCpyykkXWmj4g-i8u2QQzngP5LIW28L0oB1_NB3cJn0TCwjdE32iBt6h

title=a&content=a&effect=nest

effect字段会插入到页面中的,但这里实际上是没有任何过滤的,也就是说我们可以通过闭合这个标签并插入我们想要的标签,需要注意的是,这个点只能插入70个字符。

3、login?next=这个点可以存在一个任意跳转,通过这个点,我们可以绕过submit的限制(submit的maxlength是前台限制,可以随便跳转

4、站内的特效是通过jqery的append引入的,在article.js这个文件中。

$(document).ready(function(){

$("body").append((effects[$("#effect").val()]));

});

effects在config.js中被定义。

回顾上面的几个条件,我们可以简单的整理思路。

在不考虑0day的情况下,我们唯有通过想办法通过动态生成script标签,通过sd CSP这个点来绕过

首先我们观察xss点周围的html结构

83319c96-aec2-46cc-8d7c-2647b7db914f.png-w331s

在整站不开启任何缓存的情况下,通过插入标签的方式,唯一存在一种绕过方式就是插入

浏览器有一定的容错能力,他会补足不完整的标签

=====>

但这个操作在这里并不适用,因为中间过多无用标签,再加上即使吞了也不能有什么办法控制后面的内容,所以这里只有一种绕过方式就是dom xss。

稍微翻翻可以发现,唯一的机会就在这里

$(document).ready(function(){

$("body").append((effects[$("#effect").val()]));

});

如果我们可以覆盖effects变量,那我们就可以向body注入标签了,这里需要一点小trick。

在js中,对于特定的form,iframe,applet,embed,object,img标签,我们可以通过设置id或者name来使得通过id或name获取标签

也就是说,我们可以通过effects获取到

这个标签。同理,我们就可以通过插入这个标签来注册effects这个变量。

可如果我们尝试插入这个标签后,我们发现插入的effects在接下来的config.js中被覆盖了。

这时候我们回到刚才提到的特性,浏览器有一定的容错能力,我们可以通过插入,那么中间的代码就会被视为js代码,被CSP拦截。

我们成功的覆盖了effects变量,紧接着我们需要覆盖effects[$("#effect").val()],这里我们选择id属性(这里其实是为了id会使用两次,可以更省位数),

所以我们尝试传入

effect=id">

ctf xss利用_TCTF/0CTF2018 XSS Writeup相关推荐

  1. xss植入_网站xss漏洞的利用过程

    XSS跨站脚本,是一种Web安全漏洞,有趣是是他并不像SQL注入等攻击手段攻击服务端,本身对Web服务器没有危害,攻击的对象是客户端,使用浏览器访问这些恶意地址的网民.这里就跟大家稍微讲解一下网站xs ...

  2. 【XSS漏洞-06】XSS漏洞利用案例(浏览器劫持、会话劫持、GetShell)—基于神器beEF

    目录 1 案例简介 1.1 案例目的 1.2 案例环境 2 案例一:浏览器劫持 2.1 概述 2.2 案例步骤 3 案例二:会话劫持 3.1 概述 3.2 案例步骤 4 案例三:GetShell 4. ...

  3. php反射型xss,利用反射型XSS漏洞,模拟获取登录账户的Cookie

    目录结构 一.测试环境 二.测试目标 三.原理描述 四.操作步骤 1.在服务器上搭建并启用hacker测试网站 2.在服务器上测试站点根目录内创建一个存放攻击脚本的文件夹 3.在xss文件夹下创建攻击 ...

  4. 【XSS漏洞03】XSS漏洞验证、语句构造与绕过方法

    目录 1 漏洞验证相关概念 2 XSS漏洞验证 2.1 常见POC 2.2 反射型XSS漏洞验证 2.3 存储型XSS漏洞验证 2.4 DOM型XSS漏洞验证 3 XSS语句构造与绕过 3.1 XSS ...

  5. 反射型xss和Dom型xss区别

    我们观察这个url 说明会向服务端发送一个请求,只是服务器直接进行返回了所以说反射型的xss是一次性的 不是持久存储 我们可以利用这个漏洞在url里面加入自己的脚本 例如这个网站用户已经登录了,我们可 ...

  6. XSS学习笔记:XSS Game(xss.pwnfunction.com)1-11通关全解

    前言 继续学习XSS 本篇是XSS Game平台的通关全解 1.Ma Spaghet! 源码 一个不安全的方式 直接get传输somebody 输入123看看位置 ?somebody=123 那就很简 ...

  7. XSS专栏之常见xss总结备忘

    layout: post title: XSS专栏 category: Vulnerability_mining tags: XSS keywords: XSS,CSP 前言 开始总结一些xss的想法 ...

  8. XSS基础及实战(XSS提取cookie并登录的)

    该学新知识了! 本篇文章篇幅有点长,做了很多的本地攻击演示! 请耐心观看. 目录 XSS基础 XSS分类 反射型XSS的利用 演示一(基于DoraBOX靶场) 演示二(基于DVWA靶场) 等级为:im ...

  9. 反射型XSS,存储型XSS,Dom型XSS,如何获取cookie,XSS钓鱼,XSS获取键盘记录

    XSS: 反射型XSS,存储型XSS,Dom型XSS,如何获取cookie,XSS钓鱼,XSS获取键盘记录 一.跨站脚本漏洞(XSS) XSS漏洞一直被评估为web漏洞中危害较大的漏洞 XSS是一种发 ...

最新文章

  1. VS2008中Web Reference和Service Reference的区别
  2. python语言跨平台语言吗_python属于跨平台语言吗?
  3. 创建组_在Allegro软件中的Groups组创建之后怎么进行打散呢?
  4. 初识CPS方法的连续动态建模
  5. 模型 matlab_MBSDM土壤介电模型及Matlab实现
  6. Oracle RAC的Failover
  7. Delphi Invalidate的用法
  8. 谢旭升《操作系统教程》课后习题解答
  9. java经典算法(八)---zws
  10. android谷歌地图v2开发,android google map v2开发环境配置教程
  11. 关于java.security.AccessControlException: access denied 的解决方法
  12. 大数据时代,企业如何做好数据防泄漏?
  13. html5移动开发是什么意思,移动端什么意思?
  14. 64位 regsrv win10_64位WINDOWS 10系统下安装Eplan 2.8及注册过程
  15. 小程序也能接广告了,微信小程序广告位投放指南!
  16. [CVPR2022]3D Photo Stylization: Learning to Generate Stylized Novel Views from a Single Image
  17. css3 平行四边形 、大括弧
  18. 垂直水平居中的几种方式
  19. 金蝶ERP供应链之采购管理
  20. jq及html通过url下载文件

热门文章

  1. 华为p9 html尺寸,华为P9性能参数 - 劲爆!华为P9拆解全过程
  2. 拍照、从相册选图并对图片进行裁剪
  3. app 支持与itunes之间传输文稿
  4. opp原则_面向过程编程(OPP) 和面向对象编程(OOP)的关系
  5. 纷享销客自定义函数:实战100例(全网最全,持续更新...)
  6. python实现电影天堂种子磁力的爬取
  7. miui系统神隐模式导致app后台服务无法连接网络
  8. 5款大神手机必备APP,个个都是精品,你有什么理由拒绝
  9. 电子商务营销模式助力兽药企业突围有道
  10. 轻松打造免开发智能电水壶