【攻防世界】CTF web新手02 POST&GET

【攻防世界】CTF web新手02 POST&GET

HTTP协议常用的请求有两种,POST和GET。POST是向服务器上传数据,GET是从服务器下载数据,两者最大的区别就是GET请求没有请求主体(Request Body)。GET请求直接将请求的参数跟在url的后面,向我们平时看到的 " /?id=xxxx&password=xxxx "就是GET请求的参数,服务器解析了url以后会将数据发送到我们的浏览器上。而POST请求则需要将上传的数据下载请求主体中。这样有一个好处是相比GET请求,POST请求具有更高的安全性,可上传的数据没有长度的限制。

举两个简单的例子
GET请求:
【攻防世界】CTF web新手02 POST&GET_第1张图片POST请求

【攻防世界】CTF web新手02 POST&GET_第2张图片在上面的两张图中最大的不同就是POST请求中,在头部的下面有一个空行,再下面有数据b=2。
这个b=2就是请求主体(Request Body)

我们以【攻防世界】web新手题为例,如何模拟浏览器提交HTTP请求

  • 方法1
    使用火狐浏览器自带插件Hackbar
    【攻防世界】CTF web新手02 POST&GET_第3张图片
    GET请求不需要有过多的操作,直接在url后面加上题目要求的数据即可
    【攻防世界】CTF web新手02 POST&GET_第4张图片由于POST请求无法在url中体现出来,所以我们需要借助工具。
    打开hackbar,输入url,点击Enable Post Data,在输入框中输入参数
    【攻防世界】CTF web新手02 POST&GET_第5张图片
    点击 RUN,我们就得到了flag
    【攻防世界】CTF web新手02 POST&GET_第6张图片注:Hackbar现在已经不能使用,提示说需要lisence,我们可以下载Hackbar Quantum完成这个题目,也可以使用fiddler等抓包软件,下面是使用fiddler来实现post请求

  • 方法2
    使用fiddler
    同样的,GET请求直接在url后面跟上我们的数据即可
    然后我们用fiddler抓一下这个GET包
    【攻防世界】CTF web新手02 POST&GET_第7张图片把GET包的头部复制粘贴,作为POST包的头部
    【攻防世界】CTF web新手02 POST&GET_第8张图片但是这毕竟是GET方法的头部,GET和POST在头部上还是有一点区别的。
    由于POST要在请求主体中输入我们上传的数据,所以我们还要声明一下数据格式
    POST请求有四种数据格式

    • [ application/x-www-form-urlencoded ]
      这是post请求最常见也是默认的数据提交格式。它要求数据名称(name)和数据值 (value) 之间以等号相连,与另一组name/value值之间用&相连。
      比如 a=1&b=2&c=3

    • [ application/json ]
      application/json格式的请求头是指用来告诉服务端post过去的消息主体是序列化后的 JSON 字符串。
      比如
      {
      “a”:“1”,
      “b”:“2”,
      “c”:“3”
      }

    • [ text/xml ]

    • [ multipart/form-data ]

    所以我们需要在POST头部加上数据格式的声明

Content-Type: application/x-www-form-urlencoded

【攻防世界】CTF web新手02 POST&GET_第9张图片点击Execute,一个构造的POST请求包就发送出去了
来看响应包,得到了flag
【攻防世界】CTF web新手02 POST&GET_第10张图片

你可能感兴趣的:(CTF笔记)