比赛地址:阴间CTF 2025
比赛时间:4 Apr 2025 14:44 CST - 6 Apr 2025 14:44 CST
Misc
阴曹地府税务总局
Challenge
近年来,阴曹地府面临财政赤字,阎王爷特批成立了”阴曹地府税务总局”,专门对阳间烧给亡灵的冥币收税。然而,由于地府税务系统采用了一套基于Python随机数的税率波动算法,导致税率每时每刻都在变化,甚至有时会出现”零税率”的情况。
作为一名资深会计师,你在阳寿未尽时不慎掉入阴曹地府。为了回到阳间,你需要向地府税务总局贿赂足够的冥币,获取一张特殊通行证。但你需要预测税率波动,在低税率或零税率时交易,才能最大化你的有限资产。
hint: python
Solution
“基于Python随机数的税率波动算法”那多半就是 random 库了
“每时每刻都在变化”说明随机数的种子是时间戳
手动玩一遍发现服务器会在一开始就先给出10个税率,那么我就可以枚举近期的时间戳,然后通过对比找到正确的时间戳,进而推测出未来的税率,代码如下
import randomfrom datetime import datetime, timezoneimport re # 提取税率rate_string = """第1轮交易税率: 92%第2轮交易税率: 13%第3轮交易税率: 87%第4轮交易税率: 78%第5轮交易税率: 71%第6轮交易税率: 1%第7轮交易税率: 16%第8轮交易税率: 11%第9轮交易税率: 27%第10轮交易税率: 82%"""pattern = r"第\d+轮交易税率:\s*(\d+)%"matches = re.findall(pattern, rate_string)history_rates = [int(rate) for rate in matches] # 获取当前 GMT 时间戳gmt_timestamp = int(datetime.now(timezone.utc).timestamp())found_timestamp = Nonefor offset in range(-3600, 3601): # 枚举时间戳范围±1小时 timestamp = gmt_timestamp + offset # 枚举初始交易轮次(5到15轮) for initial_rounds in range(5, 16): # 初始化随机数生成器 random.seed(timestamp) # 跳过初始交易轮次 for _ in range(initial_rounds): random.randint(0, 99) # 生成前 10 轮税率 generated_rates = [random.randint(0, 99) for _ in range(10)] # 检查是否匹配历史数据 if generated_rates == history_rates: found_timestamp = timestamp print(f"找到正确的时间戳: {timestamp}") print(f"初始交易轮次为: {initial_rounds}") break if found_timestamp is not None: break # 如果找到正确的时间戳,继续预测下一轮税率if found_timestamp is not None: random.seed(found_timestamp) # 跳过初始交易轮次 for _ in range(initial_rounds): random.randint(0, 99) # 跳过已知的 10 轮历史数据 for _ in range(10): random.randint(0, 99) # 预测未来 100 轮税率 future_rates = [random.randint(0, 99) for _ in range(100)] print("未来 100 轮税率为:") print(future_rates)else: print("未找到匹配的时间戳")运行得到以下输出
找到正确的时间戳: 1743752564初始交易轮次为: 13未来 100 轮税率为:[2, 39, 30, 52, 47, 19, 84, 91, 4, 15, 60, 21, 5, 89, 76, 58, 15, 18, 92, 83, 61, 54, 49, 20, 35, 2, 42, 37, 33, 19, 84, 55, 70, 90, 80, 6, 40, 1, 50, 69, 10, 54, 98, 18, 52, 97, 99, 28, 41, 65, 86, 80, 53, 25, 9, 41, 44, 59, 21, 15, 66, 66, 51, 54, 64, 39, 34, 47, 37, 74, 42, 51, 44, 87, 66, 6, 20, 25, 19, 9, 93, 39, 12, 65, 12, 20, 27, 56, 81, 47, 76, 69, 56, 90, 65, 25, 37, 39, 27, 70]根据上面的输出手动进行交易即可(懒得写代码了,反正手动也不复杂)
ncat nc1.ctfplus.cn 13343▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▓████████▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▓██▓▒▒▒▒▒▒▒▓███▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒███▒▒▒▒▒▒▒▒▒▒▒▒▒██▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▓█▒▒▒▒▒▓▓██████████▓▓▒▒▒█▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█▓▒▒▓███▓▒▒▒▒▒▒▒▒▒▓███▓▒▓█▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█▒▒██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██▒▒█▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█▒▓█▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▓█▓▒█▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█▒█▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▓█▒▒█▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█▒█▒▒▒▒▓▓▓▓▓▓▓▓▓▓▓▓▒▒▒▒▒█▒▒█▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█▒█▒▒▓█████████████▓▒▒▒█▒▒█▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█▒█▒▒▓█████████████▓▒▒▒█▒▒█▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█▒█▒▒▒▓▓▓▓▓▓▓▓▓▓▓▓▓▒▒▒▒█▒▒█▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█▒▓█▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▓█▒▒█▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█▒▒██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██▒▒█▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒█▒▒███▓▒▒▒▒▒▒▒▒▒▒▓███▒▒█▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▓█▒▒▒▓██████████▓▓▒▒▒▒█▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒███▒▒▒▒▒▒▒▒▒▒▒▒███▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▓███▓▒▒▒▒▒▒▓███▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▓████████▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒ 阴曹地府税务总局 - 冥币税率查询系统 今日公告:2025年04月04日 进行烧纸交易需支付的税率会不断波动(0-99%) 预测准确可节省大量冥币,贿赂通行证需要10000冥币 税务总局提醒您:偷税漏税(预测税率)是违法行为...「税务局柜台工作人员抬头」:欢迎来到阴曹地府税务总局。「工作人员查看资料」:系统显示您目前持有 2000 冥币。「工作人员推了推眼镜」:我们这里的税率每时每刻都在变化,交易时会自动征税。「工作人员压低声音」:据说有些前世是会计师的鬼魂能预测税率走势...「工作人员左右张望后靠近窗口」:嘿,想获得点内部消息吗?价格公道,只要1000冥币...要贿赂工作人员吗?(y/n): n「工作人员面无表情」:随您便,祝您好运...【税率历史数据】「工作人员翻开记录本」:以下是最近十轮交易的税率记录,仅供参考...第1轮交易税率: 92%第2轮交易税率: 13%第3轮交易税率: 87%第4轮交易税率: 78%第5轮交易税率: 71%第6轮交易税率: 1%第7轮交易税率: 16%第8轮交易税率: 11%第9轮交易税率: 27%第10轮交易税率: 82%「工作人员合上记录本」:税率参考数据已经给您了。「工作人员解释道」:每轮交易,您可以烧1000冥币,但会根据当时的税率扣除部分作为税款。「工作人员指向价目表」:如果税率是50%,您烧1000冥币,实际只有500冥币到达亡灵手中。「工作人员眨眨眼」:偶尔税率为0时,您的冥币将完全不被课税。「工作人员提醒」:贿赂地府通行证需要10000冥币,您需要多轮交易才能积累足够的资金。==== 第1轮交易 ====当前冥币: 2000要进行烧纸交易吗?(y/n): y您预测的当前税率是(0-99%): 2「系统显示」:当前税率为: 2%「工作人员震惊」:您的预测非常准确!系统奖励您额外 500 冥币!「工作人员小声嘀咕」:这家伙难道是税务师转世?当前冥币余额: 2500==== 第2轮交易 ====当前冥币: 2500要进行烧纸交易吗?(y/n): 39「工作人员点头」:谨慎是明智的选择。下轮再来吧!==== 第3轮交易 ====当前冥币: 2500要进行烧纸交易吗?(y/n): y您预测的当前税率是(0-99%): 30「系统显示」:当前税率为: 30%「工作人员震惊」:您的预测非常准确!系统奖励您额外 500 冥币!「工作人员小声嘀咕」:这家伙难道是税务师转世?当前冥币余额: 3000==== 第4轮交易 ====当前冥币: 3000要进行烧纸交易吗?(y/n): y您预测的当前税率是(0-99%): 52「系统显示」:当前税率为: 52%「工作人员震惊」:您的预测非常准确!系统奖励您额外 500 冥币!「工作人员小声嘀咕」:这家伙难道是税务师转世?当前冥币余额: 3500==== 第5轮交易 ====当前冥币: 3500要进行烧纸交易吗?(y/n): y您预测的当前税率是(0-99%): 47「系统显示」:当前税率为: 47%「工作人员震惊」:您的预测非常准确!系统奖励您额外 500 冥币!「工作人员小声嘀咕」:这家伙难道是税务师转世?当前冥币余额: 4000==== 第6轮交易 ====当前冥币: 4000要进行烧纸交易吗?(y/n): y您预测的当前税率是(0-99%): 19「系统显示」:当前税率为: 19%「工作人员震惊」:您的预测非常准确!系统奖励您额外 500 冥币!「工作人员小声嘀咕」:这家伙难道是税务师转世?当前冥币余额: 4500==== 第7轮交易 ====当前冥币: 4500要进行烧纸交易吗?(y/n): y您预测的当前税率是(0-99%): 84「系统显示」:当前税率为: 84%「工作人员震惊」:您的预测非常准确!系统奖励您额外 500 冥币!「工作人员小声嘀咕」:这家伙难道是税务师转世?当前冥币余额: 5000==== 第8轮交易 ====当前冥币: 5000要进行烧纸交易吗?(y/n): y您预测的当前税率是(0-99%): 91「系统显示」:当前税率为: 91%「工作人员震惊」:您的预测非常准确!系统奖励您额外 500 冥币!「工作人员小声嘀咕」:这家伙难道是税务师转世?当前冥币余额: 5500==== 第9轮交易 ====当前冥币: 5500要进行烧纸交易吗?(y/n): y您预测的当前税率是(0-99%): 4「系统显示」:当前税率为: 4%「工作人员震惊」:您的预测非常准确!系统奖励您额外 500 冥币!「工作人员小声嘀咕」:这家伙难道是税务师转世?当前冥币余额: 6000==== 第10轮交易 ====当前冥币: 6000要进行烧纸交易吗?(y/n): y您预测的当前税率是(0-99%): 15「系统显示」:当前税率为: 15%「工作人员震惊」:您的预测非常准确!系统奖励您额外 500 冥币!「工作人员小声嘀咕」:这家伙难道是税务师转世?当前冥币余额: 6500==== 第11轮交易 ====当前冥币: 6500要进行烧纸交易吗?(y/n): y您预测的当前税率是(0-99%): 60「系统显示」:当前税率为: 60%「工作人员震惊」:您的预测非常准确!系统奖励您额外 500 冥币!「工作人员小声嘀咕」:这家伙难道是税务师转世?当前冥币余额: 7000==== 第12轮交易 ====当前冥币: 7000要进行烧纸交易吗?(y/n): y您预测的当前税率是(0-99%): 21「系统显示」:当前税率为: 21%「工作人员震惊」:您的预测非常准确!系统奖励您额外 500 冥币!「工作人员小声嘀咕」:这家伙难道是税务师转世?当前冥币余额: 7500==== 第13轮交易 ====当前冥币: 7500要进行烧纸交易吗?(y/n): y您预测的当前税率是(0-99%): 5「系统显示」:当前税率为: 5%「工作人员震惊」:您的预测非常准确!系统奖励您额外 500 冥币!「工作人员小声嘀咕」:这家伙难道是税务师转世?当前冥币余额: 8000==== 第14轮交易 ====当前冥币: 8000要进行烧纸交易吗?(y/n): y您预测的当前税率是(0-99%): 89「系统显示」:当前税率为: 89%「工作人员震惊」:您的预测非常准确!系统奖励您额外 500 冥币!「工作人员小声嘀咕」:这家伙难道是税务师转世?当前冥币余额: 8500==== 第15轮交易 ====当前冥币: 8500要进行烧纸交易吗?(y/n): y您预测的当前税率是(0-99%): 76「系统显示」:当前税率为: 76%「工作人员震惊」:您的预测非常准确!系统奖励您额外 500 冥币!「工作人员小声嘀咕」:这家伙难道是税务师转世?当前冥币余额: 9000==== 第16轮交易 ====当前冥币: 9000要进行烧纸交易吗?(y/n): y您预测的当前税率是(0-99%): 58「系统显示」:当前税率为: 58%「工作人员震惊」:您的预测非常准确!系统奖励您额外 500 冥币!「工作人员小声嘀咕」:这家伙难道是税务师转世?当前冥币余额: 9500==== 第17轮交易 ====当前冥币: 9500要进行烧纸交易吗?(y/n): y您预测的当前税率是(0-99%): 15「系统显示」:当前税率为: 15%「工作人员震惊」:您的预测非常准确!系统奖励您额外 500 冥币!「工作人员小声嘀咕」:这家伙难道是税务师转世?当前冥币余额: 10000「工作人员震惊地看着账本」:天啊!您已经积累了超过10000冥币!「工作人员左右张望」:嘘...小声点...这是您要的通行证。「工作人员从抽屉里拿出一张金色通行证」:凭此证可自由往返阴阳两界,无需再交税!「通行证背面刻着小字」:geesec{M4st3r_0f_T4x_Ev4s10n_4nd_R4nd0m_Pr3d1ct10n}「工作人员迅速关上窗口」:我们从未见过,您从未来过...
geesec{M4st3r_0f_T4x_Ev4s10n_4nd_R4nd0m_Pr3d1ct10n}Web
生死簿查阅系统
Challenge
传闻,阎王爷座下有一本神秘典籍,记载天下众生命数。为追逐数字化潮流,阴曹地府上线了”生死簿查阅系统”。然,此系统乃鬼斧神工,诡谲难测,唯有精通阴阳之道的黑客才能窥其奥秘。听说有位技术鬼才曾潜入系统,但被抓去做了拔舌地狱的测试员…
你,可敢一试?
HINT第一层:YIN-HOUR:丑时三刻
HINT2: 阴~阳~两~界,生~死~轮~回,六~道~往~返,我~自~逍~遥 需要移除~ 转换为 阴阳两界,生死轮回,六道往返,我自逍遥
Solution

第一次拿到1血(可惜不是misc题)
虽然这题被放在了Web,但我觉得把它归到Misc

首先打开容器地址,根据题目引导要修改HTTP头,但是要怎么修改还不是很清楚(至少我做的时候是不清楚的,我这层过了才出提示呜呜呜),所以就写个脚本挨个试
import requestsfrom urllib.parse import quote url = "http://80-57511269-f6eb-4870-8838-fcf6e2d9fb91.challenge.ctfplus.cn/" time_formats = [ "1743682800", "2025-04-04T03:00:00Z", "2025-04-04 03:00:00", quote("丑时三刻"), "+3 hours",] field_names = [ "HTTP_YIN_HOUR", "X-Timestamp", "Custom-Time", "Date", "Yin-Hour"] for field in field_names: for time_format in time_formats: headers = { "Host": "80-57511269-f6eb-4870-8838-fcf6e2d9fb91.challenge.ctfplus.cn", field: time_format } response = requests.get(url, headers=headers) print(f"Field: {field}, Time Format: {time_format}") print(response.text) print("-" * 50) if "geesec" in response.text: print("Success!") break此时的我还没有意识到问题的严重性,竟妄想在第一层就拿到flag
不过运气还算不错,其中有一条被我撞对了,摸到了第二层的门槛

根据这条线索立马更新脚本
import requestsfrom urllib.parse import quote url = "http://80-57511269-f6eb-4870-8838-fcf6e2d9fb91.challenge.ctfplus.cn/" headers = { "Host": "80-57511269-f6eb-4870-8838-fcf6e2d9fb91.challenge.ctfplus.cn", "Yin-Hour": quote("丑时三刻"),} post_response = requests.get(url, headers=headers) print(post_response.text)又根据提示可以知道要新增两个header,按要求写就好了
import requestsfrom urllib.parse import quote url = "http://80-57511269-f6eb-4870-8838-fcf6e2d9fb91.challenge.ctfplus.cn/" headers = { "Host": "80-57511269-f6eb-4870-8838-fcf6e2d9fb91.challenge.ctfplus.cn", "Yin-Hour": quote("丑时三刻"), "Ming-Wang-Token": quote("玄冥鬼神,听吾号令"), "Hell-Dimension": quote("第十八层"),} post_response = requests.get(url, headers=headers) print(post_response.text)
此时得到了新的提示,这里考察的是 PHP 中的 MD5 弱比较绕过,在MD5 绕过第一式:弱比较绕过这篇博客可以找到符合条件的值0e215962017,把这个参数传上去就好了
import requestsfrom urllib.parse import quote url = "http://80-57511269-f6eb-4870-8838-fcf6e2d9fb91.challenge.ctfplus.cn/" headers = { "Host": "80-57511269-f6eb-4870-8838-fcf6e2d9fb91.challenge.ctfplus.cn", "Yin-Hour": quote("丑时三刻"), "Ming-Wang-Token": quote("玄冥鬼神,听吾号令"), "Hell-Dimension": quote("第十八层"),} params = { "c": "0e215962017",} post_response = requests.get(url, headers=headers, params=params) print(post_response.text)
根据提示加一个鬼门关参数就好了,随便填什么那就不填(懒)
import requestsfrom urllib.parse import quote url = "http://80-57511269-f6eb-4870-8838-fcf6e2d9fb91.challenge.ctfplus.cn/" headers = { "Host": "80-57511269-f6eb-4870-8838-fcf6e2d9fb91.challenge.ctfplus.cn", "Yin-Hour": quote("丑时三刻"), "Ming-Wang-Token": quote("玄冥鬼神,听吾号令"), "Hell-Dimension": quote("第十八层"),} params = { "c": "0e215962017", "鬼门关": "",} post_response = requests.get(url, headers=headers, params=params) print(post_response.text)
根据前面的经验(需要添加的参数都会被出题人用·给围起来,就比如说前面的·鬼门关·和这里的·八卦·),所以就先新增一个参数八卦

其实我也不知道要填什么,想着先这么写了,要是有什么要算的后面再说,没想到竟然就这么过了(后来在群里看到有的师傅在提算卦这件事真的觉得挺搞笑的)
那么还是按照这个规律增加 阴历 和 转生术 这两个参数
import requestsfrom urllib.parse import quote url = "http://80-57511269-f6eb-4870-8838-fcf6e2d9fb91.challenge.ctfplus.cn/" headers = { "Host": "80-57511269-f6eb-4870-8838-fcf6e2d9fb91.challenge.ctfplus.cn", "Yin-Hour": quote("丑时三刻"), "Ming-Wang-Token": quote("玄冥鬼神,听吾号令"), "Hell-Dimension": quote("第十八层"),} params = { "c": "0e215962017", "鬼门关": "", "八卦": "", "阴历": "", "转生术": "",} post_response = requests.get(url, headers=headers, params=params) print(post_response.text)
根据提示把 甲子年正月初一 填到 阴历

根据提示填写符合格式要求的六位数字

再根据提示把数字改为 000004
import requestsfrom urllib.parse import quote url = "http://80-57511269-f6eb-4870-8838-fcf6e2d9fb91.challenge.ctfplus.cn/" headers = { "Host": "80-57511269-f6eb-4870-8838-fcf6e2d9fb91.challenge.ctfplus.cn", "Yin-Hour": quote("丑时三刻"), "Ming-Wang-Token": quote("玄冥鬼神,听吾号令"), "Hell-Dimension": quote("第十八层"),} params = { "c": "0e215962017", "鬼门关": "", "八卦": "", "阴历": "甲子年正月初一", "转生术": "000004",} post_response = requests.get(url, headers=headers, params=params) print(post_response.text)
curl 的 -d 参数其实就是使用 POST 方法
在这里就是把请求方法从 GET 改成 POST ,然后请求体填入提示给的咒语
这里我不得不吐槽一下了
这玩意儿疑似鬼魂作祟,要把 ~去掉

这一点后来新增了提示,因此请求体就是 阴阳两界,生死轮回,六道往返,我自逍遥
import requestsfrom urllib.parse import quote url = "http://80-57511269-f6eb-4870-8838-fcf6e2d9fb91.challenge.ctfplus.cn/" headers = { "Host": "80-57511269-f6eb-4870-8838-fcf6e2d9fb91.challenge.ctfplus.cn", "Yin-Hour": quote("丑时三刻"), "Ming-Wang-Token": quote("玄冥鬼神,听吾号令"), "Hell-Dimension": quote("第十八层"),} params = { "c": "0e215962017", "鬼门关": "", "八卦": "", "阴历": "甲子年正月初一", "转生术": "000004",} data = "阴阳两界,生死轮回,六道往返,我自逍遥" post_response = requests.post(url, headers=headers, params=params, data=data) print(post_response.text)
根据提示新增参数 密码,不传东西就把答案告诉我了 029755

import requestsfrom urllib.parse import quote url = "http://80-57511269-f6eb-4870-8838-fcf6e2d9fb91.challenge.ctfplus.cn/" headers = { "Host": "80-57511269-f6eb-4870-8838-fcf6e2d9fb91.challenge.ctfplus.cn", "Yin-Hour": quote("丑时三刻"), "Ming-Wang-Token": quote("玄冥鬼神,听吾号令"), "Hell-Dimension": quote("第十八层"),} params = { "c": "0e215962017", "鬼门关": "", "八卦": "", "阴历": "甲子年正月初一", "转生术": "000004", "密码": "029755",} data = "阴阳两界,生死轮回,六道往返,我自逍遥" post_response = requests.post(url, headers=headers, params=params, data=data) print(post_response.text)
用的是脚本看到的本身就是网页源代码
这次是新增参数 真解 和 查阅

这里前面说我 持有的'真解'不正确 ,后面又给出了一个答案 ▁▁▁▁▁▁ ▁▁▁ ▁▁▁▁▁▁ ▁▁▁▁▁▁ ▁▁▁▁▁▁▁▁ ▁▁▁ ▁▁ ,那很明显这里给出的答案就是 真解 的

接着又给出了 查阅 的答案 mingfu_zhenjie
import requestsfrom urllib.parse import quote url = "http://80-57511269-f6eb-4870-8838-fcf6e2d9fb91.challenge.ctfplus.cn/" headers = { "Host": "80-57511269-f6eb-4870-8838-fcf6e2d9fb91.challenge.ctfplus.cn", "Yin-Hour": quote("丑时三刻"), "Ming-Wang-Token": quote("玄冥鬼神,听吾号令"), "Hell-Dimension": quote("第十八层"),} params = { "c": "0e215962017", "鬼门关": "", "八卦": "", "阴历": "甲子年正月初一", "转生术": "000004", "密码": "029755", "真解": "▁▁▁▁▁▁ ▁▁▁ ▁▁▁▁▁▁ ▁▁▁▁▁▁ ▁▁▁▁▁▁▁▁ ▁▁▁ ▁▁", "查阅": "mingfu_zhenjie",} data = "阴阳两界,生死轮回,六道往返,我自逍遥" post_response = requests.post(url, headers=headers, params=params, data=data) print(post_response.text)
这里说还缺三个关键参数,先根据题目要求填上去

final_incantation 的计算公式是 新字符 = (原字符的 Unicode 编码 - 0x4e00 - 13) % 总范围 + 0x4e00 ,明文是 地府无常,勾魂索命,生死判定,我命由我
def enc(text): encrypted_text = [] for char in text: code = ord(char) if 0x4e00 <= code <= 0x9fa5: # 非汉字字符保持不变 new_code = (code - 0x4e00 - 13) % 20902 + 0x4e00 encrypted_text.append(chr(new_code)) else: encrypted_text.append(char) return ''.join(encrypted_text) # 测试加密函数plain_text = "地府无常,勾魂索命,生死判定,我命由我"print(enc(plain_text))输出得到 圣序旓師,勱鬵紕呰,甒歮列宍,戄呰甤戄

soul_phase 的计算公式是 soul_phase = ((日期 + 月份) % 4 + 1) * 90
今天是 2025年4月4日 ,带入得到 soul_phase = ((4 + 4) % 4 + 1) * 90 ,口算一下得到 90

karma_hex 的计算公式是 karma_value = (日期 * 31 + 月份) * 100 + 年份的最后两位,然后转为十六进制
带入公式得到 karma_value = (4 * 31 + 4) * 100 + 25
karma_value = (4 * 31 + 4) * 100 + 25print(f"{karma_value:06x}")输出得到 003219
import requestsfrom urllib.parse import quote url = "http://80-57511269-f6eb-4870-8838-fcf6e2d9fb91.challenge.ctfplus.cn/" headers = { "Host": "80-57511269-f6eb-4870-8838-fcf6e2d9fb91.challenge.ctfplus.cn", "Yin-Hour": quote("丑时三刻"), "Ming-Wang-Token": quote("玄冥鬼神,听吾号令"), "Hell-Dimension": quote("第十八层"),} params = { "c": "0e215962017", "鬼门关": "", "八卦": "", "阴历": "甲子年正月初一", "转生术": "000004", "密码": "029755", "真解": "▁▁▁▁▁▁ ▁▁▁ ▁▁▁▁▁▁ ▁▁▁▁▁▁ ▁▁▁▁▁▁▁▁ ▁▁▁ ▁▁", "查阅": "mingfu_zhenjie", "final_incantation": "圣序旓師,勱鬵紕呰,甒歮列宍,戄呰甤戄", "soul_phase": "90", "karma_hex": "003219",} data = "阴阳两界,生死轮回,六道往返,我自逍遥" post_response = requests.post(url, headers=headers, params=params, data=data) print(post_response.text)
就差最后一步了,提示说阎王爷的密码就在:ghosssssssssssssssssssssssssttttt,因此只要查阅 ghosssssssssssssssssssssssssttttt 即可
最终的 exp 如下:
import requestsfrom urllib.parse import quote url = "http://80-57511269-f6eb-4870-8838-fcf6e2d9fb91.challenge.ctfplus.cn/" headers = { "Host": "80-57511269-f6eb-4870-8838-fcf6e2d9fb91.challenge.ctfplus.cn", "Yin-Hour": quote("丑时三刻"), "Ming-Wang-Token": quote("玄冥鬼神,听吾号令"), "Hell-Dimension": quote("第十八层"),} params = { "c": "0e215962017", "鬼门关": "", "八卦": "", "阴历": "甲子年正月初一", "转生术": "000004", "密码": "029755", "真解": "▁▁▁▁▁▁ ▁▁▁ ▁▁▁▁▁▁ ▁▁▁▁▁▁ ▁▁▁▁▁▁▁▁ ▁▁▁ ▁▁", "查阅": "ghosssssssssssssssssssssssssttttt", "final_incantation": "圣序旓師,勱鬵紕呰,甒歮列宍,戄呰甤戄", "soul_phase": "90", "karma_hex": "003219",} data = "阴阳两界,生死轮回,六道往返,我自逍遥" post_response = requests.post(url, headers=headers, params=params, data=data) print(post_response.text)
geesec{6601bea6-bebf-49e5-8a02-402454cd245a}