1.ErrorFlask
进入环境,叫传number1和number2参数,用get传一下
payload=/?number1=1&&number2=2
说不是SSTI,但是修改参数信息,发现渲染数字可控
传入字符报错
然后ctrl+f找到flag
2.Begin of HTTP
进入环境,照要求传递参数
payload=/?ctf=114514
然后叫我们用post请求继续传参数
然后又找到base64编码的参数值
解码后,secret=n3wst4rCTF2023g00000d
然后说什么power,没懂,可能是cookie或者referer 头,都修改一下
不知道为啥hackbar不行,burp抓包发一下吧
修改浏览器头
修改referer头
修改本地访问,X-Real-IP伪造
最后成功拿到flag
3.泄漏的秘密
进入环境,提示我们敏感信息
直接抓包
直接dirsearch开扫有没有泄露文件
发现www.zip
然后解压的robot.txt发现半个flag
然后index.php发现另外一半flag
拼接提交成功
4.Begin of Upload
上传文件,直接上传webshell,弹窗文件限制
直接先上传正常文件,抓包绕过前端限制
上传成功,返回文件路径
抓包上传一句话php木马成功
蚁剑连接成功,并拿到flag
5.Begin of PHP
进入环境,是代码,看来是代码审计
审计后逻辑:
php ==比较,哈希值0e开头即可绕过
①get请求传递key1和key2参数,参数不等但是md5值相等则 level 1 完成 key1=240610708,key2=QLTHNDT即可
②key3md5值和sha1加密相等,则level 2完成 key3先md5然后哈希的值和key3先sha1加密然后哈希值相同即可
但是这里是===,所以没办法通过0e弱绕过,可以通过都是数组的方式来尝试绕过
post请求key3[]=3
③file_get_contents函数是将文件内容变为字符串输出 strcmp函数是字符比较,但是输入其他类型时会出错从而绕过
key4[]=4
④可以继续用数组绕过,同时小知识,数组大小可以和数字比较。所以
key5[]=2024,要大于2023
⑤直接传递flag5值,然后还不能时数字,字母,然后if语句还为真
根据前面小知识可以知道(flag5[]=1)就是1,那么flag5[]=1
最后成功拿到flag
6.R!C!E!
依旧是代码审计
①POST传入password参数,md5值前六位为c4d038
②POST传入e_v.a.l参数,值可以作为命令执行,但会过滤一些命令
首先写脚本爆破md5值
脚本:
import hashlib
import itertools
def find_matching_number(target_part, start_pos, end_pos, max_digits):
for length in range(1, max_digits + 1):
# 生成所有可能的数字组合
for num_tuple in itertools.product('0123456789', repeat=length):
candidate = ''.join(num_tuple)
# 计算MD5哈希值
md5_hash = hashlib.md5(candidate.encode()).hexdigest()
# 提取指定位置的子串
hash_part = md5_hash[start_pos:end_pos + 1]
if hash_part == target_part:
print(f"找到匹配项!数字: {candidate}")
print(f"完整MD5: {md5_hash}")
return candidate
print("未找到匹配的数字。")
return None
if __name__ == "__main__":
target = input("请输入已知的MD5片段: ").lower()
start = int(input("请输入起始位置(0-31): "))
end = int(input("请输入结束位置(0-31): "))
max_length = int(input("请输入要爆破的最大数字长度: "))
result = find_matching_number(target, start, end, max_length)
最后得到值为114514
password=114514
然后看e_v.a.l参数,首先技巧:
` 命令`,里面的命令会优先执行,并作为输入继续执行
①tac可绕过对cat的限制,从后往前看
②\在命令中可无意义,绕过诸如flag的限制,fla\g=flag
③然后低版本php解析特性,会将变量第一个不合法字符修改再返回去,只修改一次
那么原来的e_v.a.l中,. 是第一个不合法字符,会被修改,不正确
那么我们将下划线变为第一个不合法字符就可以了
(不过这里我不知道为啥一定要用[,知道的师傅请告诉我)
④最后得到e[v.a.l=echo`tac /fla\g`;
最后得到flag
7.EasyLogin
进入环境,是一个登录框
尝试注册admin账号,发现已注册
抓取登陆包,传输密码是md5
尝试burp爆破sql注入
没成功,尝试先正常注册账号,进入看看
发现一个302跳转的响应包提示
根据提示发现是被骗了,既然sql注入不行,那就试试爆破密码吧
发现不同,md5解密一下,发现是000000
试着登录admin账号,抓取到302跳转包,发现flag
登陆成功会有终端,但其实没啥用
最后找到flag