2018SUCTF-annonymous

打开得到源码:

<?php

$MY = create_function("","die(`cat flag.php`);");
$hash = bin2hex(openssl_random_pseudo_bytes(32));
// 生成32字节的伪随机字节序列,并将其转换为16进制字符串,这个字符串被用于函数名的一部分,以确保函数名是唯一的
eval("function SUCTF_$hash(){"
    ."global \$MY;" // 声明$MY是全局变量,那样他就能在函数内部访问$MY
    ."\$MY();" // 调用$MY变量所引用的匿名函数
    ."}");
// 思路:注入代码到$MY中
if(isset($_GET['func_name'])){
    $_GET["func_name"]();
    die();
}
show_source(__FILE__);

看样子能执行一个phpinfo

?func_name=phpinfo

思路:直接执行匿名函数或者执行SUCTF和hash拼接成的新函数
即:

<?php
$MY = create_function("","die(`calc`);");
$MY();

此时就能执行die(calc);这个语句

漏洞点:
create_function这个函数的漏洞,他create之后会自动生成一个函数名为%00lamba_[0-999],后面的数字逐次递增

<?php
$MY = create_function("","die(`cat flag.php`);");
echo $MY;

create_function的返回值为这个函数的名称,如:

这道题中因为我们不知道前面有多少匿名函数,所以要遍历数字,来执行该函数

flag{90ca7e34-4b49-4431-b8d4-567ee0b79042}
posted @ 2024-10-14 14:48  starme  阅读(3)  评论(0编辑  收藏  举报