有幸给第二届SJTU-CTF出题,pwn太变态了还是misc和web好对吧23333

Web

web题出了一条250分和一条500分的。

upload lab(250)

这条题目是SUCTF改的,有兴趣的可以看看SUCTF 2019 Web-Checkin,这条其实也是国赛华东北赛区的改题,把.htaccess改成了.user.ini,而后者并不像前者那么有名…(一个改一个23333)。当时做的心态爆炸心想连CheckIn都不会直接自闭,后来突然想到有这么个文件会不会可以,面向谷歌做题才出来。

如果直接放的话估计放了hint大家都能秒了……所以改了一下加强了条件:

  • 内容不能包含<(之前是<?,大部分wp都是通过<script>绕过的)
  • 内容不能包含空格和分号,杜绝其他乱七八糟的东西……

只有少数wp是通过auto_prepend_filephp://filter解码base64组合附加文件getshell的,能找到也是可以……

P.S. 出题的时候发现php7似乎不能把filter放auto_prepend_file里了,懒得找原因换5.6了..
P.S.S. 看到非预期解直接读/flag,应该换个不能猜的名字的……

book store(500)

前后端用lab改的: https://github.com/MXWXZ/Web_HW

取材自真实渗透

这里主要就是绕druid的wall过滤,可以参考那篇文章中的绕过方法。很多人想着如何去伪造JWT,然而JJWT的未知操作似乎加盐了导致不能直接伪造……少年没看到flag的那个xml的注释么……就是提示你是sqli啊,你就是进去admin也没用啊……

这题正解应该是通过.git泄漏拿到源码,本地搭环境,了解一下mybatis和druid(有同学发现可以改设置开启druid的web界面看到拦截信息很不错,或者注释掉BookController中的try-catch这样可以看到报错)绕过滤最后用union注入+爆破数字就行了。

P.S. 有源码知道字段名注入还是比较简单的……主要是druid过滤了information_schema拿不到名字不好搞(不过听说旧版本有CVE emmmm这样就能不给源码不过估计没人搞得出来……

Misc

misc出了4条,主要是让大家熟悉下工具的使用所以不是很难……基本跟着网上走就行了……也都留了线索不算脑洞吧。

anti-hack01(200)

内存镜像,跟着这个走就行了:https://segmentfault.com/a/1190000018813033

主要是分辨率的宽度,其实就是屏幕宽度1920就可以了……最后flag要反转一下就能看到了。

anti-hack10(250)

ext4文件修复,有个工具叫fsck,因为它的修复能力太牛逼了不改一下就是送分……所以我把magic number反转了一下,除了第一个block其他的校验码都改成00,这样工具就不能通过备份块自动还原了。

superblock在0x400,备份块位置是0x8000000,0x18000000,0x28000000…找两个比对一下就能看出来了抹掉了两段值,手修一下,改下magic number就可以了,修完了用fsck.ext4就能自动修复全部镜像了。

载入后可以暴力grep -r或者看home目录下的.bash_history发现vim /etc/flag,但是那里是没有这个文件的,这里利用了vim的swp自动保存机制strings一下swp文件就能找到base64后的flag了。

P.S. 这题上线前flag其实是没有base64的,然后发现strings直接就能拿了还好发现了改了。

anti-hack11(300)

这东西改的,增加难度故意让它粘连字符出错嘿嘿(似乎某个插件还是没挡住……

这题解法很多,标准做法就是用给的split函数炼丹,或者不用也有可以pass的例子,当然没想到还有现成的浏览器插件可以抄作业……是容错设置太高了嘛……当然还有搜索能力强的同学找到了我这篇文章然后把已经make private的仓库的唯一一个fork搜出来了,能搜出来也是本事对吧。

P.S. 这题原本是400分后来验题觉得有抄作业的可能就降了点分……给大家玩一玩。

dog(400)

主要是一堆关于压缩包的常见隐写(顺便虐狗23333

第一层其实没有密码,否则你看二进制就不会看到假flag的明文了对不对,手改加密位或者用工具弄到就行。第二层最后附加了一个base32的字符串(原本是base64觉得太简单了……其实base16更残暴没特征),然后用cat合并文件,接下来是图片隐写。

binwalk弄出压缩包,根据图片提示where am i找到exif信息(注意这里要拿GPS的源数据否则转换会有精度误差),根据右上角提示组装成密码就行,最后就是考验耐心的了,爆破一个8位纯数字密码就ok了(原本是9位ETA 12小时验题觉得太残暴了改成8位了)。

不过因为降了好几次难度似乎做出来的人有点多……也可能是我hint给多了/摊手

总结

最后还是感谢大家来玩我们的CTF(拿钱),出题其实也不容易docker相关环境配了半天……

CTF for fun but not for money.