misc
1.别呀啦(签到)
打开压缩包发现全是嵌套压缩包和些txt。直接随波逐流一把梭。
得到一堆txt。
翻到最后找到flag。
2.宇宙编史
开始一个伪加密压缩包,丢随波逐流一把梭了,打开得到一个txt。丢随波逐流提示有零宽隐写
、
丢厨子发现了隐写字符
本来用这个网站,失败了
所以换了一个网站,直接自动识别了
3.base64游戏
base64编码的换表其实是将base64所以对应的字母换了位置,将标准base64码表解码后再用自定义码表编码就可以得到自定义码表(可以看看上面文章,也可以问ai)
import base64 # 导入 base64 模块,用于 Base64 编码和解码
from pwn import * # 导入 pwntools 库,用于与远程服务器交互
# 定义一个标准的 Base64 字母表,包含 64 个字符(A-Z, a-z, 0-9, '+', '/')
encoded_str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
# 使用 base64.b64decode 对 encoded_str 进行解码
# 由于 encoded_str 是一个标准的 Base64 字母表,解码后的结果可能没有实际意义(通常是乱码)
decoded_bytes = base64.b64decode(encoded_str)
# 打印解码后的字节数据
print(decoded_bytes)
# 使用 pwntools 的 remote 函数连接到远程服务器 xlctf.huhstsec.top 的 21559 端口
io = remote("xlctf.huhstsec.top", 21559)
# 等待服务器发送 'encode:' 提示后,将解码后的字节数据 decoded_bytes 发送给服务器
# sendlineafter 会在发送数据后自动添加换行符(\n)
io.sendlineafter(b'encode:', decoded_bytes)
# 等待服务器返回 'Encode: ' 提示
io.recvuntil(b'Encode: ')
# 进入交互模式,允许用户手动与服务器进行交互
io.interactive()
参考湘岚杯2025 Writeup – G3rling's Blog
4.银河救援SOS!
对照银河字母表有SUPERALIEN(superalien)
解密发现有一个加密压缩包,一眼明文攻击
所以我们再利用那个txt文件创一个压缩包,注意要用7z(开始用banzip不行),因为压缩算法要一样 下载链接https://www.7-zip.org/
之后就放加密压缩包与构建的压缩包就好了,找到密钥就行。
然后点击确定,就会保存解密的压缩包。当然有些需要找到口令
在图片中发现了经纬度
所以思路就是按顺序提取每张图片的经纬度做点,然后按点顺序依次连线。
import os
from PIL import Image
from PIL.ExifTags import TAGS
import matplotlib.pyplot as plt
def dms_to_decimal(degrees, minutes, seconds):
return degrees + (minutes / 60) + (seconds / 3600)
x = []
y = []
for i in range(0, 81):
# 使用 f-string 格式化文件路径
file_name = f"D:\\网安题文件\\银河救援SOS!\\外星人留下的压缩包\\地球轨迹_decrypted\\地球轨迹\\{i}.jpg"
if os.path.exists(file_name):
print(f"EXIF {file_name}")
image = Image.open(file_name)
exif_data = image._getexif()
if exif_data is not None:
for tag, value in exif_data.items():
tag_name = TAGS.get(tag, tag)
if tag_name == "GPSInfo": # 检查是否为 GPS 信息
print(f"GPSInfo: {value}")
# 提取经纬度(度分秒格式)
x_dms_coordinate = (value[2][0], value[2][1], value[2][2])
y_dms_coordinate = (value[4][0], value[4][1], value[4][2])
# 将度分秒转换为十进制
x_decimal_coordinate = dms_to_decimal(*x_dms_coordinate)
y_decimal_coordinate = dms_to_decimal(*y_dms_coordinate)
# 添加到坐标列表
x.append(x_decimal_coordinate)
y.append(y_decimal_coordinate)
print(f'Processed {file_name}: Latitude (x) = {x_decimal_coordinate}, Longitude (y) = {y_decimal_coordinate}')
else:
print(f"No EXIF data found in {file_name}")
print("=" * 100)
else:
print(f"{file_name} does not exist")
print("=" * 100)
# 输出最终的坐标列表
print("X list (Latitude):", x)
print("Y list (Longitude):", y)
# 检查是否有有效坐标
if not x or not y:
print("No valid coordinates to plot.")
else:
# 绘制散点图并连线
plt.scatter(y, x, color="blue")
for i in range(len(x) - 1):
plt.annotate("", xy=(y[i + 1], x[i + 1]), xytext=(y[i], x[i]),
arrowprops=dict(arrowstyle="-", color="red", lw=2))
plt.xlabel('Longitude (y)')
plt.ylabel('Latitude (x)')
plt.title("GPS Coordinates from Images")
plt.grid(True)
plt.show()
flag{UHATCANITALK}
web
1.大道轮回
这里就2关,第一关满足这个。
这个只能写脚本爆破试试。直接ai写。
import hashlib
def find_value_with_hash_prefix(prefix):
target_prefix = prefix.lower()
x = 0
while True:
# 将x转换为字符串并计算其哈希值
x_str = str(x)
hash_object = hashlib.sha256(x_str.encode())
hash_hex = hash_object.hexdigest()
# 检查哈希值的前6位是否匹配目标前缀
if hash_hex[:6] == target_prefix:
print(f"找到匹配的值: {x_str}")
print(f"对应的哈希值: {hash_hex}")
break
x += 1
# 设置目标哈希值的前6位
target_prefix = "647d99"
find_value_with_hash_prefix(target_prefix)
第二关
这里过滤没过滤掉,题目应该是少了一个非。主要是/dev/null/ 2>%1怎么办,这个ctfshow42题详细讲了。
总结就是:让所有输出流都重定向到空设备文件中丢弃掉,所以关键就是不能让后面这个重定向执行下去就行。;可以截断命令。
?sha256=3084863&ls;
2.关关难过关关过
先分析
这是一个弱比较,找到0e开头的就好了。
PHP—MD5和sha1绕过_php字符串弱不等,sha1强相等-优快云博客
?one=10932435112&two=240610708
然后考一个md5爆破。
用hashcat爆破。
hashcat 暴力破解详细教程(附常见案例) | lololowe的博客
先爆破一下。
hashcat -a 3 -m 0 19cb79e80ab6d5400950c392d077cc1c ?d?d?d?d7894?d?d?d
然后查看
hashcat -m 0 19cb79e80ab6d5400950c392d077cc1c --show
所以有
one=10932435112&two=240610708&14_12_45=65417894321
拿到下一关路由。
这里其实就是要猜全是数字不然根本爆破不出。(这里写代码爆破应该也行)
parse_str($_SERVER['QUERY_STRING'])这个解析 URL 中的查询字符串,并将其转换为变量。例如,?pass=123
会生成变量 $pass = '123'
。所以直接复赋值给key。
没过滤\,直接
3.ctfer平台(
先随便注册一个账户登进(本来想admin登入,发现已注册)
我用的账户是user,发现一个数据包,可能会伪造admin
发现果然是。而且多出来一个路由
之后是反弹shell与cp提权。(环境关了,没去复现了)
冷暴力
最后一道是时间盲注,直接用sqlmap跑