今天就和大家说说在渗透测试中我们可能需要写的脚本函数。我平时使用python而不是手工语言来提高效率,所以我以python作为例子贯穿整个渗透过程的功能,也可以作为指导,有针对性的学习和练习。渗透过程通常包括两个主要部分:信息收集和漏洞利用。在信息采集中,我们需要采集目标的周边资产信息,即我们可以直接对外访问的服务器和应用,包括:域名信息、IP信息、内部员工信息、端口开放信息、Web应用信息等信息收集域名信息包括一级域名的注册信息和企业解析的所有二级域名列表等,可以通过whois查看注册信息。网上有很多网站提供whois查询功能。获取企业所有二级以上域名的方法有很多,比如:通过爬虫爬取目标网站,通过搜索引擎查找相关数据,通过字典枚举(dns解析)IP信息是所有IP开放的列表对外界来说,越多越好,获取IP的途径主要有两种,一种是通过收集到的域名来分析公司的IP列表;二是通过whois查询这些IP信息,看whois信息中是否包含目标公司的信息,从而确认IP的归属。有的时候,whois包含一个IP段,你可以通过IP获取公司的整个IP段。用户邮箱的收集主要是通过搜索引擎寻找那些没有安全意识和公开泄露的邮箱地址。您还可以使用在网上泄露的公司相关文件中保存的电子邮件地址。更多的方法我这里就不说了。端口信息的获取主要是通过扫描,利用之前收集到的IP信息,利用端口扫描获取所有开放的端口和相关服务。Web应用信息主要是方便我们查找Web应用的漏洞,包括Web指纹、服务器信息、目录结构等涉及自动化的场景(1)如果我们需要测试很多域名,想知道基本信息这些域名,一个一个去whois查询会不会很累?我们可以自动化吗?当然,可以实现的方法也很简单。我们在网上找了一个可以查询域名whois信息的网站,查看其查询接口,使用python的requests库请求接口查询。然后写一个for循环自动获取所有域名信息并保存。运行后自己查看结果即可。(2)收集二级域名列表时,需要从搜索引擎中提取相关记录。手动复制是不现实的。引擎获取搜索结果,提取二级以上域名。上面请求内容中提到,python的re库主要是用来提取域名的。学习正则表达式的使用非常重要。(3)除了爬虫和搜索引擎收集域名列表外,还可以使用字典枚举。枚举过程主要使用了dns解析函数和python中的socket库。有一个函数gethostbyname,可以实现你想要的功能,准备一个字典,开始运行就可以了。(4)如果你已经获取了大量的IP地址,想要扩展更多的IP地址,你需要对收集到的IP地址进行whois查询。Linux下有一个whois工具,可以直接查询IP地址的whois信息,效率还是挺高的。我们可以使用python的os模块和其他可以执行系统命令的模块来调用linux下的whois程序来查询你要查询的IP地址,最后对查询的所有结果进行处理。(5)得到IP列表和IP段后,我们需要知道这些IP上开放了哪些端口和服务。这时候我们就需要对这些IP进行端口扫描。最简单的方法是使用nmap扫描。python的调用方法同上,我们也可以自己写端口扫描工具,其核心是判断IP的某个端口是否开放。我们需要了解一下TCP的三次握手的原理。我们可以使用python的socket库,也可以使用scapy库构建协议进行测试。(6)当端口扫描需要提速,减少检测时间,这时就需要使用python的threading库,利用多线程技术提高速度,guthub上有很多封装好的threadpool库,直接用就好了。(7)对于Web应用,第一步是获取基础信息。我们可以使用python的httplib、urllib、urllib2等基础库来获取该IP的web端口下的基本信息,包括header中的服务器信息、默认首页的标题和内容等。(8)获取目录结构信息的第一种方式是利用爬虫根据网站的链接检测目录结构和文件列表。您还可以使用您收集的字典来枚举目录和文件。这里使用的库和上面的一样。同样,至于收藏的不全,也要看你收藏的字典够不够好。通过信息采集模块利用漏洞后,我们大致了解了企业的资产信息,其中可能包含存在漏洞的应用。在exploit阶段,需要自动化的地方并不多。毕竟,漏洞利用具有破坏性。即将提及。可以使用scapy构造协议来利用网络级别的漏洞。web层面主要是那些http协议相关的库,比如:urllib、httplib、requests等,大家可以补充讨论。总结一下这里说的东西还是不够全面。这篇文章的主要目的是告诉大家,在渗透的时候,尽量做到自动化,总结规律,提高工作效率,在有限的生活中做更多的事情。懒惰的人是改变世界的主要动力,有时候不要太勤奋,很容易导致你浪费很多无谓的时间。
