N1CTF-junior-2023
https://ctf.junior.nu1l.com/2023.html
只出了一题 orrs(卑微)
template 复现很简单,但是没有猜到弱密码是 root/root
ez_zudit 需要审计出一个 EL 表达式注入
can_u_bypass 执行 oracle sql 语句,需要实现 RCE
easyjpg 是一道 0day,和 HITCON2022 web2pdf 相似
orrs
有 sql 注入漏洞
然而题目要求 RCE
通过 sql 注入漏洞获取到如下信息(然而是没有用处的)
- database: orrs_db
- @@secure_file_priv: /var/lib/mysql-files/
- @@plugin_dir: /usr/lib/mysql/plugin/
- 表名: message_list,reservation_list,schedule_list,system_info,train_list,users
- 字段
- user: Host,User,Select_priv,Insert_priv,Update_priv,Delete_priv,Create_priv,Drop_priv,Reload_priv,Shutdown_priv,Process_priv,File_priv,Grant_priv,Refences_priv,Index_priv,Al
发现还有登录功能,于是通过 update 修改 admin 密码
1 | /classes/Users.php?f=save |
登录后 admin 可以在后端修改一些网页的参数,尝试替换 email title name address contact welcome.html about_us.html 这些信息,更改成 php 代码
发现会将 <?php
过滤成 <--?php
怎么也绕不过,而 welcome.html 和 about_us.html 这两个 html 文件也怎么都改不了,判断是无权限
看后端代码,没有规定只能修改 welcome.html 和 about_us.html,是根据传入的 content 参数来做修改的
1 | // classes/SystemSettings.php |
最后想了想,还有哪些 .html 后缀的文件可以修改的,尝试改了 404.html 发现可行,于是写入 php shell
1 | Content-Disposition: form-data; name="content[404]" |
secpunk{cve_is_als0_important}
ez_zudit
核心代码在下面这一段,需要实现 EL 表达式注入,从而 RCE
1 | ZhtmlExecuteContext context = new ZhtmlExecuteContext(ZhtmlManagerContext.getInstance(), null, null); |
比赛时候尝试通过不断的跟进代码,试图找到一些风险点
看了 ELParse 等等类,代码太多太复杂,不能让我很好的理清思路
赛后发现,可以调用的函数,项目中都已经放到了同一个目录下面 qqq.framework.expression.function
里面有一个 invoke 函数,所以 RCE 这不就来了嘛。直接 script="${invoke('','getClass')}"
,在 invoke 函数打断点开始调试分析
invoke 不断地动态调用,最后通过 javax.script.ScriptEngineManager
来实现 RCE
1 | new ScriptEngineManager().getEngineByExtension("js").eval("java.lang.Runtime.getRuntime().exec(\"calc\")"); |
template
提示了弱密码,但是弱密码是 root/root ······
我一直在爆破 admin 账户······
登录后是 thymeleaf ssti: https://www.anquanke.com/post/id/254519