Web
瘋狂星期四
<?php$tg1u=$_GET['tg1u'];if(!preg_match("/0|1|[3-9]|\~|\`|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\-|\=|\+|\{|\[|\]|\}|\:|\'|\"|\,|\<|\.|\>|\/|\?|\\\\|localeconv|pos|current|print|var|dump|getallheaders|get|defined|str|split|spl|autoload|extensions|eval|phpversion|floor|sqrt|tan|cosh|sinh|ceil|chr|dir|getcwd|end|next|prev|reset|each|array|reverse|pop|rand|flip|content|echo|readfile|highlight|show|source|file|assert|getallheaders|current|pos/i", $tg1u)){//我要吃瘋狂星期四!!!!!!!!!eval($tg1u);
}
else{die('這都做不出來是準備請師兄吃瘋狂星期四嗎?');
}highlight_file(__FILE__);
考核的時候知道是原題,但搜不到emmm
考完之后找師兄請教才知道迅速查找的方法就是直接搜最關鍵的:正則表達式
還有就是搜索引擎的選擇也很重要,平時我們習慣使用的一些引擎上面其實并沒有多少好東西
換一換找一找就有了
當然了,學習方法才是最重要的
看了正則表達式發現,字母a-z大小寫、空格全被過濾, 數字就留了個2
所以這里需要構造一個session,用session_start() 來開啟 session,在用 session_id() 來獲取 session。
理論可行,但是發現查看根目錄失敗,這是因為PHPSESSID里面不能包含空格?
別忘了數字2是沒被過濾的,所以這個時候就要想到用 hex2bin() 它會將十六進制轉換為對應的ASCII碼值
也就是說如果我將命令進行十六進制編碼,再使用 hex2bin() 進行解碼執行就可以繞過過濾
編碼過后果然可行了?
然后繼續
直接 cat?/F111114a9g
admin Pro Max
是登錄題
然后考核的時候也是弱口令 admin admin 試了一下就進去了
都點開看了一下沒發現什么有用的
但是訪問之后看url發現是通過 file 來讀取文件的
考核一直以為是偽協議,這里得到提示返回 sql 注入
剛開始不管怎么樣都找不到注入點,不管是 GET 還是 POST ,后面發現 單引號 ' 被過濾
大概意思就是在 username 語句處使用反斜杠 \ 把后面的單引號 ' 轉義掉,就可以使 username 和 password 形成一個完整的 SQL 查詢語句。
例如原查詢語句為? ... username='$_POST[username]' and password='$_POST[password]'
加入單引號: ... username='$_POST[username]\' and password='$_POST[password]'
轉義以后: ... username='$_POST[username] and password='$_POST[password]'
也就是不管前面對不對,后面的注入都會回顯
這個時候嘗試在 password 處進行注入就可以了
接下來就按老套路就可以了
?列數不對換成3試試
發現第2位是回顯位
數據庫名
?表名
列名
?爆flag
但這是個假的flag
后面我也不會,聯想到 file 但不知道怎么做,問了同學才知道需要寫入木馬(sql寫馬的知識)
可以用 outfile 和 dumpfile 來寫?
區別在于?outfile可以輸出多行內容,而dumpfile只輸出一行內容,還有outfile會破壞文件原有的數據格式 (如 \n 會變成 \)
用法:
"寫入的內容" into outfile/dumpfile "絕對路徑"
這里學到用 @@secure_file_priv 查詢可以寫入木馬的路徑
得到可以寫入的目錄?/var/lib/mysql-files/
接下來寫入拿來的馬
這個時候再 admin 弱口令進入 /home.php 界面,訪問剛剛寫入的目錄下的馬
?但是第2位沒有回顯,那就試試傳一個參命令執行吧
然后在 secret 中找到 flag
?這次就對了
?瓦學弟上分記
這題就用 dirsearch 掃出php反序列化的源碼,由于我還沒學php反序列化,所以這題先放一下
圖床
這題考核的時候我還是用 dirsearch 掃到源碼
這題考核的時候我也是卡在尋找哈希值這一步,但是考核完出來找到網站了
就是這個 彩虹表?MD5 在線免費解密 MD5、SHA1、MySQL、NTLM、SHA256、SHA512、Wordpress、Bcrypt 的雜湊
所以那一串對應的哈希值轉換過來是
Adm12geC
所以 TG1u 這個用戶的密碼知道了就可以登錄,在這之前我發現普通用戶也可以登錄
?但是上傳的圖片沒有權限查看
然后先用 TG1u 用戶查看,密碼登錄
發現這次就可以查看到圖片,說明密碼正確
?然后既然是 file_path 就嘗試一下普通用戶命令執行
直接抓包搞一下
發現可以執行
這個時候就可以直接寫馬上去了
看一下傳了這么多次終于是傳上去了(1.php)
但是切換 TG1u 用戶以后執行不了
system也不行
問了一下AI跟我說可能是我傳遞給 eval 的語法錯誤
那就只能用普通用戶的 system() 進行雙寫繞過了,但是這樣需要提權
之前可以用 sudo -i 的bug但是被修了
?用普通用戶看了一下根目錄發現了 flag 目確實是存在
那就切換為 TG1u 用戶利用上傳的馬進行文件包含執行提權命令cat falg即可?
文件包含剛剛普通用戶上傳的 3.phtml 圖片馬(環境沒了我重新開和上傳了一下)
執行system sudo提權的同時查找 /flag 目錄下的所有文件,然后 -exec 命令對找到的文件進行cat,再用占位符 {}填充,最后結束命令 \; 得到 flag
?file_path=3.phtml&a=system('sudo find /flag -exec cat {} \;');
?RE
師兄愛戀故事1(取證)
是名為exe也沒有后綴的附件
加個 .exe 后綴試一下
提示是pyinstaller
所以應該就是用pyinstaller打包的py文件
用工具解包?
查了一下
你有 | 用途 | 是否能用 PyInstaller |
---|---|---|
.py 文件 | 打包成 .exe | ? 支持 |
.exe 文件 | 想逆向成 .py | ? 不支持(需要反編譯工具) |
?pyinstxtractor.py
—— 提取 PyInstaller 包內容;
uncompyle6
或 pycdc
—— 將 .pyc
反編譯成 .py;
Python 對應版本(重要!必須匹配)
?最下面有 師兄的故事.pyc 然后給他反編譯成python
用在線工具把pyc轉py文件 這里也可以:Pyc 轉 Py - 百川在線工具箱?
?然后發現是AES加密
然后用ai寫一個AES解密腳本?
from Crypto.Cipher import AES# 提供的信息
AES_KEY = b' \xf3\x10\x0bA.\xfe\xd1\xb9\x16\xa2\xde\x03\xc4\xdf\x00'
AES_IV = b',\x19\xd5\xd3\xf5\xf2\xe9\xf7\xd0\xe1\x0e\x98I!J\xcd'
ENCRYPTED_PASSWORD = b'.\xd6nP\x7f@Z\xe4\xb7\xd3\xfb\x82r_/q'
# 創建AES-CBC解密器
cipher = AES.new(AES_KEY, AES.MODE_CBC, AES_IV)# 解密數據
decrypted = cipher.decrypt(ENCRYPTED_PASSWORD)# 移除PKCS7填充
pad_length = decrypted[-1]
if pad_length < 1 or pad_length > AES.block_size:print("警告:填充值無效,可能不是PKCS7填充")password = decrypted
else:# 驗證并移除填充if decrypted[-pad_length:] == bytes([pad_length] * pad_length):password = decrypted[:-pad_length]else:print("警告:PKCS7填充驗證失敗,嘗試直接輸出")password = decrypted# 嘗試以多種編碼格式解碼結果
def decode_bytes(data):try:return data.decode('utf-8'), 'utf-8'except UnicodeDecodeError:try:return data.decode('latin-1'), 'latin-1'except:return data, 'hex'# 顯示解密結果
result, encoding = decode_bytes(password)
print("\n" + "="*50)
print(f"密鑰 (hex): {AES_KEY.hex()}")
print(f"IV (hex): {AES_IV.hex()}")
print(f"密文 (hex): {ENCRYPTED_PASSWORD.hex()}")
print("\n解密結果:")
if encoding == 'hex':print(f"原始字節: {password}")print(f"十六進制: {password.hex()}")print(f"Base64: {base64.b64encode(password).decode('utf-8')}")
else:print(f"明文密碼: {result}")print(f"編碼格式: {encoding}")print(f"原始字節: {password}")
print("="*50)
跑一下
Yunxi{20250812}
來嘍來嘍
下載附件后是exe
先查一下殼
是zip,給它改為 zip后綴解壓一下看看文件
發現一堆txt文件 images里面也是一堆圖片
但是發現有一個exe文件
exe就再查一下
發現是pyinstaller?
那就和上面那題一樣解包
之前師兄說這種直接就找 pyc,所以注意到 d.pyc
然后進行反編譯
PyLingual
這個網址要掛代理才能訪問
得到源代碼,一個加密過程,有加密數據,而密鑰在那個 txt 文件里面
搜了一下是python中的一種對稱加密方式,使用fernet解密
Fernet 在線解密 | 長亭百川云
這是什么東東,是python代碼?
所以關鍵部分就是輸入“糖果”之后就會輸出 flag
但是喵的不能復制,那笨方法就是分屏一個個敲了提交
當然,截屏后文字提取也可以
看了一下同學的好方法是繼續利用python代碼輸出
將flag生成代碼就復制粘貼,用python輸出
喜歡師兄講的課嗎(安卓逆向)
下載的附件名就叫 zip 所以改后綴.zip
解壓后是個apk文件
這里也是學習到了
安卓逆向所需工具:
任務 | 工具推薦 |
---|---|
反編譯 APK | jadx、apktool |
分析 .so 庫 | Ghidra、IDA Pro、Cutter、Radare2 |
解密、調試算法 | Frida(動態分析)、Python(重寫算法) |
這題用用jadx來進行安卓逆向
下載jadx
jadx安卓反編譯工具 0.6.1下載_jadx安卓反編譯工具 0.6.1官方下載_3DM軟件
下載后先進入jadx的文件夾中用cmd來打開Dos命令窗口?
?
然后逐一執行
cd lib
jadx-0.6.1\lib>java -jar yourjadxversion.jar
這樣就進入了 gui 界面的 jadx
同時打開剛剛的apk文件?
接下來就可以開始邏輯分析了(找main函數......和idea差不多)