一,域名信息收集
1-1 域名信息查询
可以用一些在线网站进行收集,比如站长之家
可以查看一下有没有有用的信息,不过一些大网站优化的很好,一般没有什么可用信息的。
其他查询网站
1-2 SEO信息查询
站长之家可以查
可以看到一些备案信息,真实IP地址等一些信息
1-3 子域名收集
1-3-1 在线收集子域名
子域名查询 - 站长工具子域名查询https://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.https://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备案信息和小程序备案,快应用备案信息。https://icp.chinaz.com/
1-4-2 ICP备案号查询
https://beian.miit.gov.cn/https://beian.miit.gov.cn/
有了备案号,可以通过备案号查询这个公司的其他备案的子域名
1-4-3 ssl证书查询
SSL状态检测本站提供的SSL状态检测工具,可以检测出证书详细信息、证书链详细信息、当前支持协议、加密套件详细信息,可以为您的服务器证书部署状态提供最详细说明,如果你的证书部署状态存在缺陷,我们还提供了详细的建议信息,协助你配置出最安全的SSL站点。https://myssl.com/ssl.html
SSL证书在线检测工具-中国数字证书CHINASSLSSL证书在线检测工具-中国数字证书CHINASSLhttps://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服务器以检测服务器响应速度。https://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 是白帽汇推出的一款网络空间搜索引擎,它通过进行网络空间测绘,能够帮助研究人员或者企业迅速进行网络资产匹配,例如进行漏洞影响范围分析、应用分布统计、应用流行度排名统计等。https://fofa.info/
查询语法自己了解一下,我不多说,可以搜一下一个IP看看
6-3 钟馗之眼
ZoomEye - Cyberspace Search Enginehttps://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 | 域名爆破 | 是否开启域名爆破 |
6 | DNS字典智能生成 | 根据已有的域名生成字典进行爆破 |
7 | 域名查询插件 | 已支持的数据源为12个,alienvault , certspotter ,crtsh ,fofa ,hunter 等 |
8 | ARL 历史查询 | 对arl历史任务结果进行查询用于本次任务 |
9 | 端口扫描 | 是否开启端口扫描,不开启站点会默认探测80,443 |
10 | 服务识别 | 是否进行服务识别,有可能会被防火墙拦截导致结果为空 |
11 | 操作系统识别 | 是否进行操作系统识别,有可能会被防火墙拦截导致结果为空 |
12 | SSL 证书获取 | 对端口进行SSL 证书获取 |
13 | 跳过CDN | 对判定为CDN的IP, 将不会扫描端口,并认为80,443是端口是开放的 |
14 | 站点识别 | 对站点进行指纹识别 |
15 | 搜索引擎调用 | 利用搜索引擎搜索下发的目标爬取对应的URL和子域名 |
16 | 站点爬虫 | 利用静态爬虫对站点进行爬取对应的URL |
17 | 站点截图 | 对站点首页进行截图 |
18 | 文件泄露 | 对站点进行文件泄露检测,会被WAF拦截 |
19 | Host 碰撞 | 对vhost配置不当进行检测 |
20 | nuclei 调用 | 调用nuclei 默认PoC 对站点进行检测 ,会被WAF拦截,请谨慎使用该功能 |
3-2 配置参数说明
Docker环境配置文件路径 docker/config-docker.yaml
配置 | 说明 |
---|---|
CELERY.BROKER_URL | rabbitmq连接信息 |
MONGO | mongo 连接信息 |
QUERY_PLUGIN | 域名查询插件数据源Token 配置 |
GEOIP | GEOIP 数据库路径信息 |
FOFA | FOFA API 配置信息 |
DINGDING | 钉钉消息推送配置 |
邮箱发送配置 | |
GITHUB.TOKEN | GITHUB 搜索 TOKEN |
ARL.AUTH | 是否开启认证,不开启有安全风险 |
ARL.API_KEY | arl后端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_URL | HTTP代理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') })
今天的内容差不多就这些,需要工具或者有不懂的可以留言
欢迎技术交流,如果有错误希望能留言指正