閑來無事,玩一玩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 --:--:-- --:--:-- --:--:-- 0100 512 100 474 100 38 6571 526 --:--:-- --:--:-- --:--:-- 6676HEADER頭: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=2660884526POST資料參數: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 --:--:-- --:--:-- --:--:-- 0100 461 100 407 100 54 19760 2621 --:--:-- --:--:-- --:--:-- 21421HEADER頭: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"}] => )"