声明
本文作者:北美第一突破手 本文字数:1935
阅读时长:20分钟
附件/链接:点击查看原文下载
声明:请勿用作违法用途,否则后果自负
本文属于WgpSec原创奖励计划,未经许可禁止转载
前言
事情的起因是这样的 昨天晚上还在和女朋友聊天的时候,突然一个好兄弟发了一个连接给我们,说他的朋友被骗了钱,我们拿到主站的时候大概是这样的 :sun_with_face:这种站点一看就知道是那种骗人的站点,也不知为啥有这么多人相信天上掉馅饼。
一、
信息收集
按照一般的思路先做一手信息收集,先手看一下IP和端口:
香港的阿里云?这也太离谱了吧
在扫了一下目录啥的,除了这个还有一个后台,先不管,现从这个主站开始,想着先注册一下账号啥的看看有无业务上的逻辑漏洞,顺便注册一个号抓了一下包,尝试爆破一下用户名啥的。
这里想着爆破一下看看存在的用户,结果才整跑了20个包就ban了ip,打消念头
整了半天的登录入口结果还要邀请码,没有邀请码还没法注册,整挺好的,于是拿上朋友的注册过的账号登上去了,有个客服聊天的东西,看了一下链接跳转,爆破一下,于是就有了这样一个页面:
弱口令无果,于是去注册了一个账号登录:
我不是很清楚这到底是个啥,但是登录上去就是这个玩楞。这开发也太不走心了吧,就这的UI实在是太离谱了,我觉得我又可以了:smile:,于是右键查看源码,看看有无可用的信息,大致扫了一遍找到一个上传文件的路径,打开报错
在最下面可以看到是TP5.0的框架,尝试看看tp框架的漏洞,扫了一遍基本没有已知poc的漏洞,然后就陷入了沉思。
二、
柳暗花明
吃了饭的我在群里和几个好兄弟吹水,他们说了今天有个网站必须要用360才能打开,不然的话都是乱码的,我寻思哪儿有这么离谱,突然想到哪个站,于是我用了一下谷歌打开这个页面:
罢了罢了
三、
上传Shell
找了一会找到一个上传点,尝试上传文件
拿到shell
用冰蝎连一下:
三、
开启外链拿到数据库
然后尝试找他的数据库的配置文件,因为只能本地连接数据库不允许外链,所以我们可以先传一个小马登录他的数据库,然后在开启外链就ok:
开启外链命令:
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
的脚本
https://github.com/yangyangwithgnu/bypass_disablefunc_via_LD_PRELOAD 23
没有回显,然后又去试了一下另外一个::open_hands:任然没有返回:
<?phpheader("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之类的浏览器进行操作。