5.2.2 更进一步——编辑源代码
Metasploit中的enum_dns模块有些过时了(我们可以通过检查TLD词表获取更新)。因此,需要定制该模块来满足我们的需求。方法是为enum_dns提供顶级域(TLD)词表,然后对条目进行解析和检查以查询记录。通过查看辅助模块的源代码,我们可以发现其查找的TLD列表中没有最近被启用的TLD,如图5-4所示。
我们可以查看modules/auxiliary/gather/enum.dns.rb文件的第302行,也可以通过以下链接在线访问该文件:
从上面的源代码中,我们可以看到TLD存储在tlds []数组中。我们通过执行以下步骤编辑代码实现TLD更新。你可以从互联网号码分配机构(Internet Assigned Numbers Authority,IANA)的网站找到最新的TLD列表,网址为http://data.iana.org/TLD/tlds-alpha-by-domain.txt。
图 5-4
1)从上面的URL下载TLD文件并删除以#开头的第一行,如图5-5所示。
图 5-5
2)在修改Metasploit模块之前,请使用以下命令备份enum_dns.rb文件:
请注意,Metasploit框架安装在/usr/local/share目录下。在本例中,我们将文件命名为enum_dns.rb.bak。
3)现在,使用任何一种文本编辑器打开enum_dns.rb文件,然后转到第29行,如图5-6所示。
图 5-6
4)让我们在代码中添加一个注册条目,以便将我们的TLD词表提供给Metasploit模块,如图5-7所示。
图 5-7
在此模块中,TLD枚举默认是被禁用的。从图5-7中可以看到,ENUM_TLD选项设置为TRUE时,可以通过将TLD替换为IANA TLD列表(旧列表)实现TLD扩展。
5)我们通过搜索ENUM_TLD字符串来查找function(),当TLD枚举选项处于启用状态时,将调用该函数。
从图5-8中可以看到,如果ENUM_TLD设置为TRUE,则将调用get_tld()函数。
图 5-8
6)现在让我们看一下get_tld()函数,如图5-9所示。
图 5-9
7)现在,我们通过添加一部分代码加载最新的TLD词表并将其保存在tlds []数组中,如图5-10所示。请注意,从图5-9中可以看出我们已经清空了TLD数组。
图 5-10
表5-1说明了图5-10中使用的函数和代码结构。
表 5-1
8)保存文件并在msfconsole中执行reload命令来重新加载框架中的模块,如图5-11所示。
图 5-11
9)使用定制的enum_dns模块并执行show options命令,如图5-12所示。
正如我们在图5-12中所看到的,我们已经把域设置为google.com来查找Google的TLD。我们还把TLD_WORDLIST选项设置为更新后的TLD词表。让我们执行它,如图5-13所示。
现在,更新后的Metasploit模块向我们显示了提供给模块本身的TLD。在下一节中,我们将使用Metasploit枚举文件和目录。
图 5-12
图 5-13