为什么要提权

核心提示disable_function是渗透测试中的一大难题,好多时候当我们拿到shell了,但是因为有disable_function这个限制,没有办法进行下一步,因此各种利用技巧就显现出来了,今天这篇文章讲解了两种绕过方法。php超全局变量首

Disable_function是渗透测试中的一个大问题。很多时候,当我们拿到外壳的时候,因为disable_function的限制,没有办法进行下一步。因此,揭示了各种利用技术。今天这篇文章解释两种绕过方法。

Php超全局变量

首先说一下超全局变量。在php中,函数变量是与全局隔离的,不可访问的。

演示1:

现在在函数中添加一个globle,这样函数中的测试函数就变成了一个超全局变量。

在函数中定义全局变量:

通过globle函数,我们可以从外部访问函数内部定义的变量的值。

演示2:

3.php码如图所示:

2.php码如图所示:

下面是作用域的描述:可以看到我们在3.php导入了测试函数,但是注意3.php的变量A仅限于Test_Global函数,这个输出是0。

禁用功能

Disable_function是php.ini中的一个设置选项,可以用来设置php环境禁止某些功能。

disable_functions=exec,passthru,popen,proc_open,shell_exec,system,phpinfo,assert,chroot,getcwd,scandir,unlink,delete,rmdir,rename,chgrp,chmod,chown,fopen,copy,mkdir

我们先来介绍一下这些功能:

exec

参数$command指示要执行的命令;

$output:该命令执行输出以填充该数组。

如图:这是直接回声。看到没有输出,我们用print_r打印出来:

至于system、passthru之类的功能就不详细解释了,大家可以自己测试。

1)使用pcntl_exec

演示:

< PHP pcntl _ exec);>

然后切换到/tmp/1.sh,编写ls -l来执行。

反弹壳:

该函数在执行过程中出现错误时返回false,但在执行成功时不会返回false。所以我们通常使用python来弹壳这个函数。

适用版本:php 4 > = 4.2.0,PHP 5

分析:

记住这些轮子。通常,pcntl_exec函数使用这两种方式。

2)使用LD_PRELOAD环境变量

原理:先说这个环境变量。它的功能是允许定义程序运行前加载的动态链接库。该函数用于有选择地在不同的链接库中加载相同的函数。通过这个环境变量,我们可以在主程序和它的动态链接库之间加载其他的动态链接库。我们可以利用这个特性劫持函数,从而使用我们自己构造的函数。

c文件被转换成。所以linux下的文件:

gcc-c-fPIC-o a o a c

gcc -shared -o mylib.so mylib.o

-c表示编译-fPIC表示共享库的动态连接。

-o表示输出的文件名,而-shared表示生成共享库。

演示1:

交流电

首先,gcc将a.c编译成linux下的可执行文件A

不难看出,strcmp函数对两个值进行比较,如果等于password,就会输出正确!

根据上面的原理,我们想知道无论输入什么字符,是否都能输出正确。

让我们在下面构造一个b.c文件:

把d.c编译成动态链接库,利用LD_PRELOAD全局变量先加载d.so这个动态链接库,这样就可以达到我们之前想要达到的目的。

演示2:

这只是一点二进制的东西。

这个C语言已经写死了,但是能不能用一些结构让它输出ok?

首先,我们用gdb调试一下:

我们的想法是劫持printf函数,将其堆栈中的地址增加59,这样就可以输出ok了。

结局

还有很多方法可以绕过disable_function,这是进阶的第一步。很多东西还是要被劫持的。所以文件,还有很多技巧值得分析。

 
友情链接
鄂ICP备19019357号-22