0
点赞
收藏
分享

微信扫一扫

【网络安全-信息收集】网络安全之信息收集和信息收集工具讲解

敬亭阁主 2023-10-04 阅读 35

一,域名信息收集

1-1 域名信息查询

可以用一些在线网站进行收集,比如站长之家

可以查看一下有没有有用的信息,不过一些大网站优化的很好,一般没有什么可用信息的。

其他查询网站

1-2 SEO信息查询

站长之家可以查

可以看到一些备案信息,真实IP地址等一些信息 

 

1-3 子域名收集

1-3-1 在线收集子域名

子域名查询 - 站长工具子域名查询icon-default.png?t=N7T8https://tool.chinaz.com/subdomain/

查到的子域名你一个个去访问一下,看看是否能访问,是否开放文本服务等 

1-3-2 子域名收集工具

2-1 JSFinder

工具下载地址:(Python写的工具,需要有Python环境)

GitHub - Threezh1/JSFinder: JSFinder is a tool for quickly extracting URLs and subdomains from JS files on a website.JSFinder is a tool for quickly extracting URLs and subdomains from JS files on a website. - GitHub - Threezh1/JSFinder: JSFinder is a tool for quickly extracting URLs and subdomains from JS files on a website.icon-default.png?t=N7T8https://github.com/Threezh1/JSFinder

需要安装模块

 pip install requests
 pip install bs4

 用法:(在JSFinder.py路径下打开终端,按住shift,鼠标右击可以看到打开终端选项)

 python JSFinder.py -u https://www.mi.com

2-2 Layer子域名挖掘机

(需要工具可以留言)

2-3 subDomainsBrute.py

需要工具可以留言,或者自行找一下,去github上搜

python  .\subDomainsBrute.py www.baigui.cloud
2-4 oneforall.py
python .\oneforall.py --target mi.com run  
 2-5 用Python自己写个脚本
5-1 ping命令+ 域名字典进行收集
## 基于ping 进行子域名扫描
import os
def ping_domain(P_domain):
	## xxx是二级域名字典
	with open('xxx') as f:
		domain_list = f.readlines()

	for domain in domain_list:
		full_domain = f'{domain.strip()}.{P_domain}'
		result = os.popen(f'ping -n 1 -w 1000 {full_domain}').read()
		if '请求超时' in result or "TTL=" in result:
			print(f'{full_domain} 存在')
		if "找不到主机" not in result:
			print(f'{full_domain} 存在')
5-2 基于socket库
import socket
## 基于socket库DNS解析记录实现扫描
def socket_domain(P_domain):
	## 读取域名字典文件
	with open('xxx') as f:
			domain_list = f.readlines()
	for domain in domain_list:
		try:
			full_domain = f'{domain.strip()}.{P_domain}'
			ip = socket.gethostbyname(full_domain)  
			## 如果这个域名存在则会返回IP地址,不存在报 socket.gaierror
			print(f"{ip} ------  {full_domain}")
		except socket.gaierror:
			pass
		except:
			pass

1-4  备案号和ssl证书查询子域名

1-4-1 域名备案信息查询

ICP备案查询 APP备案 小程序备案 - 站长工具通过域名可查询该域名是否有备案及相关的ICP备案许可信息。通过名称查询APP备案信息和小程序备案,快应用备案信息。icon-default.png?t=N7T8https://icp.chinaz.com/

1-4-2 ICP备案号查询

https://beian.miit.gov.cn/icon-default.png?t=N7T8https://beian.miit.gov.cn/ 

 有了备案号,可以通过备案号查询这个公司的其他备案的子域名

1-4-3 ssl证书查询

SSL状态检测本站提供的SSL状态检测工具,可以检测出证书详细信息、证书链详细信息、当前支持协议、加密套件详细信息,可以为您的服务器证书部署状态提供最详细说明,如果你的证书部署状态存在缺陷,我们还提供了详细的建议信息,协助你配置出最安全的SSL站点。icon-default.png?t=N7T8https://myssl.com/ssl.html

SSL证书在线检测工具-中国数字证书CHINASSLSSL证书在线检测工具-中国数字证书CHINASSLicon-default.png?t=N7T8https://www.chinassl.net/ssltools/ssl-checker.html

二,真实IP信息收集

 有了CDN服务器加速以后,客户端只要到离自己最近的一个CDN服务器拿数据即可,这样网站访问速度会提高,但是我们要攻击的是网站的真实服务器,不是CDN服务器,那么就需要找出真实IP

如何判断有没有CDN加速呢? 下面有几种方法?

2-1 超级ping

原理:如果有了CDN加速的话,不同地方的客户端都会去离子最近的CND服务器去拿资源,所以你在新疆,海南,北京.....不同地方Ping对方服务器,拿到的IP不一样。如果没有CDN加速的话,你ping 对方服务器,无论你在哪里,都会去找真实服务器拿资源,ping出来的IP都一样

多个地点Ping服务器,网站测速 - 站长工具通过该工具可以多个地点Ping服务器以检测服务器响应速度。icon-default.png?t=N7T8https://ping.chinaz.com/

全国各地对域名进行ping 最后ping出来的只有一个IP,说明没有用CDN加速 

模拟全国各地进行ping 得到8个IP地址,说明很有可能使用了DNS加速

2-2 终端ping

上面看到的IP很有可能是真实IP,不过需要确认。

 

 2-3  nslookup(windows)

是查询DNS的记录,查看域名解析是否正常,在网络故障的时候用来诊断网络问题的工具,通过它也可以尝试获取一个域名对应的ip地址

命令格式:nslookup domain[dns-server]
示例:
    nslookup ainiai.top
还可以指定查询的DNS记录类型
命令格式:
	nslookup -qt=type domain[dns-server]
示例:
	nslookup -qt=CNAME ainiai.top

 2-4 dig(Linux)

dig ainiai.top

 2-5 CDN绕过工具

2-5-1 使用工具绕过,效果不佳

## 工具1:fuckcdn
https://github.com/Tai7sy/fuckcdn

## 工具2:w8fuckcdn
https://github.com/boy-hack/w8fuckcdn

2-5-2 DNS历史解析

这种历史记录查询,有可能能够找到它没有使用cdn之前的真实ip地址

可以用如下网站试一试。我就不试了

https://x.threatbook.com/v5/domain/wulaoban.top
https://dnsdb.io/zh-cn/ ###DNS查询
https://x.threatbook.cn/ ###微步在线
http://toolbar.netcraft.com/site_report?url=www.wulaoban.top ###在线域名信息查询
http://viewdns.info/ ###DNS、IP等查询
https://tools.ipip.net/cdn.php ###CDN查询IP
https://securitytrails.com/domain/wulaoban.top/dns

三,旁站和C段

3-1 什么是旁站?

3-2 什么是C段 ? 

简单来讲就是一个大的公司可能在一个IP段买了很多连号服务器 ,这些服务器就是C段

3-3 IISPutScanner

用来收集旁站和C段(需要工具请留言)

四,收集端口和服务

4-1 常用端口

这些端口需要记住,很多都是很常用的

4-2 nmap工具扫描

nmap工具的详细使用步骤我写了一篇博客详细讲了,请看下面这篇博客

nmap工具的使用_ANii_Aini的博客-CSDN博客扫描网段判断存活主机;扫描端口;扫描操作系统;基于三次握手去扫描;基于ACK包进行探测https://blog.csdn.net/m0_67844671/article/details/132805990?spm=1001.2014.3001.5502可以简单用以下,比如判断一个IP段的存活主机

 收集一个主机开放的端口和服务

4-3 自己编写的Python脚本

4-3-1 基于单线程找开放端口

## 端口扫描
## 对目标IP进行进行端口扫描,尝试连接IP和端口
# 单线程
import socket
def socket_port(ip):
	for port in range(1,100):
		try:
			s = socket.socket()
			s.settimeout(0.1)
			s.connect((ip,port))
			print(f'端口:-----{port}可用 ----------- yes')
		except socket.timeout:
			pass
		except:
			pass

4-3-2 基于多线程找开放端口

# 基于多线程进行端口扫描
import socket
def socket_port_thread(ip,start):
	for port in range(start,start+50):
		try:
			s = socket.socket()
			s.settimeout(0.01)
			s.connect((ip,port))
			print(f'端口:-----{port}可用 ----------- yes')
		except:
			pass

from threading import Thread
port_list = [22,25,80,443,3306,1521]
if __name__ == "__main__":
	# socket_port('192.168.31.162')
	for i in range(1,10000,50):
		Thread(target=socket_port_thread,args=('192.168.31.160',i)).start()

4-3-3 优化

## 优化思路:对常用端口进行优先扫描
import socket
import time

def socket_port_noramal(ip):
	list = [7,21,22,23,25,53,67,68,69,79,80,81,88,109,110,113,135,137,138,139,143,161,162,179,194,220,389,443,445,465,513,520,546,547,554,563,631,636,991,993,995,1080,1194,1433,1434,1494,1521,1701,1723,1755,1812,1813,1863,3269,3306,3307,3389,3544,4369,5060,5061,5355,5432,5671,5672,6379,7001,8080,8081,8088,8443,8883,8888,9443,9988,15672,50389,61613,61614]
	for port in list:
		try:
			s = socket.socket()
			s.settimeout(0.01)
			s.connect((ip,port))
			print(f'端口:-----{port}可用 ----------- yes')
		except:
			pass

if __name__ == "__main__":
	socket_port_noramal('192.168.31.162')

 4-3-4 用Python进行IP扫描

4-1 Ping扫描
## 如果要内网渗透,则必须要知道哪些IP地址是存活的,可访问的
## IP地址工作在IP层,ICMP,ARP协议也存在IP信息
## 先使用ping 命令进行IP探测,不过一旦防火墙禁止ICMP协议,那么也会扫不出来
import socket,threading,os
def ping_ip():
	for i in range(1,255):
		ip = f'192.168.31.{i}'
		res = os.popen(f'ping -n 1 -w 100 {ip}').read()
		if 'TTL=' in res:
			print(f'ip {ip} online')

		## 第二种过滤,直接在命令里过滤
		# res = os.popen(f'ping -n 1 -w 100 {ip} | findstr TTL=').read()
		# if len(res) > 0:
		# 	print(f'ip {ip} online')
ping_ip()
4-2 基于ARP协议
2-1 单线程
import scapy
from scapy.layers.l2 import ARP
from scapy.sendrecv import sr1

## 设置日志级别,不让错误信息打印出来
import logging
logging.getLogger('scary.runtime').setLevel(logging.ERROR)

def scapy_ip():
	for i in range(1,255):
		ip = f'192.168.31.{i}'
		try:
			pkg = ARP(psrc='192.168.31.17', pdst=ip)
			reply = sr1(pkg, timeout=3, verbose=False)
			print(f'IP {ip} online ----- {reply[ARP].hwsrc} ')
		except:
			pass

if __name__ == '__main__':
	scapy_ip()
 2-2 多线程
import threading
from scapy.layers.l2 import ARP
from scapy.sendrecv import sr1
import scapy

## 设置日志级别,不让错误信息打印出来
import logging
logging.getLogger('scapy.runtime').setLevel(logging.ERROR)

def scapy_ip(start):
	for i in range(start,start+20):
		ip = f'192.168.31.{i}'
		try:
			pkg = ARP(psrc='192.168.31.17', pdst=ip)
			reply = sr1(pkg, timeout=3, verbose=False)
			print(f'IP {ip} online ----- {reply[ARP].hwsrc} ')
		except:
			pass

if __name__ == '__main__':
	for i in range(1,255,20):
		threading.Thread(target=scapy_ip,args=(i,)).start()
2-3 扫描端口 
## 基于半链接,SYN / SYN,ACK / RA等标志位来对端口进行判断
## 如果目标端口开放,则 SYN -> SYN,ACK; 如果目标端口未开放,则SYN -> RA

import threading

from scapy.layers.inet import IP, TCP
from scapy.layers.l2 import ARP
from scapy.sendrecv import sr1
import scapy

## 设置日志级别,不让错误信息打印出来
import logging
logging.getLogger('scapy.runtime').setLevel(logging.ERROR)

def scapy_port(ip):
	# 通过指定源IP地址,可以进行IP欺骗,进而导致半链接,此列操作也可以用于flags参数定义上
	for port in range(20,100):
		try:
			pkg = IP(src = '192.168.31.17', dst = ip)/TCP(dport=port,flags='S')
			reply = sr1(pkg,timeout=1,verbose=False)
			res = reply[TCP].flags
			if res == 0x12:
				print(f"{port} 开放")
		except:
			pass

scapy_port('192.168.31.162')

五,收集敏感信息

5-1 目录信息收集

5-1-1 7kbscan工具检测

可以用默认字典,也可以指定字典,只要字典足够强大,可以收集到很多目录

比如下面发现了有一个phpmyadmin 这个是后台数据库登录页面,可以使用爆破登录或者弱口令登录等方式尝试进行攻击

 除此之外有可能收集到源代码备份目录,git仓库目录,或者一些重要配置文件等重要目录

5-1-2  dirsearch工具 

这是一款Python写的工具,需要有Python环境

下面是简单使用收集目录,详细使用方法自己收集一下资料

python3 .\dirsearch.py -u 192.168.31.162/pikachu -e php

 5-1-3 kali  dirbuster工具

六,综合信息收集

6-1 Google hack高级收集

Google搜索引擎之所以强大,关键在于它详细的搜索关键词,以下是几个常用的搜索关键词

inurl:  ## 用于查找含有该值的所有url网址网页。例:inurl:mail(可找一些免费邮箱)
related::## 找出和该网址类似的网站,比如想知道和amazon.com类似的大型网络书店有哪些时输入amazon.com网址。例:related:amazon.com

intext: ## 只搜索网页部分中包含的文字(也就是忽略了标题,URL等的文字).
filetype: ## 搜索通过文件的后缀或者扩展名来搜索含有这类文件的网页
intitle: ## 标题中存在关键字的网页
allintitle: ## 搜索所有关键字构成标题的网页. 但是推荐不要使用

link: ### 可以得到一个所有包含了某个指定URL的页面列表. 当我们使用link:URL提交查询的时候,Google会返回跟此URL做了链接的网站。例 [link:www.baidu.com],提交这个查询,我们将得到所有跟www.baidu.com这个网站做了链接的网站。(link是个单独的语 法,只能单独使用,且后面不能跟查询关键词,跟能跟URL)

location: ## 当我们提交location进行Google新闻查询的时候,Google仅会返回你当前指定区的跟查询关键词相关的网页。例[ queen location:canada ],提交这个查询,Google会返回加拿大的跟查询关键词”queen”相匹配的网站。

site: ## 搜索含有该域名的网页,google会限制尽在某个网站或者说域下面进行搜索
## 使用site进行站点搜索时,一般常见用法有:
site:ooxx.com filetype:xls  # 支持组合搜索
site:xxx.com admin  # 一般公司的后台系统都带有admin啊,login啊,内部系统啊之类的关键字
site:xxx.xxx login 
site:xxx.xxx system
site:xxx.xxx 管理
site:xxx.xxx 登录
site:xxx.xxx 内部
site:xxx.xxx 系统
site:xxx.xxx 邮件
site:xxx.xxx email
site:xxx.xxx qq
site:xxx.xxx 群
site:xxx.xxx 企鹅
site:xxx.xxx 腾讯
site:ooxx.com

练习

intext:管理
fietype:mdb ## 找到含有mdb类型文件的相关站点
site:baidu.com filetype:txt ### 查找百度这个域名下含有txt文件的相关站点
site:baidu.com intext:## 管理
site:baidu.com inurl:login
site:baidu.com intitle:## 后台
# 一般用于查找百度中能够找到的通过php、asp、jsp等语言开发的网站
site:baidu.com filetype:asp
site:baidu.com filetype:php
site:baidu.com filetype:jsp
site:baidu.com inurl:file # 这个一般用来找一些有上传文件动作的网站,之后可以检测是否有上传
文件漏洞。
# 查找某些国家或者地区的通过asp或php等语言开发的站点。
site:tw inurl:asp?id=   #查找台湾的相关网站的url中包含asp?id=这些关键字的站点
site:hk inurl:asp?id=   #查找香港的相关网站的url中包含asp?id=这些关键字的站点

6-2 FOFA

网络空间测绘,网络空间安全搜索引擎,网络空间搜索引擎,安全态势感知 - FOFA网络空间测绘系统FOFA 是白帽汇推出的一款网络空间搜索引擎,它通过进行网络空间测绘,能够帮助研究人员或者企业迅速进行网络资产匹配,例如进行漏洞影响范围分析、应用分布统计、应用流行度排名统计等。icon-default.png?t=N7T8https://fofa.info/

查询语法自己了解一下,我不多说,可以搜一下一个IP看看

6-3 钟馗之眼

ZoomEye - Cyberspace Search Engineicon-default.png?t=N7T8https://www.zoomeye.org/

 查询语法自己了解一下,我不多说

6-4 ARL灯塔资产侦查系统

6-4-1 Docker 启动

需要有docker环境,可以参考下面这篇文章进行安装和学习docker相关知识

docker及docker命令详解_ANii_Aini的博客-CSDN博客docker及docker命令详解;docker是一个软件,是一个运行与linux和windows上的软件,用于创建、管理和编排容器;docker平台就是一个软件集装箱化平台,是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,也可以实现虚拟化,并且容器之间不会有任何接口;https://blog.csdn.net/m0_67844671/article/details/132872790?spm=1001.2014.3001.5502

git clone https://github.com/TophantTechnology/ARL
cd ARL/docker/
docker volume create arl_db
docker-compose pull
docker-compose up -d 

6-4-2 docker-compose配置文件启动

mkdir docker_arl
wget -O docker_arl/docker.zip https://github.com/TophantTechnology/ARL/releases/download/v2.5.4/docker.zip
cd docker_arl
unzip -o docker.zip
docker-compose pull
docker volume create arl_db
docker-compose up -d

 6-4-3 用压缩包进行安装

(需要压缩包请留言,我可以分享)

unzip ARL-master   ## 进行解压缩
cd ARL-master
docker volume create arl_db
cd docker
docker-compose up -d 

安装完成以后可以访问了,5003端口

192.168.31.150:5003端口 

默认账号密码 admin/arlpass 

登录以后可以看到有非常多的功能

比如收集子域名 

任务列表------> 添加任务

 看到done,然后可以导出报告了 

 

可以自己多研究研究 

3-1 任务选项说明
编号选项说明
1任务名称任务名称
2任务目标任务目标,支持IP,IP段和域名。可一次性下发多个目标
3域名爆破类型对域名爆破字典大小, 大字典:常用2万字典大小。测试:少数几个字典,常用于测试功能是否正常
4端口扫描类型ALL:全部端口,TOP1000:常用top 1000端口,TOP100:常用top 100端口,测试:少数几个端口
5域名爆破是否开启域名爆破
6DNS字典智能生成根据已有的域名生成字典进行爆破
7域名查询插件已支持的数据源为12个,alienvault, certspotter,crtsh,fofa,hunter
8ARL 历史查询对arl历史任务结果进行查询用于本次任务
9端口扫描是否开启端口扫描,不开启站点会默认探测80,443
10服务识别是否进行服务识别,有可能会被防火墙拦截导致结果为空
11操作系统识别是否进行操作系统识别,有可能会被防火墙拦截导致结果为空
12SSL 证书获取对端口进行SSL 证书获取
13跳过CDN对判定为CDN的IP, 将不会扫描端口,并认为80,443是端口是开放的
14站点识别对站点进行指纹识别
15搜索引擎调用利用搜索引擎搜索下发的目标爬取对应的URL和子域名
16站点爬虫利用静态爬虫对站点进行爬取对应的URL
17站点截图对站点首页进行截图
18文件泄露对站点进行文件泄露检测,会被WAF拦截
19Host 碰撞对vhost配置不当进行检测
20nuclei 调用调用nuclei 默认PoC 对站点进行检测 ,会被WAF拦截,请谨慎使用该功能
3-2 配置参数说明

Docker环境配置文件路径 docker/config-docker.yaml

配置说明
CELERY.BROKER_URLrabbitmq连接信息
MONGOmongo 连接信息
QUERY_PLUGIN域名查询插件数据源Token 配置
GEOIPGEOIP 数据库路径信息
FOFAFOFA API 配置信息
DINGDING钉钉消息推送配置
EMAIL邮箱发送配置
GITHUB.TOKENGITHUB 搜索 TOKEN
ARL.AUTH是否开启认证,不开启有安全风险
ARL.API_KEYarl后端API调用key,如果设置了请注意保密
ARL.BLACK_IPS为了防止SSRF,屏蔽的IP地址或者IP段
ARL.PORT_TOP_10自定义端口,对应前端端口测试选项
ARL.DOMAIN_DICT域名爆破字典,对应前端大字典选项
ARL.FILE_LEAK_DICT文件泄漏字典
ARL.DOMAIN_BRUTE_CONCURRENT域名爆破并发数配置
ARL.ALT_DNS_CONCURRENT组合生成的域名爆破并发数
PROXY.HTTP_URLHTTP代理URL设置
3-3 忘记密码重置

当忘记了登录密码,可以执行下面的命令,然后使用 admin/admin123 就可以登录了。

docker exec -ti arl_mongodb mongo -u admin -p admin
use arl
db.user.drop()
db.user.insert({ username: 'admin',  password: hex_md5('arlsalt!@#'+'admin123') })

 今天的内容差不多就这些,需要工具或者有不懂的可以留言

欢迎技术交流,如果有错误希望能留言指正

举报

相关推荐

0 条评论