目錄

PortSwigger-檔案上傳漏洞 lab 6

Lab: Remote code execution via polyglot web shell upload

Lab 目標

  • 跟上一個lab相同,利用上傳漏洞將目標主機上/home/carlos/secret檔案內容輸出,再將輸出的內容subsmit。
  • 此 lab 會檢查檔案 header 因此需產生 polyglot web shell 來上傳。

步驟

  • 如同之前的 lab 先找到上傳後可被存取的路徑。
  • 因為此 lab 開始針對檔案 header 進行檢查,因此會發現之前幾個 lab 的手法無法使用。
  • 需要將 payload 加到圖片檔中來執行。
  • 下面指令使用 exiftool 來將 payload 加入圖片 exif 的 comment 中,並產生一個附檔名為 php 的圖片檔。kali 預設沒有安裝 exiftool,執行sudo apt install libimage-exiftool-perl來安裝。
exiftool -Comment="<?php echo ' FLAG_START ' . file_get_contents('/home/carlos/secret') . ' FLAG_END '; ?>" <image_file>.png -o payload.php 
  • 因為單純將 flag 顯示出來,會跟其他圖片檔亂碼接在一起,容易搞混,在前後分別加上 FLAG_STARTFLAG_END加以區別。
  • 將產生的payload.php上傳後,存取/files/avatars/payload.php即可取得此Lab的Flag。

補充說明

在執行 php 檔時,會從<?開始到?>結束,因此將 php code 內容放在 png 的 comment 中,再存成 .php 檔,會把其他內容當成亂碼,但執行放在 comment 的 php code。

直接使用 exiftool 去看 payload.php 時,可以在 comment 欄位看到加進去的 php code。

https://amingosec.blog/wp-content/uploads/2022/04/payload_exif.png

see payload.php exif

使用 vim 開啟 payload.php 可看到開頭為 png 檔,且中間包含著 php code,因此上傳時會認為此檔案為png檔,但在 server 端請求此 php file 時,就會執行到所加進去的 payload,達到攻擊的目標。

https://amingosec.blog/wp-content/uploads/2022/04/vim_payload-1024x285.png

use vim open payload.php file

延伸閱讀