ctfshow web入门 web11-web24
web11
web12
进来浏览网站,底部有一串数字,根据提示可能有用,访问robots.txt,发现禁止访问/admin/,进去看看发现需要输入用户名和密码,刚想爆破就猜对了,用户名是admin,密码是页面下的那串数字
web13
这道题有点懵,看了wp才误打误撞做出来,页面下方有一个document单词,点一下就会跳转到一个pdf,里面放着后台的登录地址和密码
web14
这道题耐心不够也没做出来,看了下wp,先根据提示加入editor(果然提示没有一个词是没用的),此时出现一个编辑器的页面,在上传文件选项里一直找找找,最后找到flag
web15
这道题蛮有意思,输入admin进入后台,让输入账号密码,还有一个忘记密码的选项,充值条件是输入作者所在的城市,联想到邮箱有一个qq号,顺藤摸瓜,找到西安,成功重置密码
web16
学到个新东西->php探针
- PHP探针(PHP Probe)是一种利用 PHP 编写的脚本工具,通常用于对服务器进行安全检测、信息收集和性能监控。PHP探针能够帮助系统管理员或黑客获取关于目标服务器的各种信息。它们可以通过浏览器访问并执行,展示服务器的环境、配置、文件系统等关键信息
进来后在phpinfo里找到flag
web17
进来用dirsearch扫一扫,发现backup.sql,下载打开得到flag
web18
也是见到了心心念念的游戏题,在控制台可以给变量赋值,使score=120,game_over=false,然后最关键的一步来了,执行run()函数,即可拿到提示
web19
其实已经可以看到判断逻辑了,输入的密码在经过AES加密后要等于p,那么将p反向解密即可得到密码
web20
不如说是dirsearch的教学,扫到db后加入db继续扫描,下载文件后开010编辑器找到flag
爆破
web21
刚开始接触爆破也是踩了不少坑,第一:一定要用题目给的字典,在网上找了一个10w+的字典都没爆出来,最后一看密码shark66·······
在构造需要编码的payload时有两种构造方法,我用的其实是运气好地一种,就是只构造一个,然后添加前缀admin:再添加base64
实际上正解应该是构造3个payload,为:单独构造一个,分别进行base64(分开还是合起来加密base64最后解的结果都是一样的),最后按照状态码升序排序即可拿到flag
web22
web23
分析代码,需要传入token并且token的MD5值满足两个条件才能打印flag,脚本让gpt写一个即可
import hashlib
def md5_hash(text):
"""计算字符串的 MD5 值并返回十六进制表示"""
return hashlib.md5(text.encode('utf-8')).hexdigest()
def check_conditions(token):
"""检查给定 token 是否满足条件"""
# 确保 substr(1,1) == substr(14,1) == substr(17,1)
if token[1] == token[14] and token[14] == token[17]:
# 确保条件 (intval(substr($token, 1, 1)) + intval(substr($token, 14, 1)) + intval(substr($token, 17, 1))) / intval(substr($token, 1, 1)) === intval(substr($token, 31, 1))
num1 = int(token[1], 16)
num14 = int(token[14], 16)
num17 = int(token[17], 16)
num31 = int(token[31], 16)
if (num1 + num14 + num17) / num1 == num31:
return True
return False
def find_valid_string():
"""寻找满足条件的字符串"""
for i in range(1000000):
test_str = str(i)
token = md5_hash(test_str)
if check_conditions(token):
print(f"Found valid string: {test_str}")
print(f"MD5 hash: {token}")
break
# 调用函数寻找有效字符串
find_valid_string()
爆出token是422,但是接下来就一直卡住了,我以为有一个flag.php的路径,于是尝试向其中传入token,后来看wp才发现直接在首页传入?token=422即可,甚至连字符的引号都不用加
记录一下看到的另一种解法,应该是web选手用的更多的一种方法,就是随意传一个token=1,再用bp抓包后爆破数字即可
web24
伪随机数的爆破(越来越感觉像crypto了),同样让deepseek写一个脚本
<?php
mt_srand(372619038); // 设置相同种子
$target = mt_rand(); // 生成随机数
echo "Payload: ?r=" . $target; // 输出可直接提交的 r 值
?>
之后用phpstudy打开网站即可看到结果,这一步折腾了半个小时,总算搞清楚php代码怎么运行了
- 后面的题目懒得做了,猜测无非bp抓包,无非进行一些crypto的爆破,后面有时间再回来做