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_START
、FLAG_END
加以區別。 - 將產生的
payload.php
上傳後,存取/files/avatars/payload.php
即可取得此Lab的Flag。
補充說明
在執行 php 檔時,會從<?
開始到?>
結束,因此將 php code 內容放在 png 的 comment 中,再存成 .php 檔,會把其他內容當成亂碼,但執行放在 comment 的 php code。
直接使用 exiftool 去看 payload.php 時,可以在 comment 欄位看到加進去的 php code。
see payload.php exif
使用 vim 開啟 payload.php 可看到開頭為 png 檔,且中間包含著 php code,因此上傳時會認為此檔案為png檔,但在 server 端請求此 php file 時,就會執行到所加進去的 payload,達到攻擊的目標。
use vim open payload.php file