我们先来看下CTFLEARN中的114 challenge:POST Practice

This website requires authentication, via POST. However, it seems as if someone has defaced our site.Maybe there is still some way to authenticate? http://165.227.106.113/post.php

查看http://165.227.106.113/post.php页面源码,即可发现username: admin | password: 71urlkufpsdnlkadsf,简单来说,此题需要我们向http://165.227.106.113/post.php,发送post请求,将username和password参数提交,即可得到flag。

解法1:使用python的requests发送post请求

import requests

userinfo = {
    "username": "admin",
    "password": "71urlkufpsdnlkadsf"
}
# 方法1,使用data发送,此题的正确答案
response = requests.post("http://165.227.106.113/post.php", data=userinfo)
print(response.text)

# 方法2: 使用json
# response = requests.post("http://165.227.106.113/post.php", json=userinfo)
# print(response.text)

# 方法3:直接在url上加参数
# response = requests.post("http://165.227.106.113/post.php?username=admin&password=71urlkufpsdnlkadsf")
# print(response.text)

# 方法4: 使用params参数,和方法3等同
# response = requests.post("http://165.227.106.113/post.php", params="username=admin&password=71urlkufpsdnlkadsf")
# print(response.text)

python中的四种方法有何区别呢?笔者guggle(csdn远古某人)发现,这4种请求方式的区别在于:请求的url,请求header中Content-Type,请求的body不同。
有兴趣大家也可以参看下我之前写的文章:【原创】Python 使用requests发post请求时是用data?还是json?(从本人简书博客移入)

方法1:使用data

url: http://165.227.106.113/post.php
header中的Content-Type:application/x-www-form-urlencoded
body:username=admin&password=71urlkufpsdnlkadsf

方法2:使用json

url: http://165.227.106.113/post.php
header中的Content-Type:application/json
body:{“username”: “admin”, “password”: “71urlkufpsdnlkadsf”}

方法3和方法4:直接在url上加参数和使用params

url: http://165.227.106.113/post.php?username=admin&password=71urlkufpsdnlkadsf
header中的Content-Type:没有声明
body:none

解法2:使用curl

curl http://165.227.106.113/post.php -X POST -d “username=admin&password=71urlkufpsdnlkadsf”

PS:一定要使用双引号!!!,使用单引号,会提示’password’ 不是内部或外部命令,也不是可运行的程序或批处理文件。
curl的json请求法,笔者guggle(csdn远古某人)暂时未试,故不贴写法,请自行百度,如有遇到,笔者guggle(csdn远古某人)会补充进来

解法3:使用chrome的postman插件

postman插件下载及使用方法

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐