信息搜集

域名信息搜集

域名用于代替 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指纹识别

指纹识别定义

指纹识别就是指根据关键特征,识别程序名称、版本等信息。指纹识别的对象主要为:

  1. CMS信息:比如Discuz、织梦、PHPCMS等
  2. 前端技术:比如HTML5、Vue、ace等
  3. 开发语言:比如PHP、Java、Ruby等
  4. web服务器:比如Apache、Nginx等
  5. 应用服务器:比如Tomcat、Jboss等
  6. 操作系统信息:比如Linux、 win7等
  7. CDN信息:是否使用CDN,如cloudflare、阿里云等
  8. WAF信息:是否使用WAF,如D盾、安全狗、宝塔等

CMS是什么

CMS是内容管理系统,常见有WordPress、Discuz等等,不同的CMS适合不同的系统,例如WordPress适合博客系统,Discuz适合论坛系统。

CMS指纹识别的思路

  1. 在网页的最底端有版权信息,可以看到Powered by XXX,但是大多数站主会将这个信息隐藏
  2. 特定的文件MD5,不同的CMS的文件MD5值是固定的
  3. 查看网页源代码,分析特定的路径或者代码内容可以判断特定的CMS
  4. 不同的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的指纹识别工具有很多,其中有一些基本常用的工具

  1. kali命令ldb
    ldb www.12306.cn
  2. ping www.baidu.com
  3. nslookup www.baidu.com
  4. 超级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的识别工具

  1. kali命令:wafw00f https://www.12306.cn
  2. Nmap: nmap www.12306.cn --script=http-waf=detect.nse
  3. sqlmap
  4. https://github.com/0xInfection/Awesome-WAF

由于剩下的内容比较繁多但是很简单,便不记录下来。此篇文章到此结束,若有问题或任何突发奇想的想法,后续会更新。

Last modification:January 1, 2023
If you think my article is useful to you, please feel free to appreciate