信息搜集
域名信息搜集
域名用于代替 IP ,找到网络上的一台计算机。例如:www.baidu.com通过域名解析服务,可以得到类似于 220.181.38.148 的 IP 地址。
联系人信息搜集
想要查询联系人信息,可以通过 whois 查询,常见的查询工具有在线网站:
https://whois.chinaz.com
http://whoissoft.com
https://whois.cnnic.cn/welcomservlet
除此之外还有 kali 自带的 whois 命令
通过已知的部分联系人信息反查域名,也有一些常见的在线网站:
http://whois.chinaz.com/reverse
此外还需要了解 ICP 备案,可以得到姓名、备案号、邮箱等信息,常见的工具有一些在线网站:
https://beian.miit.gov.cn/
https://icp.chinaz.com/
https://www.beian88.com/
子域名信息搜集
子域名信息搜集是域名信息搜集下的一个小分支。由于站主可能在主要的域名设置了 CDN ,这样想要获取到服务器的真实 IP 会更加困难。如果是子域名,用户量不大,就有可能没有 CDN ,又有可能部署在同一台服务器上,获取到的 IP 地址就是真实IP了。
子域名搜集的常见工具有:
Layer子域名挖掘机(软件)
https://phpinfo.me/domain
https://github.com/lijiejie/subdomainsbrute
DNS信息搜集
记录类别:
A 将域名指向一个ipv4地址
CNAME 将域名指向另一域名地址,与其保持相同解析
MX 用于邮件服务器
TXT 可填写附加文本信息,常用于域名验证
NS 可将指定域名交由其他DNS服务商解析管理
AAAA 将域名指向一个ipv6地址
DNS信息搜集的常用工具有一些在线网站和kali自带的命令:
http://dbcha.com/
https://sitereport.netcraft.com/
http://www.jsons.cn/nslookup/kali命令:
host baidu.com
dig baidu.com
IP信息搜集
IP信息搜集,目的就是要通过这个域名获取到服务器的IP地址。首先了解一下DNS服务器的类型:本地域名服务器、根域名服务器、顶级域名服务器、授权域名服务器。
本地DNS查询发送到本地DNS服务器是本地域名服务器的作用之一。根域名服务器负责全球域名的解析,全球有13组根域名服务器。顶级域名服务器(TLD Server)负责相应顶级域的解析(.com .net)。授权域名服务器解析三级域名。
根据域名获得IP
根据域名获得IP的常见工具有命令
ping --- man ping
nslookup --- nslookup -type="MX"baidu.com
查询IP归属可以通过一些在线网站,例如:
http://ipwhois.cnnic.net.cn/
获取CDN背后的真实IP
首先可以了解一下什么是CDN。CDN就是Content Delivery Network(内容分发网络),可以让在各个不同的地点的网络用户,都可以迅速访问到网站提供的内容。常见的厂商有CloudFlare/CloudFront/帝联/蓝讯/网宿,七牛云/腾讯/百度/阿里云等。
CDN的工作流程:当终端用户(北京)向www.a.com下的指定资源发起请求时,首先向LDNS(本地DNS)发起域名解析请求。LDNS检查缓存中是否有www.a.com的IP地址记录。如果有,则直接返回给终端用户;如果没有,则向授权DNS查询。当授权DNS解析www.a.com时,返回域名CNAME www.a.tbcdn.com对应IP地址。域名解析请求发送至DNS调度系统,并为请求分配最佳节点IP地址。LDNS获取DNS返回的解析IP地址,然后用户获取解析IP地址,然后用户向获取的IP地址发起对该资源的访问请求。
要想获取CDN背后的真实IP之前,需要先了解网站是否使用了CDN,方法便是查看ip的数量:
http://ping.chinaz.com
nslookup
通过这个在线网站,可以从多个地方发起对这个网站的请求,如果网站使用了CDN,IP的数量应该不止一个。
了解到确实使用了CDN后,可以通过查询历史DNS解析记录的方式获取到真实IP,但不一定完全可行。在网站上线的一开始,用户量少数据量不大的时候,网站可能并没有使用CDN,如果能找到以前解析过某个IP,这个IP就有可能是真实IP。查询历史DNS的方式主要是通过在线网站:
http://dnshistory.org/
http://toolbar.netcraft.com/site_report?url=
https://tools.ipip.net/cdn.php
https://github.com/vincentcox/bypass-firewalls-by-DNS-history
除了查询历史DNS的方法之外,也可以通过上面提到过的通过子域名去查询。
下一种方法是通过国外主机去解析。如果在国外一个很偏僻的地方发起访问,它找不到最近的一个节点,就有可能会去请求源站。以下网站可以从国外发起请求:
https://asm.ca.com/zh_cn/ping.php
http://host-tracker.com/
http://www.webpagetest.org/
https://dnscheck.pingdom.com/
端口服务信息搜集
单行命令扫描方式
如果是自己的机器,例如在Windows平台上可以通过
netstat -aon|findstr 3306
的命令去查看端口信息,在Linux上可以通过
netstat -an|grep 3306
的命令去查看端口信息。但是如果是远程的机器,没有办法手动输入命令,可以根据端口号的范围 1-65535 去发送数据包,如果有响应,则对应的端口是开放的。
telnet 192.168.142.137 80
这条命令可以在Linux上连接到80端口,如果连接上了,说明端口是开放的。
nc -vz 192.168.142.137 445
这条命令可以连接到445端口上(支持批量扫描:455-65535),可以显示端口的状态,并且探测服务的名字。
单脚本扫描方式
如果端口数量太多,一个一个扫描的效率太低,这里有一段扫描端口的python代码。
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()
使用现有工具扫描(多脚本)
现成的端口扫描工具主要有两个。第一个是多个平台都有的工具--Nmap去扫描端口。Kali Linux自带了Nmap的工具,其他平台可以使用Nmap的图形版--Zenmap。主要的扫描方式有以下几种:
简单扫描:
nmap -sP 192.168.142.137
指定端口或范围扫描:
nmap -p0-65535 192.168.142.137
探测操作系统:
nmap -O 192.168.142.137
只进行主机发现,不进行端口扫描:
nmap -sn 192.168.40.195/24
那么第二种工具就是在线的端口扫描网站,例如:
http://coolaf.com/tool/port
CMS指纹识别
指纹识别定义
指纹识别就是指根据关键特征,识别程序名称、版本等信息。指纹识别的对象主要为:
- CMS信息:比如Discuz、织梦、PHPCMS等
- 前端技术:比如HTML5、Vue、ace等
- 开发语言:比如PHP、Java、Ruby等
- web服务器:比如Apache、Nginx等
- 应用服务器:比如Tomcat、Jboss等
- 操作系统信息:比如Linux、 win7等
- CDN信息:是否使用CDN,如cloudflare、阿里云等
- WAF信息:是否使用WAF,如D盾、安全狗、宝塔等
CMS是什么
CMS是内容管理系统,常见有WordPress、Discuz等等,不同的CMS适合不同的系统,例如WordPress适合博客系统,Discuz适合论坛系统。
CMS指纹识别的思路
- 在网页的最底端有版权信息,可以看到Powered by XXX,但是大多数站主会将这个信息隐藏
- 特定的文件MD5,不同的CMS的文件MD5值是固定的
- 查看网页源代码,分析特定的路径或者代码内容可以判断特定的CMS
- 不同的CMS有不同的固定文件,例如robots.txt
CMS指纹识别的工具
第一个工具就是kali自带的工具:whatweb命令
用法:
whatweb -v www.discuz.net
第二个工具是浏览器插件,固定图标后点击一下就可以识别信息:
whatruns -- https://www.whatruns.com/
Wappalyzer -- https://www.wappalyzer.com
第三个工具是在线网站:
http://whatweb.bugscaner.com
http://finger.tidesec.com/
第四个工具是一个开源程序:
https://github.com/Tuhinshubhra/CMSeeK
CDN指纹识别
CDN指纹识别工具
CDN的指纹识别工具有很多,其中有一些基本常用的工具
- kali命令ldb
ldb www.12306.cn - ping www.baidu.com
- nslookup www.baidu.com
- 超级ping: http://ping.chinaz.com
除了这些基本工具之外,还有一些专用的识别工具:
http://cdn.chinaz.com
https://www.cdnplanet.com/tools/cdnfinder/
WAF指纹识别
首先知道什么是WAF。WAF是web应用防火墙,用于过滤http或https请求,识别并拦截恶意请求。其类型分为硬件型WAF、云WAF、软件型WAF。
触发WAF的方法
在url或者表单输入恶意内容就会被拦截下来,例如:
xsstring = '<script>alert("XSS");</script>'
WAF的识别工具
- kali命令:wafw00f https://www.12306.cn
- Nmap: nmap www.12306.cn --script=http-waf=detect.nse
- sqlmap
- https://github.com/0xInfection/Awesome-WAF
由于剩下的内容比较繁多但是很简单,便不记录下来。此篇文章到此结束,若有问题或任何突发奇想的想法,后续会更新。