1-信息收集
1.1 域名信息
whois、域名反查、ICP备案、企业信息查询
子域名收集工具:Layer子域名挖掘机等
原理:枚举、字典
域名:baidu.com
子域名:news.baidu.com、map.baidu.com、www.baidu.com、...
域名DNS信息
Domain Name Server 域名解析服务
www.baidu.com --> 域名解析服务 --> 220.181.38.148
需要去DNS服务器对域名及子域名进行配置解析
记录类型 | 标志 |
---|---|
A | A记录是最常用的类型,将域名指向一个IPv4地址,如 8.8.8.8 |
CNAME | 将域名指向另一个域名地址,与其保持相同解析,如 https://www.dnspod.cn |
MX | 用于邮件服务器,相关参数一般由邮件注册商提供 |
TXT | 可填写附加文本信息,常用于域名验证是你的 |
NS | 域名服务器记录,可将指定域名交由其他DNS服务商解析管理 |
AAAA | 将域名指向一个IPv6地址,如 ff06:0:0:0:0:0:0:c3 |
1.2 IP信息
一、DNS解析流程
二、ping/nslookup
- 可以通过域名获取映射的IP
三、如何获取CDN背后的真实IP
CDN(Content Delivery Network)内容分发网络,相当于多台服务器作为源站的副本。将源站的资源缓存在全国各地的边缘服务器,供用户就近获取,降低源站压力。
CDN是什么?使用CDN有什么优势?
- 超级ping
https://ping.chinaz.com/ - 查询历史DNS记录
思路:公司小规模时,解析到哪个IP过,有可能是真实IP - 通过子域名查询
思路:不是所有服务(域名)都会使用CDN,如果子域名和主域名部署在同一个服务器上,则可以通过子域名去获取真实IP - 国外主机解析
思路:找不到节点,从而不经过CDN服务,访问源站 - 网络搜索引擎
fofa、censys
1.3 端口服务信息
一、端口扫描思路和代码实现
1、查看本机端口信息
Windows ---> netstat -aon|findstr 3306
Linux ---> netstat -an|grep 3306
2、远程机器端口
talnet xxx.xxx.xxx.xxx 80
wget xxx.xxx.xxx.xxx 80
nc -vz xxx.xxx.xxx.xxx 80-9000
3、扫描10000个端口python实现(web)
import socket, threading
def TCP_connect(ip, port_number, delay, output):
TCPsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
TCPsock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
TCPsock.settimeout(delay)
try:
TCPsock.connect((ip, port_number))
output[port_number] = 'Listening'
except:
output[port_number] = ''
def scan_ports(host_ip, delay):
threads = [] # To run TCP_connect concurrently
output = {} # For printing purposes
# Spawning threads to scan ports
# 先扫10000个端口
for i in range(10000):
t = threading.Thread(target=TCP_connect, args=(host_ip, i, delay, output))
threads.append(t)
# Starting threads
for i in range(10000):
threads[i].start()
# Locking the script until all threads complete
for i in range(10000):
threads[i].join()
# Printing listening ports from small to large
for i in range(10000):
if output[i] == 'Listening':
print(str(i) + ': ' + output[i])
def main():
host_ip = input("Please enter host IP: ")
# 超时抛出异常
delay = int(input("How many seconds the socket is going to wait until timeout: "))
scan_ports(host_ip, delay)
input("Press Any Key to Exit")
if __name__ == "__main__":
main()