0%

[GKCTF2021]babycat与XMLDecoder反序列化

java题,有一个非预期版本和一个完全体,由于我垃圾的java基础和审计水平,并没有发现非预期写的垃圾代码,都是按完全体思路去做的

题解

注册登录两个路由,注册点了之后会有一个not allowed的烟雾弹,但是其实页面存在且有js提示。但是我直接抓了个登录的包然后改路由到register上成功注册了
登录进去之后有两个主要功能,一个上传一个下载,上传要求用户权限admin,而下载是个任意文件下载。一开始并没有意识到这个是java题,还在想是不是nodejs或者python,但是后来看那个默认的图片下载目录穿越了两层目录才下下来,越想越不对劲,感觉可能是java。开始乱按,对java的工作路径和目录结构不是很熟悉,但还是成功摸到../../WEB-INF/web.xml,看到了各个类的路径
依次根据各类路径下载class文件,丢到Intellij中反编译。

admin登录

阅读全文 »

[FireshellCTF2020]web wp

buu重拳出击!这个比赛的题目都还挺有意思的,做完之后觉得学到了些什么
有一个是一分题之前做过了,这次的两个不是一分,不过因为其相似性还是很有意思

URL TO PDF

就一个功能点,给url返回这个url内容的PDF,稍微试了一下,功能并不是很完整,很多内容加载不出来就进行了截图。然后测了一下能不能直接ssrf之类的,协议貌似写死了http(s),所以直接file不行的,支持重定向,但是重定向也不能改协议到file啊。计划1不通

那么进行经典ssrf扫端口,但是我觉得不告诉你内网端口硬扫的题目也挺坑的(应该不会有人出这么脑瘫的东西),试了几个常用端口无果之后开始想其他办法

阅读全文 »

巅峰极客2021

这次的题四个web,但是抄原题的抄原题,套娃的套娃,并且感觉题目的重复程度好高。。。虽然垃圾的我做不出来,但是我还是觉得这次的题目没有那种让人眼前一亮或者学到东西的感觉。。。

ezjs

魔改自XNUCA2020 oooooooooldjs,加载图片的地方可以任意文件读取,读了源码加package.json,然后npm audit看一下,能发现是打的一个express-validator的原型链污染,污染完了就是一个pug的rce,pug的rce是复制粘贴就能打的那种,express-validator的原型链污染也是复制粘贴就能打的,但是改了一个地方,原来的题目用了express.json支持json数据解析,所以json直接提交一个对象就能打通,这里没有json解析了,但是没有认真去了解过这个库是怎么处理数据的,不知道怎么样的提交能实现之前同样的效果
一开始在想怎么伪造admin身份,也有可能是打那个session-file-store,但是那个需要获取到session key和能写文件,session-file-store的session也和phpsessionid有点像,前半截文件名,默认路径是./session,后半截是拿key算的签名保证不被伪造,因为前半截的文件名完全没有校验,甚至可以目录穿越去加载session文件,但是这里既读不到key也写不了文件,也不行

需要进行乱按来进行原型链污染,一开始没有意识到抄的payload里面的双引号是在转义json。。。所以抄payload的时候一直带着那个转义符,第二天复盘的时候突然意识到这一点,去掉之后瞬间打通。。。呜呜呜,污染完原型链之后就是复制粘贴打在开启pretty选项时pug的rce,纯复制粘贴题
非json解析下的原型链污染payload
a[__proto__][isadmin]=admin&a"].__proto__["isadmin=222

阅读全文 »

CyBRICS2021 wp

除了那个没太看懂怎么回事的0解题,剩下的题目都挺简单的,很适合我这种萌新去做

Ad Network

就是简单的跟随重定向就行了,跟1337次后得到flag但是他的服务器似乎有点土豆,所以直接写个脚本然后访问的话基本上重定向个一二十次就断了,浏览器访问当然是直接重定向过多,所以不跟重定向然后自己每次重新访问重定向的内容就行

import requests

url = "http://adnetwork-cybrics2021.ctf.su/adnetwork"
cnt = 0


while cnt <= 1337:
    try:
        response = requests.get(url, allow_redirects=False, timeout=2)
        cnt += 1
        if response.status_code > 300:
            print(response.headers['Location'])
            url = response.headers['Location']
        else:
            print(response.text)
    except Exception as e:
        print(e)

ans = "http://tend.adnetwork-cybrics2021.ctf.su/military-front-low/learn-fill-though-factor-line/hear-hundred-subject-wind/enough-lot-tree-will-color"
阅读全文 »

[CISCN2021]决赛

居然混到了国一,队友牛逼!可信计算牛逼!

day1

经典awd坐牢,对tp等大型PHP框架的审计一无所知的我只能坐牢,官方流量要延迟一小时,意味着awd只会上车的我被乱杀,一度被打到倒数前十。但其实web也能自力更生的抓流量,但这回因为未知的原因,祖传脚本未能抓到流量,经过长达一个小时的边挨打边修边研究,发现是祖传脚本默认把流量写入tmp目录,而不知为何tmp目录不能写造成的。
查看phpinfo,disable_fucntion禁用了system,exec等命令执行函数,让写入不死马的几率降低到最小,open_basedir并没有值,那么应该不会影响到写入tmp,查看tmp权限,经典777+t,那么也不会影响写入。最后,为什么写不了tmp成为了一个永远的未解之谜。
然后挨了一个小时打之后发现流量能写本地,然后就开始上车,但这个时候的垃圾洞已经被修的差不多了,捡垃圾也只能捡一点点分,成功进入倒数前十。

还是记录一下踩的坑吧。

阅读全文 »