使用C#winform编写渗透测试工具--web指纹识别

本篇文章主要介绍使用C#winform编写渗透测试工具--Web指纹识别。在渗透测试中,web指纹识别是信息收集关键的一步,通常是使用各种工具如WhatWebWapplyzer、Whatruns等进行网站的指纹识别,以获取CMS类型、Web服务组件类型及版本信息,根据识别的信息在网站查询相应组件的漏洞,进行渗透测试。

  • 下面是使用C#winform编写的渗透测试工具,前面我们已经完成了端口扫描、敏感目录扫描和暴力破解等工作,这一部分将介绍如何实现web指纹识别。

目录

  1. 常见指纹检测对象
  2. 指纹识别方法
  3. 代码实现
  4. 软件使用步骤

一、常见指纹检测对象

  1. CMS信息:比如大汉CMS、织梦、帝国CMS、phpcms、ecshop等;

  2. 前端技术:比如HTML5、jquery、bootstrap、pure、ace等;

  3. Web服务器:比如Apache、lighttpd, Nginx, IIS等;

  4. 应用服务器:比如Tomcat、Jboss、weblogic、websphere等;

  5. 开发语言:比如PHP、Java、Ruby、Python、C#等;

  6. 操作系统信息:比如linux、win2k8、win7、kali、centos等;

  7. CDN信息:是否使用CDN,如cloudflare、360cdn、365cyd、yunjiasu等;

  8. WAF信息:是否使用waf,如Topsec、Jiasule、Yundun等;

  9. IP及域名信息:IP和域名注册信息、服务商信息等;

  10. 端口信息:有些软件或平台还会探测服务器开放的常见端口。

二、指纹识别方法

引用自Web指纹识别技术研究与优化实现

1. 特定特定文件的MD5

CMS是Content Management System的缩写,意为"内容管理系统",这是百度百科的解释,意思是相当于网站的建站模板,整个网站架构已经集成好了,只需要你部署和安装,便可以搭起一个网站,这样虽然方便了开发人员建设网站,但也带来新的安全问题,如果cms本身有安全问题如一些高危漏洞,那么使用这个cms的所有网站都会存在这种安全漏洞,所以我们在进行渗透测试的时候,如果可以探测出网站使用的框架,那么我们便可以寻找这个框架的漏洞,从而成功拿下这个网站,所以在渗透过程中,探测网站的cms是一件很重要的事,网上有开源的常见的cms的字典库,我们可以手写一个cms识别程序来对cms进行识别,方便我们进行渗透。

2. 正常页面或错误网页中包含的关键字

先访问首页或特定页面如robots.txt等,通过正则的方式去匹配某些关键字,如Powered by Discuz、dedecms等。或者可以构造错误页面,根据报错信息来判断使用的CMS或者中间件信息,比较常见的如tomcat的报错页面。

3. 请求头信息的关键字匹配

根据网站response返回头信息进行关键字匹配,whatweb和Wappalyzer就是通过banner信息来快速识别指纹,之前fofa的web指纹库很多都是使用的这种方法,效率非常高,基本请求一次就可以,但搜集这些规则可能会耗时很长。而且这些banner信息有些很容易被改掉。

根据response header一般有以下几种识别方式:

  • 查看http响应报头的X-Powered-By字段来识别;
  • 根据Cookies来进行判断,比如一些waf会在返回头中包含一些信息,如360wzws、Safedog、yunsuo等;
  • 根据header中的Server信息来判断,如DVRDVS-Webs、yunjiasu-nginx、Mod_Security、nginx-wallarm等;
  • 根据WWW-Authenticate进行判断,一些路由交换设备可能存在这个字段,如NETCORE、huawei、h3c等设备。

4. 部分URL中包含的关键字,比如wp-includes、dede等URL关键特征

通过规则库去探测是否有相应目录,或者根据爬虫结果对链接url进行分析,或者对robots.txt文件中目录进行检测等等方式,通过url地址来判别是否使用了某CMS,比如wordpress默认存在wp-includes和wp-admin目录,织梦默认管理后台为dede目录,solr平台可能使用/solr目录,weblogic可能使用wls-wsat目录等。

5. 开发语言的识别

web开发语言一般常见的有PHP、jsp、aspx、asp等,常见的识别方式有:

  • 通过爬虫获取动态链接进行直接判断是比较简便的方法。

    asp判别规则如下<a[^>]*?href=(‘|”)[^http][^>]*?\.asp(\?|\#|\1),其他语言可替换相应asp即可。
  • 通过X-Powered-By进行识别

    比较常见的有X-Powered-By: ASP.NET或者X-Powered-By: PHP/7.1.8
  • 通过Set-Cookie进行识别

    这种方法比较常见也很快捷,比如Set-Cookie中包含PHPSSIONID说明是php、包含JSESSIONID说明是java、包含ASP.NET_SessionId说明是aspx等。

三、代码实现

  • 以调用字典的形式对网站特定文件和特定文件的MD5值进行检测,判断网站的CMS,如python安全编程之指纹识别和b站视频Python安全编程,但该方法比较依赖字典的准确性。
  • 使用在线测试网站如Wappalyzer提供的Api接口,该软件就是基于该方法进行开发。

使用python编写脚本调用Api接口

import requests
import zlib
import json
import sys def whatweb(url):
response = requests.get(url, verify=False)
whatweb_dict = {"url":response.url,"text":response.text,"headers":dict(response.headers)}
whatweb_dict = json.dumps(whatweb_dict)
whatweb_dict = whatweb_dict.encode()
whatweb_dict = zlib.compress(whatweb_dict)
data = {"info":whatweb_dict}
return requests.post("http://whatweb.bugscaner.com/api.go", files=data) if __name__ == '__main__':
# request = whatweb("http://whatweb.bugscaner.com/apidoc.html")
request = whatweb(sys.argv[1])
# print(u"今日识别剩余次数")
# print(request.headers["X-RateLimit-Remaining"])
y = request.json()
print(u"识别结果:")
try:
print("CMS:", y['CMS'] )
except:
print("CMS:未识别")
try:
print("Programming Languages:", y['Programming Languages'])
except:
print("Programming Languages:未识别")
try:
print("JavaScript Frameworks:", y['JavaScript Frameworks'])
except:
print("JavaScript Frameworks:未识别")
try:
print("CDN:", y['CDN'])
except:
print("CDN:未识别")
try:
print("Advertising Networks", y['Advertising Networks'])
except:
print("Advertising Networks:未识别")
try:
print("Web Servers", y['Web Servers'])
except:
print("Web Servers:未识别")

C#调用脚本

对于python脚本中包含第三方模块的情况,同样,通过直接创建Process进程,调用python脚本,返回扫描结果。

  • 创建按钮按下事件button1_Click,运行“调用python脚本”函数runPythonwebfinger()
private void button12_Click(object sender, EventArgs e)
{
richTextBox7.Clear();
runPythonwebfinger();//运行python函数
label35.Text = "开始扫描...";
}
  • 实例化一个python进程 调用.py 脚本
void runPythonwebfinger()
{
string url = textBox5.Text;
p = new Process();
string path = "web_fingerprint_v2.py";//待处理python文件的路径,本例中放在debug文件夹下
string sArguments = path;
ArrayList arrayList = new ArrayList();
arrayList.Add(url);//需要挖掘的域名
foreach (var param in arrayList)//拼接参数
{
sArguments += " " + param;
}
p.StartInfo.FileName = @"D:\Anaconda\python.exe"; //没有配环境变量的话,可以写"xx\xx\python.exe"的绝对路径。如果配了,直接写"python"即可
p.StartInfo.Arguments = sArguments;//python命令的参数
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardInput = true;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
p.Start();//启动进程
//MessageBox.Show("启动成功");
p.BeginOutputReadLine();
p.OutputDataReceived += new DataReceivedEventHandler(p_OutputDataReceived_webfinger);
Console.ReadLine();
//p.WaitForExit();
}
  • 输出接收事件函数
void p_OutputDataReceived_webfinger(object sender, DataReceivedEventArgs e)
{
var printedStr = e.Data;
Action at = new Action(delegate ()
{
//接受.py进程打印的字符信息到文本显示框
richTextBox7.AppendText(printedStr + "\n");
label35.Text = "扫描结束";
});
Invoke(at);
}

软件使用步骤

*首先在url栏中输入地址,点击开始查询,最后得到网站指纹信息。

github地址:https://github.com/Chenmengx/Penetration-testing-tool

使用C#winform编写渗透测试工具--Web指纹识别的更多相关文章

  1. 使用C#winform编写渗透测试工具--敏感目录扫描

    使用C#winform编写渗透测试工具--敏感目录扫描 由于之前在做渗透测试的时候,发现使用的工具较多,切换起来较麻烦,便萌生了开发一个包含各种渗透测试工具的小程序,包括敏感目录扫描.端口查询.子域名 ...

  2. 使用C#winform编写渗透测试工具--SQL注入

    使用C#winform编写渗透测试工具--SQL注入 本篇文章主要介绍使用C#winform编写渗透测试工具,实现SQL注入的功能.使用python编写SQL注入脚本,基于get显错注入的方式进行数据 ...

  3. #使用C#winform编写渗透测试工具--子域名挖掘

    使用C#winform编写渗透测试工具--子域名挖掘 这篇文章主要介绍使用C#winform编写渗透测试工具--子域名挖掘.在渗透测试中,子域名的收集十分重要,通常一个网站的主站的防御能力特别强,而他 ...

  4. 使用C#winform编写渗透测试工具--暴力破解

    使用C#winform编写渗透测试工具--暴力破解 这篇文章主要介绍使用C#winform编写渗透测试工具--暴力破解.暴力破解是指通过利用大量猜测和穷举的方式来尝试获取用户口令的攻击方式.简单来说就 ...

  5. 使用C#winform编写渗透测试工具--端口扫描

    使用C#winform编写渗透测试工具--端口扫描器 主要介绍使用C#winform编写渗透测试工具--端口扫描器,端口扫描器则是一种检测服务器或者主机虚拟端口是开启或关闭的工具.由于连接到局域网或互 ...

  6. 轻量级Web渗透测试工具jSQL

    轻量级Web渗透测试工具jSQL jSQL是Kali集成的一款轻量级的Web渗透测试工具.最初该工具主要实施SQL注入,后来增加更多的功能,扩展形成一个综合性的Web渗透测试工具.Kali提供的版本较 ...

  7. github渗透测试工具库

    本文作者:Yunying 原文链接:https://www.cnblogs.com/BOHB-yunying/p/11856178.html 导航: 2.漏洞练习平台 WebGoat漏洞练习平台: h ...

  8. github渗透测试工具库[转载]

    前言 今天看到一个博客里有这个置顶的工具清单,但是发现这些都是很早以前就有文章发出来的,我爬下来后一直放在txt里吃土.这里一起放出来. 漏洞练习平台 WebGoat漏洞练习平台:https://gi ...

  9. 渗透测试工具BurpSuite做网站的安全测试(基础版)

    渗透测试工具BurpSuite做网站的安全测试(基础版) 版权声明:本文为博主原创文章,未经博主允许不得转载. 学习网址: https://t0data.gitbooks.io/burpsuite/c ...

随机推荐

  1. leetcode5698.基本计算器

    给你一个整数数组 nums ,和两个整数 limit 与 goal .数组 nums 有一条重要属性:abs(nums[i]) <= limit . 返回使数组元素总和等于 goal 所需要向数 ...

  2. Pytest学习笔记3-fixture

    前言 个人认为,fixture是pytest最精髓的地方,也是学习pytest必会的知识点. fixture用途 用于执行测试前后的初始化操作,比如打开浏览器.准备测试数据.清除之前的测试数据等等 用 ...

  3. 手摸手,带你用Beego撸商城系列二(登录篇)

    完整项目地址: go-shop-b2c 系列文章: 手摸手,带你用 Beego撸商城 系列一(基础篇) 手摸手,带你用 Beego撸商城 系列二(登录篇) 手摸手,带你用 Beego撸商城 系列三(系 ...

  4. Java基础篇(JVM)——类加载机制

    这是Java基础篇(JVM)的第二篇文章,紧接着上一篇字节码详解,这篇我们来详解Java的类加载机制,也就是如何把字节码代表的类信息加载进入内存中. 我们知道,不管是根据类新建对象,还是直接使用类变量 ...

  5. 痞子衡嵌入式:在串口波特率识别实例里逐步展示i.MXRT上提升代码执行性能的十八般武艺

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是在串口波特率识别实例里逐步展示i.MXRT上提升代码执行性能的十八般武艺. 恩智浦 MCU SE 团队近期一直在加班加点赶 SBL 项目 ...

  6. 重新整理 .net core 实践篇————配置中心[四十三]

    前言 简单整理一下配置中心. 正文 什么时候需要配置中心? 多项目组并行协作 运维开发分工职责明确 对风险控制有更高诉求 对线上配置热更新有诉求 其实上面都是套话,如果觉得项目不方便的时候就需要用配置 ...

  7. 其他:Windows10安装自带的Linux

    1.首先我们要打开Windows功能 2.在这里把勾打上 3.然后打开 设置 --- 更新和安全 --- 针对开发人员 --- (选择)开发人员模式 --- 确定启动 就行了 4.打开PowerShe ...

  8. challenge

    一.查壳 无壳的64位linux文件 二.拖入ida静态分析 F5反编译一下. 发现这段代码实际意义就是把字符串传进v7当中.v7的值就是flag值. 这个函数整体分析下来,各种递归,尝试用c语言来复 ...

  9. 新旧图号(图幅号)转换/计算/检查,经纬度转换计算,C#代码

    图号(图幅号):地图图号是指为便于使用和管理,按照一定方法将各分幅地图进行的编号. 经常用到图号,但是在网上一直没有找到一个完整的图号转换程序,因此自己写了一个图号处理的库,分享出来.如有错误请指正. ...

  10. http、tcp和socket简单理解

    1.Http属于应用层,主要解决如何包装数据. 2.Tcp属于传输层,主要解决数据如何在网络上传输. 3.Socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API) ...