欢迎光临
我们一直在努力

网络安全实验-HTTP抓包教程

网络安全实验:我的第一次抓包体验

作者:网络安全学习者 实验环境:Kali Linux虚拟机 难度:⭐⭐ 适合小白

前言

作为一个刚入门网络安全的小白,我一直很好奇黑客是怎么获取别人账号密码的。这次在Kali虚拟机上做了一个完整的抓包实验,从零开始搭建了一个登录网站,然后用Wireshark成功抓取到了明文传输的账号密码。

重要提醒:本实验仅用于学习,严禁用于攻击他人!


实验目标

  • 搭建一个简单的登录网站
  • 学会使用Wireshark抓包工具
  • 抓取HTTP明文传输的账号密码
  • 理解为什么网站必须使用HTTPS

  • 准备工作

    我用的环境

    • 虚拟机:Kali Linux(自带很多黑客工具)
    • 编程语言:Python 3(Kali自带)
    • 抓包工具:Wireshark(Kali自带)

    检查工具是否安装

    打开终端输入以下命令检查:

    # 检查Python版本
    python3 –version

    # 检查Wireshark是否安装
    wireshark –version

    如果提示找不到命令,就安装一下:

    sudo apt update
    sudo apt install wireshark


    第一步:搭建登录网站

    1.1 创建项目文件夹

    mkdir ~/login_demo
    cd ~/login_demo

    1.2 安装Flask框架

    Flask是一个Python的网页开发框架,用起来很简单:

    pip3 install flask

    1.3 创建网站代码

    用nano编辑器创建文件:

    nano app.py

    然后把下面的代码复制粘贴进去:

    from flask import Flask, request, render_template_string, redirect, url_for

    app = Flask(__name__)

    # 模拟用户数据库(明文存储,用于演示)
    users = {
    'admin': 'admin123',
    'test': 'test456'
    }

    # 简单的HTML模板
    LOGIN_PAGE = '''
    <!DOCTYPE html>
    <html>
    <head>
    <title>登录页面 – 安全测试</title>
    <style>
    body {
    font-family: Arial, sans-serif;
    display: flex;
    justify-content: center;
    align-items: center;
    height: 100vh;
    margin: 0;
    background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
    }
    .login-box {
    background: white;
    padding: 40px;
    border-radius: 10px;
    box-shadow: 0 10px 25px rgba(0,0,0,0.2);
    width: 300px;
    }
    h2 {
    text-align: center;
    color: #333;
    margin-bottom: 30px;
    }
    .form-group {
    margin-bottom: 20px;
    }
    label {
    display: block;
    margin-bottom: 5px;
    color: #555;
    font-weight: bold;
    }
    input[type="text"], input[type="password"] {
    width: 100%;
    padding: 10px;
    border: 1px solid #ddd;
    border-radius: 5px;
    box-sizing: border-box;
    font-size: 14px;
    }
    button {
    width: 100%;
    padding: 12px;
    background: #667eea;
    color: white;
    border: none;
    border-radius: 5px;
    font-size: 16px;
    cursor: pointer;
    font-weight: bold;
    }
    button:hover {
    background: #5568d3;
    }
    .error {
    color: red;
    text-align: center;
    margin-bottom: 15px;
    }
    .info {
    margin-top: 20px;
    padding: 15px;
    background: #f0f0f0;
    border-radius: 5px;
    font-size: 12px;
    }
    .info h4 {
    margin-top: 0;
    color: #667eea;
    }
    </style>
    </head>
    <body>
    <div class="login-box">
    <h2>用户登录</h2>
    {% if error %}
    <p class="error">{{ error }}</p>
    {% endif %}
    <form method="POST" action="/login">
    <div class="form-group">
    <label for="username">用户名:</label>
    <input type="text" id="username" name="username" required>
    </div>
    <div class="form-group">
    <label for="password">密码:</label>
    <input type="password" id="password" name="password" required>
    </div>
    <button type="submit">登录</button>
    </form>
    <div class="info">
    <h4>测试账号:</h4>
    <p>用户名: admin<br>密码: admin123</p>
    <p>用户名: test<br>密码: test456</p>
    </div>
    </div>
    </body>
    </html>
    '''

    SUCCESS_PAGE = '''
    <!DOCTYPE html>
    <html>
    <head>
    <title>登录成功</title>
    <style>
    body {
    font-family: Arial, sans-serif;
    display: flex;
    justify-content: center;
    align-items: center;
    height: 100vh;
    margin: 0;
    background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
    }
    .success-box {
    background: white;
    padding: 40px;
    border-radius: 10px;
    box-shadow: 0 10px 25px rgba(0,0,0,0.2);
    text-align: center;
    }
    h2 {
    color: #4CAF50;
    }
    .user-info {
    margin: 20px 0;
    padding: 20px;
    background: #f0f0f0;
    border-radius: 5px;
    }
    a {
    display: inline-block;
    margin-top: 20px;
    padding: 10px 20px;
    background: #667eea;
    color: white;
    text-decoration: none;
    border-radius: 5px;
    }
    a:hover {
    background: #5568d3;
    }
    </style>
    </head>
    <body>
    <div class="success-box">
    <h2>✓ 登录成功!</h2>
    <div class="user-info">
    <p><strong>欢迎:</strong> {{ username }}</p>
    <p>您已成功登录系统</p>
    </div>
    <a href="/">返回登录页</a>
    </div>
    </body>
    </html>
    '''

    @app.route('/')
    def index():
    return render_template_string(LOGIN_PAGE)

    @app.route('/login', methods=['POST'])
    def login():
    username = request.form.get('username')
    password = request.form.get('password')

    # 验证用户
    if username in users and users[username] == password:
    return render_template_string(SUCCESS_PAGE, username=username)
    else:
    return render_template_string(LOGIN_PAGE, error='用户名或密码错误!')

    if __name__ == '__main__':
    # 使用HTTP(明文传输)用于演示抓包
    # 0.0.0.0 允许外部访问
    app.run(host='0.0.0.0', port=5000, debug=True)

    保存文件:按 Ctrl+X,然后按 Y,最后按 Enter

    1.4 启动网站

    python3 app.py

    看到这样的提示就成功了:

    * Running on http://127.0.0.1:5000
    * Running on http://0.0.0.0:5000

    不要关闭这个终端! 让它一直运行着。


    第二步:用Wireshark抓包

    2.1 打开Wireshark

    打开一个新的终端(保持网站运行),输入:

    sudo wireshark

    2.2 选择网络接口

    Wireshark打开后会看到一堆网络接口,我们选择 Loopback: lo(本地回环接口) 在这里插入图片描述

    2.3 设置过滤器

    在Wireshark顶部的过滤栏输入:

    http.request.method == "POST"

    这样只会显示POST请求,方便我们找到登录数据。

    2.4 开始抓包

    点击左上角的蓝色鲨鱼图标(或按Ctrl+E)开始抓包。


    第三步:测试登录

    3.1 打开浏览器

    在Kali里打开Firefox浏览器

    3.2 访问网站

    地址栏输入:

    http://127.0.0.1:5000

    你会看到一个紫色渐变背景的登录页面

    3.3 输入账号密码

    • 用户名:admin
    • 密码:admin123

    点击登录按钮


    第四步:查看抓包结果(重点!)

    4.1 回到Wireshark

    你会看到多了一条数据,大概长这样:

    POST /login HTTP/1.1

    点击这条记录

    4.2 查看明文密码

    在下方的详细信息面板:

  • 找到 Hypertext Transfer Protocol 这一行,点击展开
  • 找到 HTML Form URL Encoded 这一项
  • 你会看到:
  • Form item: "username" = "admin"
    Form item: "password" = "admin123"

    震惊了!账号密码完全暴露了!

    4.3 查看完整数据流

    右键点击这条记录 → Follow → HTTP Stream

    你会看到完整的HTTP请求:

    POST /login HTTP/1.1
    Host: 127.0.0.1:5000
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 32

    username=admin&password=admin123

    这就是我们通过网络发送的数据,完全没有加密!


    实验结果分析

    为什么能抓到密码?

  • HTTP是明文协议:数据在网络上传输时没有任何加密
  • 同一网络可被监听:只要在同一个局域网,就能用Wireshark抓包
  • POST数据也不安全:很多人以为POST比GET安全,其实在HTTP下都是明文

  • HTTPS和HTTP的区别

    特性HTTPHTTPS
    加密 ❌ 明文传输 ✅ TLS/SSL加密
    安全性 ❌ 可被窃听 ✅ 无法解密
    浏览器显示 ⚠️ “不安全” 🔒 锁图标
    端口 80 443

    在Wireshark里抓HTTPS流量,你只会看到一堆乱码(加密数据),根本看不到密码!


    Wireshark常用过滤器

    学会这些过滤器,抓包效率翻倍:

    # 只看HTTP流量
    http

    # 只看POST请求
    http.request.method == "POST"

    # 看包含"password"关键词的数据包
    http contains "password"

    # 看特定端口的流量
    tcp.port == 5000

    # 看特定IP的流量
    ip.addr == 127.0.0.1

    # 组合条件
    http.request.method == "POST" and http contains "login"


    我遇到的问题和解决方法

    问题1:Wireshark抓不到lo接口的包

    解决方法:

    sudo chmod +x /usr/bin/dumpcap
    sudo setcap cap_net_raw,cap_net_admin=eip /usr/bin/dumpcap

    问题2:浏览器自动跳转HTTPS

    有些浏览器记住了网站必须用HTTPS访问(HSTS机制)

    解决方法:

    • 用隐私模式/无痕模式打开浏览器
    • 或者清除浏览器缓存

    问题3:Flask提示端口被占用

    解决方法:

    # 查看哪个程序占用了5000端口
    sudo netstat -tuln | grep 5000

    # 杀掉那个进程(PID是进程号)
    sudo kill -9 <PID>


    进阶玩法

    玩法1:抓其他机器的流量

  • 查看Kali的IP地址:
  • ip addr show

  • 在同一网络的另一台电脑访问:
  • http://[Kali的IP]:5000

  • Wireshark选择 eth0 或 wlan0 接口抓包
  • 玩法2:用命令行抓包(tcpdump)

    sudo tcpdump -i lo -A -s 0 'tcp port 5000'

    • -i lo:监听本地回环
    • -A:用ASCII显示内容
    • -s 0:抓取完整数据包

    实验总结

    这次实验让我明白了:

  • ✅ HTTP真的很不安全,明文传输的数据任何人都能看到
  • ✅ Wireshark很强大,能看到网络上传输的所有数据
  • ✅ HTTPS是必需的,保护用户隐私的基本要求
  • ✅ 网络安全很重要,一个小疏忽就可能导致数据泄露
  • 作为网络安全的学习者,我们要:

    • 🔐 用这些知识保护系统安全
    • ⚖️ 遵守法律法规和职业道德
    • 📚 持续学习新的攻防技术

    清理环境

    实验做完记得清理:

    # 停止Flask(在运行Flask的终端按Ctrl+C)

    # 停止Wireshark抓包

    # 删除测试文件(可选)
    cd ~
    rm -rf login_demo


    最后的话

    这是我第一次完整地做抓包实验,从搭建网站到成功抓取密码,整个过程大概花了1个小时。虽然是个简单的小项目,但让我对网络安全有了更直观的认识。

    如果你也是小白,强烈建议亲手试一遍!看别人的教程和自己动手的感觉完全不一样。

    记住:学习黑客技术是为了更好地防御,而不是攻击他人!


    📝 本文档由作者原创 💻 实验环境:Kali Linux 📅 完成日期:2026年 ⚠️ 仅供学习交流,严禁用于非法用途


    参考资料

    • Flask官方文档:https://flask.palletsprojects.com/
    • Wireshark用户手册:>https://www.wireshark.org/docs/wsug_html_chunked/
    • HTTP协议详解:MDN Web Docs
    • 《白帽子讲Web安全》- 吴翰清
    赞(0)
    未经允许不得转载:171主机测评 » 网络安全实验-HTTP抓包教程
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址