题目来源:一个我认为还比较不错的CTF平台 —— S10Sec (https://oj.x10sec.org/),作为一些萌新这是一个很好的磨砺平台。
知识普及:
GET和POST是什么?是HTTP协议中的两种发送请求的方法。
GET和POST的本质上就是TCP链接,并无差别。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。
GET和POST还有一个重大区别:
GET产生一个TCP数据包;POST产生两个TCP数据包。
对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。
也就是说,GET只需要跑一趟就完成了数据包的传输,而POST得跑两趟,先去和服务器发个请求包”,然后再回头把数据包发送过去。
因为POST需要两步,时间上消耗的要多一点,看起来GET比POST更有效。
但事实上并不是这样
GET与POST都有自己的语义,不能随便混用。
据研究,在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。
并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。
题目1(什么是GET):
将GET请求数据添加到URL中
使用brup抓包查看请求数据包,发现GET所发送的参数长度受限于请求行
网页回传数据得到FLAG{}
题目2(什么是POST):
使用brup抓包查看请求数据包,并加入post的相应数据,相比较于GET请求的区别
GET /web6/ HTTP/1.1
###修改为 POST
Content-Type: application/x-www-form-urlencoded
Content-Length: 40
###加入POST请求头说明
uid=10010,action=withdraw,money=10241024
###添加请求数据
我们可以发现POST的请求数据与GET请求方式和长度不同,POST将请求数据与GET请求的紧接真实URL之后更具有安全性。
GET和POST请求还有一个关键的区别,那就是它们具体设计来干什么。GET请求意味着获取信息,简单的、周期性的检索。当然,可以使用参数来帮助说明希望服务器送回哪些信息,但最关键的是:GET请求没有改变服务器上的东西。POST请求则不然,本身意味着发送需要处理的数据。因此,见到POST请求,就要想到“更新”,即,使用POST体的数据去改变服务器上的一些东西。
根据网页返回数据得到FLAG{}
这里就不显示答案了,自己动手修改包吧,对POST的理解还蛮有帮助的(o・ェ・o)哦