ByteCTF Web Writeup
前言
周末参加了ByteCTF2022,仅做出了3道题,题解如下。
总结自身不足:
需要用到前端利用时就不会了,XSS 和 CSRF 知识还需要补充
ctf_cloud
给了源码,可以直接审计
在route/user.js
中仅有 59行处存在注入点,其他的SQL语句执行点都是进行了预编译
28行判断登录 admin 所需条件。根据改条件,在执行insert
语句时可以插入多行数据,payload 如下
1 | {"username":"aaa","password":"aaa',0),('admin','123',1),('aaa','aaa"} |
接着看route/dashboard.js
文件
此处仅用到了两处路由,一个是往package.json
中添加依赖,一个是根据package.json
文件下载依赖
其中添加依赖请求内容如下,具体可以参考:package.json 中 npm 依赖包的写法 - 知乎 (zhihu.com)
1 | {"dependencies":{"flag":"file:/flag"}} |
然后再通过/dashboard/run
将 flag 文件下载至node_modules
中
根据其存放的位置是可以直接访问,下载即可获取flag
easy_grafana
根据题目描述和grafana
版本判断应该是CVE-2021-43798
任意文件读取的漏洞,但是实际利用时发现会存在 400,查看资料后发现这是由于nginx
反代所造成的,可以利用/#/../
方式进行绕过。
接着就可以任意读取文件
1 | 读取配置文件获取key |
然后使用工具对其数据存储文件进行解密获取flag
datamanager
注册一个账号进行登录,后台中发现可以添加任意数据源,此处添加两个数据源
访问/dashboard
路由时,发现存在order by
注入,大概如下
真
假
根据这个回显顺序可以构造脚本,不过这里还有很多过滤,比如:括号只能用两层,不能使用单双引号、逗号等,这个可以直接Fuzz
一下就知道了,脚本如下
1 | import requests |
然后使用ctf:ctf@BvteDaNceS3cRet
进行登录,这时候就可以查看/connection
路由
根据该路由的功能,很自然的就想到利用fake mysql server
读取任意文件,使用工具:https://github.com/fnmsd/MySQL_Fake_Server
不过该工具会出现字符集的问题,对其进行修改
72行本来是接收客户端发过来的字符集编号,这里直接写死使用UTF-8
就好了
然后就可以愉快的读取flag了
最后有一个小疑问:这里plugin_dir
与secure_file_priv
的位置是一致的,但是我并不能通过into dumpfile
将so
文件写入。如果有师傅知道的,请带带俺!!!