NCTF2020-出题小记

nctf2020终于结束了。我手头的题目也基本无了 XD
因为这次nctf学长他们要来的奖励挺丰厚的(xray license我也想要啊),所以就把手头的题都放出来了。如果难度对新生有些劝退的话还请多多包涵。校赛前几天,甚至以为yypl要来就临时赶出了一道bg_laravel,结果被忽悠了。最后大部分师傅可能都去做祥云杯了,所以没能过来打,算是比较可惜了。

这次我的题目除了bg_laravel以外全都有人解出.(rmb师傅还有其他师傅tql)题目环境放github上了,可以自取复现。
https://github.com/baiyecha404/My-NCTF2020-Challs

JS-world [11 solves]

这道是专门为校赛准备的签到题目。整体思想上其实就是想展示下js在前后端的通用性。只要理解了前端源码就能推断后端逻辑。同时也想说明前端的waf等于没有waf :).加上powered by ejs的提示,应该不难看出用的是ejs来渲染html代码。那么直接用ejs的语句就可以RCE了.

比赛的时候本来一血很快就出了的,结果后来半天没人解。我看了眼html发现有的师傅已经可以RCE了结果就是不去看根目录的flag.txt.阿这......

Mango [3 solves]

Mango 自然是为了玩一个mongo <-> mango的梗。这道题的起源比较有意思,来自于上半年某国际赛的赛题。当时题目考点是node-serialize的反序列化,不过我在黑盒测的时候意外发现那道题目还有nosql注入的漏洞存在。于是后来getshell后索性dump源码下来研究了下,也大致明白了为什么他的配置会产生nosql注入。加上后来发现这样的代码写法其实还挺常见的,所以干脆单独剥出来做成nosql注入了。

但是我的定位只是中等难度,最后只有3 solves我也很迷。不知道是因为大家没有接触过nosql注入还是什么的。我现在见过的大部分nodejs写的项目数据库都是用的mongodb,感觉出现nosql的概率还是不小的。稍微需要更换方式fuzz的地方就是json传递数据了。这个也算是比较常见的trick吧,node由于传递json导致与对象混淆的问题简直不要太多。所以第二个提示给出了app.use(express.json())。手抖加一个json中间件或者因为某个需求不得不加中间件(写api时),很有可能带来奇怪的问题。所以写node传参一定要记得类型检查啊。

PackageManager v1.0/v2.0 [7 solves / 3 solves]

PackageManager 系列放了两道题。其实源码基本相差不大,2就是1的升级版。一开始的PackageManager 6月份就出好了。不过后来过了几个月后意外发现居然存在非预期。于是索性就把非预期放到第二版里并且加难了。考点其实是我觉得很值得去学习的用子进程来prototype pollution to RCE的一种手段.相比深挖模板污染属性的利用方法,子进程导致RCE算是大大降低了利用难度。然而国内相关文章貌似主要是先知上的一篇kibana cve分析,不过就子进程利用范围上有些差错。所以希望借此让大家重新关注下。

当然,后来意外发现这个考点第5空间线下貌似也出现过,不过我题目先出好的233。

v2除了达成RCE以外,为了增加一点难度,特意就把flag放到mongodb中了。这点根据hint.txt以及目录下的文件来推断应该不成问题。其实目的是模拟一个开发上线到生产环境的情景。比如像我这样,容易装了某个依赖写个demo,然后字段留到package.json里了,本地删了相关js代码后拿到生产环境下直接npm install ,就多装了没有用的依赖。所以这里就能用mongodb依赖连接内网mongodb拿flag.

然后比赛就翻车了......nunjucks把我给害了。之所以选nunjucks做模板引擎本来是因为我所知道的引擎除了nunjucks外,像hbs,ejs,pug,jade都是可以污染模板RCE的。所以没有跟源码就直接想看看有没有人非预期污染nunjucks属性的(p1g3师傅应该是找了nunjucks的污染,但是只能等我靶机每分钟重启才能看一次执行结果,没有预期解方便)。结果发现nunjucks直接模板注入根本不受这些影响...... 我v2本来目的就是说明其实不止fork,任意子进程都可以结合污染环境变量然后RCE,所以就用了execSync('whoami')。中间件里还考察了一个trick绕过debug路由的限制.结果模板注入直接通杀v1,v2 orz

不过貌似看v2的人不多,所以最后rmb跟p1g3师傅应该是预期做的。一血的Somnus师傅就直接非预期模板注入了......不过非预期什么的无所谓,能拿flag都是好方法,大家能学到子进程污染的知识我就比较满足了。最后比较普遍的问题是有的师傅连接mongodb代码写好后没有db.close().那这本地必然是拿不到查询结果的。

SimpleSimplePie [1 solves]

挖链子是不可能的,所以只能自己手写几个乱七八糟的类来构造pop链了。整体思路我感觉跟tp系列的pop chain 差不多?就是个super-mini版的__toString() -> __call() -> call_user_func调用自身函数。

然后利用则比较有意思。灵感当然就是之前做htb时发现的新姿势 ssrf 打memcache触发反序列化. 后来意外发现这样的利用其实实战中还挺不少的,比如之前安恒俊杰师傅的ssrf -> RCE的艰难利用就是ssrf 打redis触发thinkphp反序列化.我的题相比实战还是简单多了。

这里pop链里有个小坑就是链子的起点选__wakeup最好。我自己当初调试的时候就发现如果用__destruct做起点,会因为序列化数据的一些内容触发simplepie的报错。所以写利用类时故意刁难加了个__destruct希望踩个坑(我爬了)。但是唯一解出的rmb师傅在选择了__destruct做起点后是用了phpggc里的fast destruct 来进入__destruct。这倒确实出乎我意料,学到了。

bg_laravel [0 solves]

没想到最后laravel成了防ak题......因为时临时赶的,所以很多地方写的不是很好,还请见谅。甚至由sql注入到上传getshell都是灵光一闪想出来的。

题目之所以用了保国当然是因为最近被马老师的鬼畜给洗脑了233。所以我的题目上传不给回显路径,其实是年轻人不讲武德不告诉你文件名 :)

首先在国内CTF laravel的反序列化早就被打烂了,所以我就想能不能出点新意。说起来之前七月火师傅的laravel文章下居然有人说没人这么写控制器所以反序列化没有用,这就来打脸。众所周知,phar反序列化直接扩宽了php反序列化的利用面。一个laravel站里出现的文件流操作绝对不少,那么如果能有可控点触发phar反序列化,结合pop链直接就能getshell.

但是这么考太简单了,所以自然是加点花。

刚好我最近接触到了laravel 5.8.10的很冷门的sql注入。冷门主要是因为github上修复都只是说修复了逃逸单引号的漏洞,而不是明说的sql注入漏洞。而且利用条件也有点苛刻,一个是要输入可控,另一个是回显得有json数据,否则json_extract()会报错。wp里给的参考文章也只是说了addSelect(),select() + json回显的数据可能会导致sql注入。可实际上,题目中出现的orderby()也是可以注入的。这就要看师傅们自己debug了。我自己是当初直接wrapJsonPath那下断点碰运气在可控位置一个个尝试触发才发现的。

sql注入怎么跟phar反序列化结合呢?除开可控的phar://输入点,我第一想法是把上传的文件名随机化,然后把文件名之类的保存在mysql里。但是很有意思的是,我在网上找了不少laravel的文件上传都用了ORM,也就是说,File类是个Eloquent model.执行$file->save()时对应的数据就都到了数据库里了,正合我意。

所以可能大部分师傅被这个冷门的laravel sql注入给难住了。所以还是要多谷歌+查看官方这个版本的一些小改动,说不定就能定位漏洞点了。

summary

总之这次比赛能看到师傅们做自己的题,顺便交流下思路还是比较开心的。希望大家明年能接着来玩,也可以期待下不知道有没有的X1CTF

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

推荐阅读更多精彩内容

  • 越打越菜 :(这次比赛难度相比上次RCTF的难度好了点。但是最后还是只能感慨自己tcl。做出来的只有CloudDi...
    byc_404阅读 2,047评论 0 1
  • 原来国赛就是CISCN......buuoj上题目挺全的,干脆选一些比较有价值的题目复现下: Hack World...
    byc_404阅读 3,349评论 0 3
  • 考虑了下还是打算把laravel的链子跟一遍。看了下基本上就5.7,5.8两个版本的rce反序列化popchain...
    byc_404阅读 677评论 0 0
  • 之前说打算好好锻炼自己的代码审计能力。首先就还是得从php的开始。最近打算把CTF中出现的几个php常见框架的反序...
    byc_404阅读 1,025评论 0 0
  • 之前发简书的thinkphp-vuln系列直接被转自己可见把我搞怕了......这里试着发下tp5反序列化的pop...
    byc_404阅读 821评论 0 0