實戰篇——檔案上傳漏洞upload-labs-master靶場實戰一

yaoguyuan發表於2024-07-05

實戰篇——檔案上傳漏洞upload-labs-master靶場實戰(1)

前端驗證繞過

(1) 篡改js程式碼

直接上傳一句話木馬失敗:

image-20240704204318691

檢視頁面原始碼:

image-20240704204415759

image-20240704204452988

可見前端透過checkFile函式對上傳檔案的字尾名進行了驗證。

使用Tampermonkey自定義js指令碼,用於刪除form表單的onsubmit屬性:

image-20240704204757617

啟用指令碼,重新整理頁面,前端驗證功能已被刪除:

image-20240704205105326

複製影像地址,新建標籤頁開啟,成功連線木馬:

image-20240704205331905

(2) 抓包修改字尾

先將一句話木馬字尾改為.jpg,抓包:

image-20240704205636089

再將字尾重新改回.php,傳送,同樣可以繞過:

image-20240704205910270

後端黑名單繞過

(1) MIME繞過

程式碼審計:

image-20240704210534442

可見後端對MIME進行驗證。

抓包:

image-20240704211118056

將MIME改為image/jpeg,傳送:

image-20240704211307372

成功連線木馬:

image-20240704211436584

(2) .phtml繞過

程式碼審計:

image-20240704211701627

可見黑名單不包括.phtml,當php為老版本在httpd.conf中AddType application/x-httpd-php .php .phtml開啟(預設關閉)時,可將字尾改為.phtml實現繞過。

將字尾改為.phtml,上傳,成功連線木馬:

image-20240704212237570

(3) .htaccess繞過

程式碼審計:

image-20240704213440447

可見黑名單中增加了.phtml,但不包括.htaccess,當php為老版本在httpd.conf中AllowOverride開啟(如下)(預設開啟)時,可以先上傳.htaccess配置檔案指定當前目錄下可被php解析的字尾,再將一句話木馬的字尾改為.htaccess配置檔案指定的字尾之一併上傳,實現繞過。

image-20240704213937767

編輯.htaccess配置檔案,指定字尾為.jpg:

image-20240704214932874

上傳.htaccess配置檔案:

image-20240704215034324

將一句話木馬字尾改為.jpg,上傳,成功連線木馬:

image-20240704215209818

(4) .user.ini繞過:

程式碼審計:

image-20240704215754076

可見黑名單中增加了.htaccess,但減少了.ini,當php為新版本上傳路徑下存在.php檔案時,可以先上傳.user.ini配置檔案指定插入當前目錄下所有.php檔案首部或尾部的檔案,然後將一句話木馬的字尾改為黑名單之外的字尾並上傳,最後上傳路徑下的所有.php檔案都會被插入一句話木馬,連線其中任一檔案即可。

編輯.user.ini配置檔案,指定插入檔案為webshell.jpg:

image-20240704220647158

上傳.user.ini配置檔案:

image-20240704220749069

將一句話木馬字尾改為.jpg,上傳,訪問readme.php(透過目錄掃描獲得),成功連線木馬:

image-20240704221120242

(5) 大小寫繞過

程式碼審計:

image-20240704221855313

可見沒有將字尾轉換為小寫,且黑名單過濾不充分,當php為老版本時,可以將字尾改為.PhP等實現繞過。

將一句話木馬字尾改為.PhP,上傳,成功連線木馬:

image-20240704222225691

(6) [1]+$繞過

程式碼審計:

image-20240704222528532

此處只對'.'和' '進行了有限次的過濾,可以將字尾改為'.php. .'等形式實現繞過。

抓包,將一句話木馬的字尾改為.php. .,傳送:

image-20240704223051537

成功連線木馬:

image-20240704223232363

(7) 雙寫繞過

程式碼審計:

image-20240704223557155

此處將檔名中所有黑名單內的字串進行了過濾,由於只進行了有限次過濾,可以透過將字尾改為.pphphp實現繞過。(.phphpp不行)

將一句話木馬字尾改為.pphphp,上傳,成功連線木馬:

image-20240704224047737

後端白名單繞過

(1) 00截斷[GET型]

程式碼審計:

image-20240704224517971

此處透過GET請求獲得檔案儲存路徑,因此路徑可控,當php版本小於5.3.4且在php.ini中magic_quotes_gpc關閉時可以將路徑跟上'/webshell.php%00'等形式實現繞過。

使用Tempermonkey自定義js指令碼,修改form的action屬性,實現00截斷:

image-20240704230558441

啟用指令碼,重新整理頁面,檔案儲存路徑已被修改:

image-20240704230749729

將一句話木馬字尾改為.jpg,上傳,成功連線木馬:

image-20240704231046882

(2) 00截斷[POST型]

程式碼審計:

image-20240704231329129

唯一的區別就是將GET改為了POST,一樣的配方。

image-20240704233053035

image-20240704233133094

成功連線木馬:

image-20240704233229769

(3) 條件競爭

程式碼審計:

image-20240704233623264

此處執行邏輯為:先將檔案儲存,若檔案字尾在白名單內,則重新命名;若檔案字尾不在白名單內,則刪除。

如果在木馬儲存和刪除的時隙內訪問木馬,那麼木馬是可以被執行的,只不過很快就會被刪除。但如果上傳的木馬能夠釋放一個一句話木馬,那麼雖然上傳的木馬會被刪除,一句話木馬是不會被刪除的,由於正在執行的指令碼無法刪除,因此這種方法是可行的。

編輯載體:

image-20240704235135302

上傳載體,抓包,傳送至Intruder模組,配置Continue indefinitely:

image-20240704235930736

訪問載體,抓包,傳送至Intruder模組,配置Continue indefinitely:

image-20240705000014754

同時開始爆破,只要成功訪問載體一次即可植入一句話木馬:

image-20240705001254581

成功連線木馬:

image-20240705001427492


  1. . ↩︎

相關文章