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

网络安全实验-HTTP抓包教程
网络安全实验我的第一次抓包体验作者网络安全学习者实验环境Kali Linux虚拟机难度⭐⭐ 适合小白前言作为一个刚入门网络安全的小白我一直很好奇黑客是怎么获取别人账号密码的。这次在Kali虚拟机上做了一个完整的抓包实验从零开始搭建了一个登录网站然后用Wireshark成功抓取到了明文传输的账号密码。重要提醒本实验仅用于学习严禁用于攻击他人实验目标搭建一个简单的登录网站学会使用Wireshark抓包工具抓取HTTP明文传输的账号密码理解为什么网站必须使用HTTPS准备工作我用的环境虚拟机Kali Linux自带很多黑客工具编程语言Python 3Kali自带抓包工具WiresharkKali自带检查工具是否安装打开终端输入以下命令检查# 检查Python版本python3--version# 检查Wireshark是否安装wireshark--version如果提示找不到命令就安装一下sudoaptupdatesudoaptinstallwireshark第一步搭建登录网站1.1 创建项目文件夹mkdir~/login_democd~/login_demo1.2 安装Flask框架Flask是一个Python的网页开发框架用起来很简单pip3installflask1.3 创建网站代码用nano编辑器创建文件nanoapp.py然后把下面的代码复制粘贴进去fromflaskimportFlask,request,render_template_string,redirect,url_for appFlask(__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[typetext], input[typepassword] { 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 classlogin-box h2用户登录/h2 {% if error %} p classerror{{ error }}/p {% endif %} form methodPOST action/login div classform-group label forusername用户名:/label input typetext idusername nameusername required /div div classform-group label forpassword密码:/label input typepassword idpassword namepassword required /div button typesubmit登录/button /form div classinfo h4测试账号:/h4 p用户名: adminbr密码: admin123/p p用户名: testbr密码: 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 classsuccess-box h2✓ 登录成功/h2 div classuser-info pstrong欢迎:/strong {{ username }}/p p您已成功登录系统/p /div a href/返回登录页/a /div /body /html app.route(/)defindex():returnrender_template_string(LOGIN_PAGE)app.route(/login,methods[POST])deflogin():usernamerequest.form.get(username)passwordrequest.form.get(password)# 验证用户ifusernameinusersandusers[username]password:returnrender_template_string(SUCCESS_PAGE,usernameusername)else:returnrender_template_string(LOGIN_PAGE,error用户名或密码错误)if__name____main__:# 使用HTTP明文传输用于演示抓包# 0.0.0.0 允许外部访问app.run(host0.0.0.0,port5000,debugTrue)保存文件按CtrlX然后按Y最后按Enter1.4 启动网站python3 app.py看到这样的提示就成功了* Running on http://127.0.0.1:5000 * Running on http://0.0.0.0:5000不要关闭这个终端让它一直运行着。第二步用Wireshark抓包2.1 打开Wireshark打开一个新的终端保持网站运行输入sudowireshark2.2 选择网络接口Wireshark打开后会看到一堆网络接口我们选择Loopback: lo本地回环接口2.3 设置过滤器在Wireshark顶部的过滤栏输入http.request.method POST这样只会显示POST请求方便我们找到登录数据。2.4 开始抓包点击左上角的蓝色鲨鱼图标或按CtrlE开始抓包。第三步测试登录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 usernameadminpasswordadmin123这就是我们通过网络发送的数据完全没有加密实验结果分析为什么能抓到密码HTTP是明文协议数据在网络上传输时没有任何加密同一网络可被监听只要在同一个局域网就能用Wireshark抓包POST数据也不安全很多人以为POST比GET安全其实在HTTP下都是明文HTTPS和HTTP的区别特性HTTPHTTPS加密❌ 明文传输✅ TLS/SSL加密安全性❌ 可被窃听✅ 无法解密浏览器显示⚠️ “不安全” 锁图标端口80443在Wireshark里抓HTTPS流量你只会看到一堆乱码加密数据根本看不到密码Wireshark常用过滤器学会这些过滤器抓包效率翻倍# 只看HTTP流量http# 只看POST请求http.request.methodPOST# 看包含password关键词的数据包http containspassword# 看特定端口的流量tcp.port5000# 看特定IP的流量ip.addr127.0.0.1# 组合条件http.request.methodPOSTand http containslogin我遇到的问题和解决方法问题1Wireshark抓不到lo接口的包解决方法sudochmodx /usr/bin/dumpcapsudosetcap cap_net_raw,cap_net_admineip /usr/bin/dumpcap问题2浏览器自动跳转HTTPS有些浏览器记住了网站必须用HTTPS访问HSTS机制解决方法用隐私模式/无痕模式打开浏览器或者清除浏览器缓存问题3Flask提示端口被占用解决方法# 查看哪个程序占用了5000端口sudonetstat-tuln|grep5000# 杀掉那个进程PID是进程号sudokill-9PID进阶玩法玩法1抓其他机器的流量查看Kali的IP地址ipaddr show在同一网络的另一台电脑访问http://[Kali的IP]:5000Wireshark选择eth0或wlan0接口抓包玩法2用命令行抓包tcpdumpsudotcpdump-ilo-A-s0tcp port 5000-i lo监听本地回环-A用ASCII显示内容-s 0抓取完整数据包实验总结这次实验让我明白了✅HTTP真的很不安全明文传输的数据任何人都能看到✅Wireshark很强大能看到网络上传输的所有数据✅HTTPS是必需的保护用户隐私的基本要求✅网络安全很重要一个小疏忽就可能导致数据泄露作为网络安全的学习者我们要 用这些知识保护系统安全⚖️ 遵守法律法规和职业道德 持续学习新的攻防技术清理环境实验做完记得清理# 停止Flask在运行Flask的终端按CtrlC# 停止Wireshark抓包# 删除测试文件可选cd~rm-rflogin_demo最后的话这是我第一次完整地做抓包实验从搭建网站到成功抓取密码整个过程大概花了1个小时。虽然是个简单的小项目但让我对网络安全有了更直观的认识。如果你也是小白强烈建议亲手试一遍看别人的教程和自己动手的感觉完全不一样。记住学习黑客技术是为了更好地防御而不是攻击他人 本文档由作者原创 实验环境Kali Linux 完成日期2026年⚠️ 仅供学习交流严禁用于非法用途参考资料Flask官方文档https://flask.palletsprojects.com/Wireshark用户手册https://www.wireshark.org/docs/wsug_html_chunked/HTTP协议详解MDN Web Docs《白帽子讲Web安全》- 吴翰清