CTF後門入侵系統(攻防世界)

php://filter的妙用

  1. php://filter是php中特有協議流,"中間流"來處理其他流,就比如可以用:post請求通過base64將php源碼編譯並輸出;
localhost:80/index.php?php://filter/write=convert.base64-decode/resource=index.php   //輸出的文件名

總結:
2. 使用不同的參數可以達到不同的目的和效果;
3. 利用base64獲得源碼 / 通過讀寫編碼實行繞過操作;在這裏插入圖片描述

測試題目

<?php
$content = '<?php exit; ?>';
$content .= $_POST['txt'];
file_put_contents($_POST['filename'], $content);

$content函數使用了"exit"即使寫入了一句話木馬也會被退出所以嘗試繞出;
思路:php://filter進行繞過
1.通過一句話base64encode;
2. convert(兌換)
3. php://filter/read=convert.base64decode進行解碼;
4. **Tips:**那麼<?php exit;?>這一部分在經過解碼後,php不對其解析,而我們想要寫入的一句話正好被成功解碼。因此得以成功上傳webshell。
在這裏插入圖片描述

測試題目二

工控系統後臺滲透拿flag題目,也是通過php:filter進行編碼輸出的;

審計PHP preg_replace() 函數
preg_replace 函數執行一個正則表達式的搜索和替換。
語法:
mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int KaTeX parse error: Expected 'EOF', got '&' at position 19: …it = -1 [, int &̲count ]] )

  1. 搜索 subject 中匹配 pattern 的部分, 以 replacement 進行替換。
  2. 參數說明:
  3. $pattern: 要搜索的模式,可以是字符串或一個字符串數組。
  4. $replacement: 用於替換的字符串或字符串數組。
  5. $subject: 要搜索替換的目標字符串或字符串數組。
  6. $limit: 可選,對於每個模式用於每個 subject 字符串的最大可替換次數。 默認是-1(無限制)。
  7. $count: 可選,爲替換執行的次數。

PHP 的 preg_replace()函數存在一個安全問題:

/e” 修正符使 preg_replace() 將 replacement 參數當作 PHP 代碼(在適當的逆向引用替換完之後)。提示:要確保 replacement 構成一個合法的 PHP 代碼字符串,否則 PHP 會在報告在包含 preg_replace() 的行中出現語法解析錯誤。

示例:

//訪問的url:?pat=/./e&rep=phpinfo()&sub=aa就會觸發phpinfo()的執行
?pat=/./e&rep=phpinfo()&sub=just test 就會觸發phpinfo()

在這裏插入圖片描述

        //方便的實現輸入輸出的功能,正在開發中的功能,只能內部人員測試

        if ($_SERVER['HTTP_X_FORWARDED_FOR'] === '127.0.0.1') {

            echo "<br >Welcome My Admin ! <br >";

            $pattern = $_GET[pat];
            $replacement = $_GET[rep];
            $subject = $_GET[sub];

            if (isset($pattern) && isset($replacement) && isset($subject)) {
                preg_replace($pattern, $replacement, $subject);
            }else{
                die();
            }

        }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章