默认教学计划
1839人加入学习
(5人评价)
CTF从入门到提升

入选《爆款好课TOP榜》

价格 ¥ 499.00
音频听课 手机端支持一键听课 (试一试)
该课程属于 网络安全公益-高校篇 请加入后再学习

代码注入相关函数

0x1 eval(string code_str)

       将传入的参数(字符串)作为php代码执行,需要是一个完整的语句。

0x2 assert($assertion)

      检查一个断言是否为false

      assertion是字符串,它会被当成php代码来执行;

0x3 call_user_func()

里面有两个参数,第一个被用来作为函数,第二个为第一个函数的参数值,使用is_callable()函数来判断,检测函数是否支持回调,

比如:is_callable("phpinfo")

0x4 call_user_func_array()

0x5 create_function($args,$code)

将一个函数写在了一行,比如:

<?php

function a($code){

echo $code;

a('tx');

}

?>

相当于

$a = create_function('$code','echo $code');

如果echo $code部分可控,那么就可以实现getshell

0x6 preg_replace($pattern,replacement,subject)

执行一个正则表达式的搜索和替换

/e修正符使preg_replace将replacement参数当作PHP代码执行(只有匹配成功,才能执行)7.0之后不在2使用/e

<?php

$a = 'phpinfo()';

$b = preg_replace('/abc/e',$a,'abcd');

var_dump($b);

?>

0x7 array_map($callback,$array)

第一个参数为回调函数,第二个参数为一个数组,作为函数的参数值

比如:

$a = $_GET['a'];

$b = $GET['b'];

$array[0] = $b;

$c = array_map($a,$array);

有这么一个php,那么在url上这样传参

?a=assert&b=phpinfo

就可以看到phpinfo的信息了,当然也可以不使用$array[0] = $b;让b变成数组,可以直接不要这么一行,变成这样$c = array_map($a,$b);传参的时候这样写

?a=assert&b[]=phpinfo

0x8 usort()

 

0x9 uasort()

 

0x10 ${php代码}

${phpinfo()};

[展开全文]

代码/命令执行:
system(),eval(),exec()等函数的传入参数是该漏洞攻击成功的主要原因;
相关函数,代码注入:

<?php
highlight_file(_FILE_);
$a='phpinfo();';
eval($a);
?>

Mixed eval(string code_str)
eval-把字符串作为PHP代码执行
Code_str是PHP代码字符串
 

 Cknife

bool assert(mixed $assertion [, string $description ] )

assert-检查一个断言是否为FALSE
assertion 是字符串,它将会被当做PHP代码执行。

<?php
error_reportion(E_ALL);
highlight_file(_FILE_);
#$a='echo 12345;';
#assert($a);
$a='eval("echo`pwd`;")';
assert($a);
echo 123;
?>
123

<?php
highlight_file(_FILE_);
#$a='echo 12345;';
#assert($a);
$a='eval("echo`dir`;")';
assert($a);
echo "11111";
?>
mixed call_user_func(callable $callback [, mixed $parameter [, mixed $...]])
callback 是将被调用的回调函数,parameter是0个或以上的参数,被传入回调函数

可以传递任何内置的或者用户自定义的函数。
除了语言结构如:array(),echo(),empty(),eval(),exit(),isset(),list(),print()和unset()

<?php
highlight_file(_FILE_);
$a='system';
$b='pwd';
call_user_func($a,$b);
call_user_func('assert','phpinfo()');
?>
/var/www/html/rce/demo/phpcode
 


 

string create_function(string $args,string $code)
create_function-create an anonymous (lambda-style) function

args是要创建的函数的参数,code是函数内的代码。
<?php
highlight_file(_FILE_);
$a=create_function('$code','echo $code;');
$b='hello';
$a($b);

$a='phpinfo();';
$b=create_fuction(' ',$a);
$b();

?>
hello
 

array array_map(callable $callback,array $array1[, array $...])
array_map-为数组的每个元素应用回调函数
<?php
highlight_file(_FILE_);
$a=$_GET['a'];
$b=$_GET['b'];
$array[0]=$b;
$c=array_map($a,$array);
?>

bool usort(array &$array, callable $value_compare_func)
usort-使用用户自定义的比较函数对数组中的值进行排序

<?php
highlight_file(_FILE_);
usort(...$_GET);
#usort($_GET[1],'assert')
?>
 

${php代码}
${phpinfo()};
<?php
highlight_file(_FILE_);
${phpinfo()};
?>

 

 
 
 
 
 
 
 
 
[展开全文]

授课教师

课程特色

视频(60)
下载资料(15)