利用Whatweb获取Web指纹信息

又是很久没有更新博客啦,为啥呢?因为在忙开发、开发、开发。我最近在研究指纹扫描以及漏洞扫描方面的设计与开发,从前端、后端到数据存储、消息队列再到分布式部署,感觉自己简直快成全栈了。不过开发过程中也有很多收获,有时间我会写博客分享一下。

那么今天写点啥呢?就分享个很老的安全工具吧——whatweb,相信很多朋友应该知道,用来扫web指纹的。为啥会用到它,因为项目需要啊,其实也可以不用,因为我自己写了很多扫描指纹的插件,这个只是作为备案选择而已。但既然用到了,那就理所当然要为它打call。好了,照旧先介绍如何安装,再介绍如何使用,本文重点在于环境安装,以及如何在python代码中比较的使用whatweb。

安装升级ruby

whatweb是用ruby开发的,因此服务器上需要安装ruby,且对版本有要求,貌似必须2.0以上(没记错的话)。目前很多服务器内置的ruby是1.8的,或者用yum install ruby安装的也是1.8的,因此需要安装或者升级版本到2.0以上才行。

升级方案one(推荐)

先删除原来的ruby:

yum remove ruby ruby-devel

下载ruby安装包,并进行编译安装:

wget http://cache.ruby-lang.org/pub/ruby/2.1/ruby-2.1.2.tar.gz

tar xvfvz ruby-2.1.2.tar.gz

./configure

make

sudo make install

将ruby添加到环境变量,ruby安装在/usr/local/bin/目录下,因此编辑 ~/.bash_profile文件,添加一下内容:

PATH=$PATH:/usr/local/bin/

不要忘了生效一下:

source~/.bash_profile

升级方案two

先安装rvm,这是ruby的包管理器:

$source~/.bash_profile

测试是否安装成功:

rvm -v

利用rvm升级ruby:

ruby -v #查看当前ruby版本

rvm list known#列出已知的ruby版本

rvm install 2.0#安装ruby 2.0

安装whatweb

说起来这个就很简单,直接去github上clone下项目:

gitclonehttps://github.com/urbanadventurer/WhatWeb.git

项目内已经有编译好的可执行文件,whatweb,只需要添加个环境变量:

PATH=$PATH:/root/WhatWeb-master/

使用whatweb

具体详细的使用方式就要参考github了,我这边只介绍怎么在python中使用whatweb。

废话不多说,直接上代码:

#! -*- coding:utf-8 -*-

import commands

import re

# 正则表达式

p_httpserver=re.compile(r"HTTPServer\x1b\[0m\[\x1b\[1m\x1b\[36m([^,]+?)\x1b\[0m\]")

p_title=re.compile(r"Title\x1b\[0m\[\x1b\[1m\x1b\[33m(.+?)\x1b\[0m\]")

p_ip=re.compile(r"IP\x1b\[0m\[\x1b\[37m([^,]+?)\x1b\[0m\]")

p_country=re.compile(r"Country\x1b\[0m\[\x1b\[37m([^,]+?)\x1b\[0m\]")

p_cookies=re.compile(r"Cookies\x1b\[0m\[\x1b\[37m([^,]+?)\x1b\[0m\]")

p_x_powered_by=re.compile(r"X-Powered-By\x1b\[0m\[\x1b\[37m([^,]+?)\x1b\[0m\]")

def re_grep(p,content):

# 正则处理

L=p.findall(content)

iflen(L)>0:

returnL[0]

else:

return""

def whatweb(url):

# whatweb扫描

result=""

httpserver=""

title=""

ip=""

cookies=""

country=""

power_by=""

try:

status,result=commands.getstatusoutput('whatweb '+url)

# print status,result

except IndexError,e:

printe

else:

httpserver=re_grep(p_httpserver,result)

title=re_grep(p_title,result)

ip=re_grep(p_ip,result)

country=re_grep(p_country,result)

cookies=re_grep(p_cookies,result)

power_by=re_grep(p_x_powered_by,result)

returnhttpserver,title,cookies,country,power_by

if__name__=="__main__":

result=whatweb("thief.one")

foriinresult:

printi

说明:解释一下代码,主要就是一个正则表达式,因为运行whatweb会直接将结果打印,当然也有其他命令可以让其结果输出到文本等,但如果想要批量自动化扫描的话,需要实时获取whatweb的内容,生成文件的方式显然不行,因此我用了commands库,让python执行系统命令并获取返回结果,然后就是几个正则对结果的匹配。

结束之语:又水了一篇,嗯嗯!

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180111G0V6VA00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券