[SUCTF 2018]annonymous 真的是匿名函数么

<?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__);

代码分析可以得知$MY是create_function匿名函数创建了一个die()输出flag的函数名

openssl_random_pseudo_bytes(32)随机生成32位的字节

eval定义了一个字符串拼接的函数名,并且调用了$MY

给了我们一个get方法传参

这不是小case嘛,直接传入$MY调用匿名函数即可

发现报500,不知道咋回事,弄得我写一个php测试一下发现没问题,可能后台有过滤

试试phpinfo可能有惊喜

 也没有,那要从字符串拼接的函数入手了啊,查询了一下 openssl_random_pseudo_bytes(32)生成的是伪随即字节

既然不是真的随机那就估计像random一样有漏洞,但是查了很久没有查到一个漏洞利用的

想了很久,试着查询一下creat_function真的是无名函数嘛,没想到入口在这里

放一个测试的代码即可懂

可以发现匿名函数并不是真正的匿名,而是由%00lambda_{%d}组成 

那我们直接调一下burp的进程进行爆破后面数字即可(不直接用%00lambda_1的原因是我们不清楚数字持续递增到多少了)

还有一种方法是使用脚本一直调用%00lambda是后台线程拉满至清空,导致重新从1开始 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值