[SUCTF2018]annonymous

这题代码很少,就这几行
首先创建了一个匿名函数,会输出flag
接着openssl_random_pseudo_bytes(32)生成一个随机数,然后将其转成了十六进制,将其赋值给$hash
接着SUCTF_和hash拼接成一个新的函数名,函数会执行上面构造的匿名函数
所以,要想获得flag就只有两种办法,直接执行匿名函数,或者执行SUCTF_和hash拼接成的新函数

下面的func_name可以传一个函数名进去并执行该函数

这题最初想着直接传$MY进去看能不能执行,结果不可以,那就只能执行下面那个函数名拼接的函数了,但是这样的话我们首先得破解它所生成的随机数,搜了很久都没有找到办法,这个好像是不可破解的。

转回去找create_function函数的问题,发现一般都是利用它进行代码注入,但这里明显不行。

后来看了别的大佬的WP才知道
create_function()这个函数的漏洞,他create之后会自动生成一个函数名为%00lambda_[0-999],后面的数字会逐步递增

create_function是返回函数名称的,函数返回一个唯一的字符串函数名, 出现错误的话则返回FALSE。

这么说这个函数也只是动态的创建了一个函数,而这个函数是有函数名的,也就是说,其实这并不是匿名的。 只是创建了一个全局唯一的函数而已。
详细的可以看看这篇https://my.oschina.net/2016jyh/blog/810916

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

参考链接:https://blog.csdn.net/cjdgg/article/details/116746808