目录
web380


目录扫描下
python dirsearch.py -u https://ac87a5ae-d960-4072-ab8f-0e74e1ac6342.challenge.ctf.show/
扫描出来了两个文件
/flag.php
/page.php
依次访问看一下

/flag.php 什么都没有,是 0b

访问/page.php,返回报错信息,缺少了 id 参数

随便给 id 传一个值
id=1
根据返回信息能够知道,他是将 1 的后面拼接了一个.php 后缀,然后说是在这个路径下没有找到 1.php,联想到前面目录扫描出来的 flag.php,这里传入 flag
file_get_contents(1.php)

页面空白,查看源码,得到 flag
https://ac87a5ae-d960-4072-ab8f-0e74e1ac6342.challenge.ctf.show/page.php?id=flag

$flag='ctfshow{f12b4295-9fde-4dcb-97a1-cae2718284d2}';

web381

和上一题一样的界面

先目录扫描下
python dirsearch.py -u https://ecdd8908-42e3-471f-b00a-d06e29b8b35d.challenge.ctf.show/
扫描出了
/page.php

访问/page.php
返回了:打开page_$id.php失败

查看页面源代码,这里有一个可疑路径,前面两个都是 layui 开头,但是最后一个却是 alsckdfy 开头
/alsckdfy/layui/css/tree.css
访问/alsckdfy ,就能够得到 flag 了

ctfshow{ce1f22ea-fcf8-46d7-906f-ea84ea13088f}

web382


查看页面源代码,和上一题一样,这个可疑路径
访问/alsckdfy

是一个登录框页面
https://c6f06760-decd-409c-a2a1-74f798044cf7.challenge.ctf.show/alsckdfy/

尝试弱口令
admin/123456
返回 error


对登录框进行爆破
用户名为 admin
密码是 admin888
ctfshow{1ac8dd9e-f932-4e21-a6f1-63d115c599d5}


另外一种方法
注入 sql 语句
用户名: admin 'or '1'='1'#
密码:1
得到 flag
它里面的代码应该是这样的:sql = "SELECT \* FROM users WHERE username = '_POST[u]' AND password = '$_POST[p]'";
将 admin 'or '1'='1'# 注入之后就会变成:SELECT * FROM users WHERE username = 'admin 'or '1'='1'#' AND password = '1'
#会把它后面的内容注释掉,最终语句就会变成:SELECT * FROM users WHERE username = 'admin 'or '1'='1',这个 SQL 语句的作用就会变成寻找 admin,或者 1=1,1=1 是肯定的,所以这个查询条件永远为真,他就会将数据库中第一行的所有数据查询出来,在绝大数的系统中,admin 都是系统初始化时创建的第一个超级管理员账户,所以这里是直接将 admin 的数据查询出来

ctfshow{1fee8024-c180-4115-9901-6e8dc61f537d}

web383


查看源代码,和上一题一样,还是有这个路径
访问/alsckdfy

是一个登录框,和上一题一样,
直接使用 admin/admin888 进行登录发现能够直接得到 flag

ctfshow{63250502-c020-4e12-9780-173ebf05732d}

使用另外一种方法,SQL 注入,一样能够得到 flag,和 web382 没有区别
admin 'or '1'='1'#
1

ctfshow{63250502-c020-4e12-9780-173ebf05732d}

web384

题目提示:密码前2位是小写字母,后三位是数字

还是这个可疑路径
访问/alsckdfy

https://9633d6f1-98e4-41ca-b7ae-d4b3793bf854.challenge.ctf.show/alsckdfy/
登录框
结合题目的提示,应该是对登录框进行爆破的

写一个脚本,将题目提示:密码前2位是小写字母,后三位是数字,的密码组合,全都例举出来

import itertools
import string
def generate_passwords():
# 定义字符集
letters = string.ascii_lowercase # a-z (26个小写字母)
digits = string.digits # 0-9 (10个数字)
# 输出的文件名
output_file = "password_combinations.txt"
print(f"开始生成密码,总计 676,000 种组合...")
# 使用 itertools.product 生成笛卡尔积
# 前2位是 letters,后3位是 digits
combinations = itertools.product(letters, letters, digits, digits, digits)
# 将结果写入文本文件
with open(output_file, "w", encoding="utf-8") as file:
for combo in combinations:
# 将元组拼成字符串,例如 ('a', 'a', '0', '0', '0') -> "aa000"
password = "".join(combo)
file.write(password + "\n")
print(f"生成完毕!所有组合已保存至:{output_file}")
if __name__ == "__main__":
generate_passwords()
最终生成的效果是这样的

输入 admin,Password
使用 bp 对登录框抓包
然后将抓取到的页面发送的 Intruder 模块中

使用狙击手模式,
添加 payload 位置,选取 密码 Password

到 payload 页面中,将生成好的密码本加载进去,然后开始攻击

爆破出来了
密码是:xy123
flag:ctfshow{0a48c115-b68f-4a4b-bf51-00b5d2b4c2a5}
