君子藏器于身待时而动,安全不露圭角覆盂之安。
——AnonySec
分析HTTP扫描模块
分析的模块位于/modules/auxiliary/scanner/http/http_version.rb
首先来看模块头的引入与类的定义:
1 | ## |
require 'rex/proto/http'
表示该模块将要引入这个rex
库文件目录下的所有http
协议方法,所有的模块都可以被调取使用。包括用于设置连接的函数,get和post的请求和响应处理等。Msf::Auxiliary
定义了该代码的类为辅助模块。
如下为/lib/rex/proto/http
目录下的内容:
[注:继承有助于重用代码和快速执行,不幸的是,Ruby不支持多继承,但是Ruby支持mixins。mixin就像是多继承的一个特定实现,在多继承中,只有接口部分是可继承的。]
1 | # Exploit mixins should be called first(首先调用渗透模块mixins类) |
上面代码所必需库文件中涵盖了编写模块所需要的所有方法,这些库文件的详细信息如下:
语句 | 引入路径 | 用途 |
---|---|---|
Msf::Exploit::Remote::HttpClient | /lib/msf/core/exploit/http/client.rb | 这个库文件提供了大量方法,例如连接到目标计算机、发送请求、切断与客户端的连接等。 |
Msf::Auxiliary::WmapScanServer | /lib/msf/core/auxiliary/wmapmodule.rb | wmap是一款基于Metasploit的通用Web应用程序扫描框架,有助于完成Metasploit的Web渗透测试。 |
Msf::Auxiliary::Scanner | /lib/msf/core/auxiliary/scanner.rb | 这个文件包含了基于扫描模块的所有函数,提供了模块运行、模块初始化、扫描进度等各种方法。 |
- 这个
initialize
方法是Ruby编程语言中的默认构造方法。它定义了名称Name
、描述Description
、作者Author
、许可License
等。许可就是'License' => MSF_LICENSE
,最后用一个end结束。
1 | def initialize |
最后这段代码才是真正干活做事的:
1 | def run_host(ip) |
先来解释下在本段代码中所使用的重要函数:
函数 | 引入库文件 | 用途 |
---|---|---|
run_host | /lib/msf/core/auxiliary/scanner.rb | 使用IP与所需主机建立连接 |
connect | /lib/msf/core/exploit/http/client.rb | 与目标服务器建立一个HTTP类型的连接 |
send_request_raw | /lib/msf/core/exploit/http/client.rb | 用来向目标发送原始的HTTP请求 |
http_fingerprint | /lib/msf/core/exploit/http/client.rb | 将HTTP响应解析为可以使用的变量 |
在这里会产生疑问,就是从代码上下文中根本不清楚函数的具体定义,该如何解决?这时就需要查询Metasploit API官方文档。
下面来具体查询分析下:
- run_host 在
run
方法中,作用是与所需主机建立连接。
begin
意味着代码块的开始。如果连接成功,就进行到connect方法,用于与目标服务器建立一个HTTP类型的连接。
- 之后使用send_request_raw方法,连接到服务器,创建请求,发送请求,读取响应。并将这个方法的参数
URI
的值设置为/
,参数method
的值设置为GET
,将这个响应保存在res
变量。
res = send_request_raw({ 'uri' => '/', 'method' => 'GET' })
- 如果连接成功,使用http_fingerprint方法,记录和过滤信息。如:Set-cookie、Powered-by等。
- 接着再把收到的响应信息赋值给
res
,意味着将根据之前发送请求的响应数据进行特征匹配。
fp = http_fingerprint(:response => res)
之后对这些响应数据进行输出打印。
最后,
rescue ::Timeout::Error, ::Errno::EPIPE
将会在模块超时的情况下处理程序的异常。
可见,输出的格式对应print_good("#{ip}:#{rport} #{fp}") if fp
References
《Mastering Metasploit - Third Edition》