湘岚杯web-misc-wp

misc

1.别呀啦(签到)

打开压缩包发现全是嵌套压缩包和些txt。直接随波逐流一把梭。

得到一堆txt。

翻到最后找到flag。

2.宇宙编史

开始一个伪加密压缩包,丢随波逐流一把梭了,打开得到一个txt。丢随波逐流提示有零宽隐写

丢厨子发现了隐写字符

在线零宽字符unicode文字隐写工具-BFW工具箱

本来用这个网站,失败了

所以换了一个网站,直接自动识别了

零宽文本加解密工具 - 翰络云工具

3.base64游戏

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)

解密发现有一个加密压缩包,一眼明文攻击

使用ARCHPR明文攻击爆破压缩包-优快云博客

压缩包明文攻击 - 梦见雨 - 博客园

所以我们再利用那个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题详细讲了。

web 40-50-wp-优快云博客

总结就是:让所有输出流都重定向到空设备文件中丢弃掉,所以关键就是不能让后面这个重定向执行下去就行。;可以截断命令。

?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跑

sqlmap实战教程-优快云博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值