linux curl模拟提交post请求(后附:PHP版)

2 篇文章 0 订阅
1 篇文章 0 订阅

闲来无事,玩一玩Linux的curl命令。很简单的需求,携带cookie伪造合法的post请求。

首先还是抄一下curl命令的参数:

语法:# curl [option] [url]
-A/--user-agent <string>          设置用户代理发送给服务器
-b/--cookie <name=string/file>    cookie字符串或文件读取位置
-c/--cookie-jar <file>            操作结束后把cookie写入到这个文件中
-C/--continue-at <offset>         断点续转
-D/--dump-header <file>           把header信息写入到该文件中
-e/--referer                      来源网址
-f/--fail                         连接失败时不显示http错误
-o/--output                       把输出写到该文件中
-O/--remote-name                  把输出写到该文件中,保留远程文件的文件名
-r/--range <range>                检索来自HTTP/1.1或FTP服务器字节范围
-s/--silent                       静音模式。不输出任何东西
-T/--upload-file <file>           上传文件
-u/--user <user[:password]>       设置服务器的用户和密码
-w/--write-out [format]           什么输出完成后
-x/--proxy <host[:port]>          在给定的端口上使用HTTP代理
-#/--progress-bar                 进度条显示当前的传送状态

当然了,上面的还是不够详细,剩下的就留待以后补充了。

言归正传,回到刚才的话题,我的demo是这样的,首先通过curl命令获取到某个网站的cookie,之后携带这个cookie,以及一些参数,在该网站暴露的接口中去提交请求。(不知道这种行为算什么闭嘴

步骤如下:

1. 通过curl 直接down下来cookie,使用 '-D' 命令。

nohup curl -D cookie.txt https://zhidao.baidu.com
现在cookie信息就已经写入到了cookie.txt文件中,如下展示。


2. OK,cookie拿到了,就剩下搞破坏了,还是使用本地测试的URL,直接暴露别人的bug也不大厚道偷笑

nohup curl -A "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:50.0) Gecko/20100101 Firefox/50.0" -b cookie001.txt -d "a=2660884526" -d "b=2660884526" -d "c=2660884526"  http://li.wukong.com/arr.php

php代码如下:

<?php
$headers = getallheaders();
echo PHP_EOL.'HEADER头:'.PHP_EOL;
print_r($headers);

$content = file_get_contents('php://input');
echo PHP_EOL.'访问请求的原始数据的只读流:'.PHP_EOL;
print_r($content);

echo PHP_EOL.PHP_EOL.'POST数据参数:'.PHP_EOL;
print_r($_POST);
exit;

输出如下:

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100   512  100   474  100    38   6571    526 --:--:-- --:--:-- --:--:--  6676

HEADER头:
Array
(
    [Host] => li.wukong.com
    [User-Agent] => Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:50.0) Gecko/20100101 Firefox/50.0
    [Accept] => */*
    [Cookie] => name1=1; name2=2; name3=3
    [Content-Length] => 38
    [Content-Type] => application/x-www-form-urlencoded
)

访问请求的原始数据的只读流:
a=2660884526&b=2660884526&c=2660884526

POST数据参数:
Array
(
    [a] => 2660884526
    [b] => 2660884526
    [c] => 2660884526
)

好吧,重点是携带cookie,post数据合法的请求数据。当然了,上面的demo只是application/x-www-form-urlencode格式的,下面贴一个application/json 格式的,同样很简单

nohup curl  -A "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:50.0) Gecko/20100101 Firefox/50.0" -b cookie.txt -H 'Content-Type: application/json' -d '{"a":"2660884526", "b":"2660884526", "c":"2660884526"}' http://li.wukong.com/arr.php

响应如下:

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100   461  100   407  100    54  19760   2621 --:--:-- --:--:-- --:--:-- 21421

HEADER头:
Array
(
    [Host] => li.wukong.com
    [User-Agent] => Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:50.0) Gecko/20100101 Firefox/50.0
    [Accept] => */*
    [Cookie] => name1=1; name2=2; name3=3
    [Content-Type] => application/json
    [Content-Length] => 54
)

访问请求的原始数据的只读流:
{"a":"2660884526", "b":"2660884526", "c":"2660884526"}

POST数据参数:
Array
(
)

也很简单,只需要使用 -H 参数直接修改自定义header头即可。

下面附一个纯PHP模拟post表单提交的代码:

<?php
$post = '{"a":"2660884526", "b":"2660884526", "c":"2660884526"}';
$post = json_decode($post, true);

$ch = curl_init();
curl_setopt_array($ch , array(
	CURLOPT_URL => "http://li.wukong.com/arr.php",
	CURLOPT_HTTPHEADER => [
		'Host:li.wukong.com',
		'User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:50.0) Gecko/20100101 Firefox/50.0',
	],
//	CURLOPT_COOKIE => "name1=1; name2=2; name3=3",
	CURLOPT_COOKIEFILE => "cookie.txt",
	CURLOPT_FOLLOWLOCATION => 1,
	CURLOPT_RETURNTRANSFER => true,
	CURLOPT_CUSTOMREQUEST => 'POST',
	CURLOPT_POSTFIELDS => $post,
));
$res = curl_exec($ch);
curl_close($ch);
var_dump($res);

响应如下:

string(503) "
HEADER头:
Array
(
    [Host] => li.wukong.com
    [Accept] => */*
    [Cookie] => name1=1; name2=2; name3=3
    [User-Agent] => Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:50.0) Gecko/20100101 Firefox/50.0
    [Content-Length] => 346
    [Expect] => 100-continue
    [Content-Type] => multipart/form-data; boundary=------------------------a40cc9c12f3efc06
)

访问请求的原始数据的只读流:


POST数据参数:
Array
(
    [a] => 2660884526
    [b] => 2660884526
    [c] => 2660884526
)
"

有一点需要注意一下,当post的数据是字符串而不是数组时,Content-Type会自动变成application/x-www-form-urlencoded。

上面的PHP代码,将json_decode那行注释之后响应如下:

string(489) "
HEADER头:
Array
(
    [Host] => li.wukong.com
    [Accept] => */*
    [Cookie] => name1=1; name2=2; name3=3
    [User-Agent] => Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:50.0) Gecko/20100101 Firefox/50.0
    [Content-Length] => 54
    [Content-Type] => application/x-www-form-urlencoded
)

访问请求的原始数据的只读流:
{"a":"2660884526", "b":"2660884526", "c":"2660884526"}

POST数据参数:
Array
(
    [{"a":"2660884526",_"b":"2660884526",_"c":"2660884526"}] => 
)
"



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值