资讯动态

渗透测试自学第十天:从HTTP协议到Burp Suite抓包改包实战

发布时间:2026/9/12 17:19:07 来源:尧图企业网站定制
第十天我没急着去学那些听起来很帅的东西而是老老实实把HTTP协议的知识重新过了一遍再把Burp Suite从安装到真正拦下第一个包完整走通了一遍。这大概是自学渗透测试以来最踏实的一天——因为从这天开始手头的工具不再是摆设协议也不再是考完就忘的课本知识。如果你也走在自学的路上会发现绝大多数Web渗透的动作最后都落到看懂一个HTTP请求、改好一个HTTP请求、重放一个HTTP请求这三件事上。这篇文章就把我第十天的学习过程、踩坑记录和实操思路完整写下来给同样卡在这个阶段的人一个参考。1. 为什么第十天还在啃HTTP——学习路线踩坑复盘1.1 我自学的路线图第十天的位置自学渗透测试最容易犯的毛病就是头一个星期把Kali Linux装好、打开几个工具然后就开始到处乱扫。我也没能免俗前三天基本在折腾虚拟机、装系统、熟悉Linux命令。第四到第六天过了一遍网络基础从OSI七层模型讲到TCP三次握手、IP地址、DNS解析当时觉得自己懂网络了。第七天到第九天开始碰HTML、JavaScript顺便搞明白了网站大概是怎么跑起来的。到了第十天我停下来想了很久前九天的东西好像都听过但真要我说一个HTTP请求里每行都写了什么说不清楚Burp Suite这个工具装了也只是打开看过几个按钮。这种状态去学SQL注入、XSS纯属自欺欺人——连请求参数长什么样都不知道payload往哪放呢所以我决定第十天不学新东西就把HTTP讲透、把Burp用熟。这条路走下来我觉得是正确的。如果你也想自学建议把协议基础放在漏洞原理前面不是因为有考试而是因为后面每一个漏洞案例都在跟协议的细节打交道。地基不打牢后面每学一个漏洞就要回头补一次协议更痛苦。1.2 没有HTTP基础学漏洞原理就像看天书我用一个特别朴素的例子来说明这件事。SQL注入听起来很高级但本质是什么是攻击者修改了请求里的一个参数导致后端拼接SQL语句时多执行了一段代码。问题来了参数在HTTP请求里是放在URL查询字符串里还是放在POST请求体里格式是keyvalue还是JSON如果连这些都不清楚拿到一个抓包结果根本无从下手。XSS也是一样的道理。反射型XSS本质是你提交的输入被原样拼进了响应体——那响应体是什么就是HTTP响应里的body部分。你得先能看懂响应里哪一段是HTML、哪一段是JavaScript才能判断XSS的注入点在哪、能不能弹窗。Cookie为什么可能导致会话劫持因为没有弄明白Cookie和Session的关系不知道Set-Cookie这个响应头是干嘛用的。我强烈建议每个自学者都要有逐行看报文的能力。HTTP请求报文从请求行到请求头到空行到请求体每一行都有自己的作用也几乎每一行都有对应的攻击手法。这不是为了考试这是渗透测试的基本功。2. HTTP进阶从能上网到能看懂每一字节2.1 请求与响应的骨架每一行都不是废话先贴一个最典型的HTTP请求报文我在本地靶场抓到的登录请求就是长这样的POST /login.php HTTP/1.1 Host: 127.0.0.1 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Accept: text/html,application/xhtmlxml,application/xml;q0.9,*/*;q0.8 Accept-Encoding: gzip, deflate Content-Type: application/x-www-form-urlencoded Content-Length: 29 Cookie: PHPSESSIDabc123def456 usernameadminpassword123456第一行叫请求行由三部分组成请求方法、请求URL、HTTP版本。这是整个请求里最值得看的行。URL里藏着路径和参数方法决定了这个请求的语义——GET表示想取数据POST表示想提交数据后面我会细讲方法之间的区别。从第二行到空行之前全是请求头。Host表示目标站点在很多场景下是判断虚拟主机路由的关键User-Agent标识客户端类型有的网站会针对特定UA做不同响应这就成了改包测试的一个点Content-Type声明了请求体的格式如果服务端解析逻辑不严谨改个Content-Type可能引入解析差异。请求头之后必须有一个空行这是协议的固定分隔符空行下面是请求体放这次提交的数据。usernameadminpassword123456是典型的urlencoded格式跟GET的查询字符串长一样。如果是JSON格式请求体就会长这样{username:admin,password:123456}这时候Content-Type就得是application/json。响应的结构和请求对应起始行变成了状态行比如HTTP/1.1 200 OK后面是响应头和响应体。响应体就是服务器真正返回给浏览器的内容可能是HTML页面、JSON数据、也可能是错误信息。判断一个请求成没成功第一眼看状态码第二眼看响应体的大小和内容这在后面学SQL注入盲注的时候特别重要。2.2 方法、状态码、Cookie与会话机制渗透思路的温床HTTP常见方法我在第十天认真整理了一遍方法语义渗透测试里的关注点GET获取资源参数拼在URL里容易出现在日志、历史记录中POST提交数据参数在请求体适合传大量数据也是注入高发区PUT上传文件如果服务器允许可能直接写shellDELETE删除资源测试越权时关注OPTIONS查询支持的方法用来探测服务器允许哪些方法HEAD只取响应头判断资源是否存在节省开销很多新手会把GET和POST理解成一个用来查、一个用来传这个理解没错但在渗透测试里更重要的是参数位置不同带来检测难度不同。比如一个登录接口GET方式把账号密码写在URL里你在Burp的历史记录里一眼就能看清POST方式的参数看不见URL里但在请求体里看得清清楚楚。如果后端为了兼容同时接收两种方式就可能出现逻辑漏洞——开发以为只有一个入口实际上攻击者换一种方式就绕过了某个校验。状态码也是信任度极高的信号。我整理了一个自己的速查表状态码含义常见场景200OK正常返回301/302重定向登录后跳转、URL规范化401未认证需要身份凭证403禁止访问权限不足但有响应体可看404不存在路径探测时有价值500服务器内部错误可能是注入触发了SQL报错502/503网关错误/服务不可用服务配置问题在实战里403往往是很有价值的响应——说明资源存在但不允许访问这时候围绕绕过思路做文章比如换方法、换Host、加X-Forwarded-For头有时候真能突破。Cookie和Session是绕不开的话题。HTTP本身是无状态的服务器记不住你是谁。为了解决这个问题服务器在响应里返回Set-Cookie字段浏览器存下来后续每次请求带上Cookie服务器通过这个凭证认人。PHPSESSID就是PHP默认的会话标识。理解了这个机制才能理解会话固定攻击——如果服务器在用户未登录时就分配了Session ID攻击者可以先用自己的Session ID诱导受害者登录登录后服务器没有重新分配攻击者就能用同一个Session ID冒用受害者的身份。这不是今天要实操的内容但它解释了为什么改Cookie、看Set-Cookie值得成为渗透测试的习惯动作。2.3 HTTPS、连接复用与协议细节进阶者必须补的课HTTP和HTTPS的区别说着简单——一个加密一个不加密但底层是TLS握手协议在工作。客户端和服务端要通过证书交换、密钥协商建立加密通道之后传输的内容才不会被明文抓包读取。这也是为什么用Burp Suite抓HTTPS流量之前要先装CA证书Burp相当于在浏览器和目标服务器之间做了一次中间人浏览器要信任Burp签发的证书才会愿意把加密流量解密后发给Burp看。再说连接复用。以前一个HTTP请求完成后TCP连接立刻断开每个资源都要重新握手非常慢。后来有了Keep-Alive持久连接一个TCP连接上可以跑多个HTTP请求。到了HTTP/2进一步用多路复用让多个请求并行传输减少了队头阻塞。这些概念在渗透测试里直接影响一个判断同一个TCP连接上服务端对多个请求的处理上下文是不是独立的某些场景下连接复用的边界问题会导致请求走私——这是后话但今天先把一条连接能跑多个请求这件事焊死在脑子里。另外一个容易被忽略的细节是CRLF注入。CR和LF分别是\r和\n协议用它们来分隔请求头和响应头。如果服务端在构造响应头时拼接了用户输入又没有过滤回车换行攻击者就能通过参数注入%0d%0a来伪造额外的响应头甚至拆分成两个响应这叫响应头拆分。理解这个攻击的前提恰恰就是理解协议的每一行是怎么分隔出来的——所以我一直觉得学HTTP不是为了背格式是为了在每个分隔符和字段之间看到可能被动手脚的地方。3. Burp Suite上手从安装配置到拦下第一个包3.1 版本与安装Kali预装版和社区版够用Kali Linux里默认预装了社区版的Burp Suite打开终端输入burpsuite就能启动。如果是用Windows或者单独装去官网下载Community Edition就行社区版免费日常学习和做靶场题完全够用只是缺少一些自动化扫描功能——自己手动用Repeater和Intruder也照样能干活。启动前确保系统有Java环境社区版要求Java 17以上Kali里一般自带。如果启动时报Java版本错误装一个对应版本的OpenJDK就行命令很简单sudo apt install openjdk-17-jre -y这个坑我前几次启动时真遇到过网上资料对版本说得含糊浪费了半小时。现在直接给你结论社区版用Java 17稳妥Pro版也别乱用新版本号按官方文档来。3.2 浏览器代理与HTTPS证书让Burp能看见所有流量Burp的核心机制是代理。启动后默认在本机127.0.0.1:8080起一个监听端口浏览器所有流量如果走这个端口Burp就能看到、能拦截、能修改。配置方法是在Firefox的设置里找到网络设置选择手动配置代理HTTP代理填127.0.0.1端口填8080勾选也使用此代理用于HTTPS。这里有个顺序容易踩坑如果先打开代理设置再启动Burp浏览器访问网页会直接报错因为代理没监听。正确顺序是先启动Burp再配置浏览器代理然后访问http://burp能看到一个欢迎页说明代理通了。抓HTTPS流量之前必须安装CA证书。用浏览器访问http://burp页面右上角会有一个CA Certificate按钮下载证书文件然后在Firefox设置里导入为证书机构勾选信任项。装完证书后Burp才能解密并展示HTTPS请求的内容。这一步要是漏了你在Target和Proxy里看到的HTTPS流量全是乱码或者根本看不到。3.3 界面与模块先记住这几个就够Burp的界面第一次打开会觉得模块多得吓人但其实真正的基础操作就集中在几个模块里模块作用使用频率Proxy拦截和查看所有代理流量最高Repeater手动修改请求并重放极高Intruder自动化批量测试参数高Decoder编码解码工具中Target站点地图和历史记录汇总中刚上手我建议只关注Proxy里的Intercept和HTTP history。Intercept页签有Intercept is on的开关打开时浏览器发送的每个请求都会停在Burp这里你可以点击Forward放行、点击Drop丢弃也可以直接在窗口里改请求内容再发送。这个暂停并修改的能力就是后面所有手工测试的基础。Action按钮可以把当前请求直接发送到Repeater或Intruder不要小看这个快捷入口实战里90%的动作都是从这里开始的。HTTP history是另一个宝藏页签浏览器访问过的所有请求都在这里。重要的是学会用过滤条件——按URL、按MIME类型、按状态码过滤快速找到自己关心的那个请求。初学者经常在几百条历史记录里翻半天我自己的习惯是先按域名过滤再按状态码先找POST和302这样定位速度快很多。4. 实战演练用Burp分析并改造一个靶场登录请求4.1 实验环境与实验目标纸上谈兵没用第十天的重头戏是我在本地搭了一个最基础的PHP登录页当靶场。这里强调一声做任何测试请一定在本地环境或者自己拥有授权的靶场进行不要拿公网真实站点练手这是行业底线。实验目标很简单通过Burp把浏览器访问登录页、提交账号密码的整个过程完整截下来然后在Repeater里手工修改请求体、修改请求头观察响应差异。这个实验做完你对请求是从哪来的、每一段改了什么会有什么后果会有特别直观的感受。4.2 完整抓包过程从浏览器操作到Burp拦截打开Burp的Proxy确认Intercept是开着的。然后在浏览器里访问本地登录页面输入一个随意编的账号和密码点击登录。这个时候浏览器不会马上跳到页面因为请求被Burp扣住了。回到Burp的Intercept页签会看到一个完整的POST请求就是我前面贴过的那种格式。我第一次做这个实验的时候愣了几秒——原来点击一个登录按钮浏览器和服务器之间真的就是发了一行一行的纯文本。这种把抽象变具体的感觉是Burp给自学者最大的礼物。点击Forward放行浏览器才继续收到响应、展示页面。这时候去HTTP history里找到刚才那条POST记录右键选择Send to Repeater快捷键CtrlR进入Repeater模块。你会发现请求被原样保存了下来右边是Send按钮下面能看到这次请求的响应内容——状态行、响应头、HTML响应体全都有。这个流程看起来平淡但它把浏览器点击和HTTP报文这两件事牢牢绑定在了一起。以后无论是学SQL注入还是越权测试你都会下意识地想一个问题我点这个按钮实际发出去的请求报文长什么样4.3 Repeater改包重放两个看得见效果的实验第一个实验修改请求里的密码参数。把请求体里的password123456改成passwordadmin点Send观察响应。如果后端只是简单比对账号密码你会看到登录失败的提示但如果故意把靶场代码弱校验写成只要用户名是admin就算成功你就能观察到响应结果的差别。这个实验想传达的是改了请求体服务器的行为真的会变——这不是游戏是实实在在的逻辑。第二个实验加一个X-Forwarded-For请求头值填1.2.3.4再看看响应。有的后端代码会读取这个头做IP判断或日志记录有的不会。我第二次尝试时加了这样一个头靶场PHP代码里有一行读取IP的逻辑响应里确实多显示了一个IP来源。这个实验告诉我请求头里的信息如果没有被服务端校验就可能被人为伪造这是很多IP绕过攻击的根本原因。你现在接触这些头是在为后面的越权、WAF绕过甚至是业务逻辑漏洞打基础。Repeater还有一个陈年好用的快捷键CtrlU可以把选中的URL编码还原CtrlShiftU是反向编码。在改包过程中经常遇到转义问题这两个快捷键能帮你省很多事。5. 这十天踩过的坑和第十一天要做的事5.1 这几个坑我替你踩过了第一个坑设置了浏览器代理但是忘了启动Burp然后疯狂怀疑自己是不是配错了。后来我把流程固定成先Burp后浏览器再也没出过错。第二个坑抓不到HTTPS流量。折腾了半天发现是CA证书没装。装完证书后Firefox还会提示您的连接并不安全需要去证书设置里把Burp CA证书导入了证书机构列并勾选信任由此证书机构签名的网站。这一步不能省。第三个坑HTTP history记录太多找不到目标请求。我的解决方法是进Target页签在站点地图里按域名点进去只看这个域名下的请求或者在History里加过滤条件把静态资源类型图片、CSS、JS排除掉页面瞬间清爽。第四个坑看到乱码。原因是响应体是gzip压缩的有些时候Burp没自动解压。在Repeater里可以把请求头里的Accept-Encoding: gzip, deflate删掉服务器返回的就是明文格式分析起来舒服很多。实际上我在做靶场题的时候经常这么干非常实用。第五个坑Intruder一上来就跑字典结果一个请求都没跑通。原因是Intruder默认会标记每个参数为payload位置但你一定要先在Positions页签里把不需要爆破的参数上的标记清掉只保留要测试的位置。不然每个参数都会被塞入大量字典值又慢又乱。5.2 下一步从HTTP到Web漏洞的衔接第十一天开始我给自己安排的路线是正式进入OWASP Top 10第一个是SQL注入。为什么敢学了就是因为现在我能抓包、能改包、能重放而且对请求里的每个参数就像看自己写的字一样熟悉。拿到一个靶场我能清楚地知道哪个参数是注入点候选、请求发出去后响应的哪一段是判断是否注入成功的依据。练习靶场方面我目前用的是DVWA和Pikachu这两个经典选择都支持本地部署。DVWA的SQL Injection模块足够入门Pikachu的中文界面方便理解漏洞场景。以后如果打CTF题像CTF题里常见的HTTP头注入、方法注入也终究会回到今天学的这些基础上面——Burp里改个头、换个方法有时候题目就通了一半。如果你也自学到这里我的建议很朴素不要贪快不要觉得第十天还在弄HTTP很丢人。真正常见的自学拦路虎不是知识点难而是基础不牢导致后面的漏洞原理全靠背。今天把HTTP和Burp这一对组合练到闭着眼能改包的程度后面学的每一个漏洞你都比别人更容易上手。我这十天的最大感悟是真本事都是从一个又一个具体的报文和请求里磨出来的。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价