15秒接口模糊測試指南

Alt pic

哲學(xué)

《api 接口 fuzz 測試初探》,簡單介紹了一個接口模糊測試工具。好用是好用,就是需要寫出接口的schema:

POST /v2.0/networks.json HTTP/1.1
Host: pubbeta1-iaas.service.163.org
X-Auth-Token: 6645b224a8314d0c89e09a011cbddf53
Content-Type: application/json
Accept: application/json

***{"network": {"cidr": "20.100.0.0/16", "name": "hzx-vpc-test1", "admin_state_up": true}}***

然后按照如下的方式調(diào)用:

python pjfapi.py -H pubbeta1-iaas.service.163.org -P 9797 -T request.txt

要是有很多接口需要測試的話,顯得很不方便。

我邊上的一個同學(xué)看了之后,就曾這樣說道:

我就想它自己給我測,都不用寫schema。

Alt pic

在 Software Tools 上面曾經(jīng)有過這么一句話,xuyou也曾經(jīng)在這里引用過:很多事情, 只有在人能很快的完成的時候,才有了做的可能。這句話可能比較拗口,反過來說可能更加好懂:如果用某種方法做一件事情太耗時間了, 那么人就不可能用這個方法做事情。只有一個方法能夠讓人足夠快的做好事情的時候,這個方法才會變得實用,同時這個事情才有做的可能性。

我在之前的一篇文章中提到過 gun parallel這個工具。

很多接口在并發(fā)操作下會出現(xiàn)一些bug,比如有一些判斷數(shù)據(jù)庫里面沒有加鎖,是在代碼層面判斷的,結(jié)果并發(fā)請求下去,每個請求在到達(dá)服務(wù)器的時候是判斷通過,一起寫了之后就超出限制了。但是你要真正測并發(fā)的話,又要寫腳本,或者利用python的mulitiprocessing封裝一下。但我手邊有了parallel,又在bashrc里面就加了以下兩個alias

alias p='parallel'

這樣制造并發(fā)太方便了,只需要管道后面加個p , 我就時時刻刻可以制造并發(fā)來觀察響應(yīng)。

舉個例子

seq 50 | p -n0 -q curl 'example.com'

因為很方便,所以經(jīng)常能夠在命令行下制造并發(fā),發(fā)現(xiàn)了不少問題!

實現(xiàn)

如此一來,那么就改造一下接口模糊測試工具哈。

最簡單的方法就是傳入一個curl,然后自動給你進行模糊注入。

curl請求是最容易得到的,比如chrome,postman里面可以自動導(dǎo)出,openstack client加上 --debug參數(shù)可以直接得到等等。

Alt pic

于是我稍微改造了一下,自動根據(jù)curl請求構(gòu)建出pjfapi 的schema。

使用方法,把curl請求粘貼到request.txt中。
然后執(zhí)行

python fuzz_curl.py request.txt

執(zhí)行效果如下:

(my_new_env) hzhuangzhexiao@pubbeta1-nova10:~/api-fuzz$ python fuzz_curl.py request.txt 
[INFO] 
                 _   ______             
     /\         (_) |  ____|            
    /  \   _ __  _  | |__ _   _ ________
   / /\ \ | '_ \| | |  __| | | |_  /_  /
  / ____ \| |_) | | | |  | |_| |/ / / / 
 /_/    \_\ .__/|_| |_|   \__,_/___/___|
          | |                           
          |_|                           
    
[INFO] Starting api Fuzz...
[INFO] Start fuzzing in a few seconds...
[INFO] Performing 5 requests to 10.182.2.253
[INFO] Average statistics:

   HTTP Code: ['200']
   Time: 0.0014
   Length: 34
   Hash: ['d8e71bf22b715ade49030e45ee661c1d']

[400, 0.002610921859741211, 66, '110ef21d725c0242cb1c5b913f15137b']
[400, 0.0028450489044189453, 66, '110ef21d725c0242cb1c5b913f15137b']
[400, 0.0028600692749023438, 141, '3391da2f8a7bc52d2d38fe1810a3370d']
[200, 0.002708911895751953, 68, 'd8e71bf22b715ade49030e45ee661c1d']
[500, 0.002846956253051758, 128, 'cb78997cdbb65ad20fe58356baaeadb7']
2018-03-26 16:53:24,466 [90991] my_logger ERROR: Got something interesting!

     Payload: {"extra_specs": {"unique_on_host": "dsadsa", "host?equired": "no"}}
     HTTP Code: 500
     Execution time: 0.00284695625305
     Response Length: 128
     Response Hash: cb78997cdbb65ad20fe58356baaeadb7
 whole result : [500, 0.002846956253051758, 128, 'cb78997cdbb65ad20fe58356baaeadb7'] 

需要關(guān)注 500 錯誤的 Payload即可。

目前還是處于初期poc階段,只支持post json類型的請求注入。uncurl的解析也不完善。希望日后有時間慢慢完善。

試用請戳: https://github.com/smasterfree/api-fuzz

歡迎star?。?/p>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,695評論 19 139
  • 1、通過CocoaPods安裝項目名稱項目信息 AFNetworking網(wǎng)絡(luò)請求組件 FMDB本地數(shù)據(jù)庫組件 SD...
    陽明AI閱讀 16,229評論 3 119
  • 2017-8-15 周二 凌晨 第一篇日記,作為一個新的開始吧。 不想每天庸庸碌碌,一事無成。寫點東西總算是對自己...
    唐喑喑閱讀 213評論 0 1
  • “我思,故我在”。要說人體最奇妙的器官,可能非大腦莫屬,所有的信息存在于大腦,行為、思維、情感、性格所表現(xiàn)的各種差...
    春江水暖_2d1e閱讀 1,232評論 0 2
  • 從個人的角度來看: 今天我的心情怎么樣?有什么印象深刻的事情? 今天心情。印象深刻的事情是發(fā)現(xiàn)一個模仿天貓官網(wǎng)的網(wǎng)...
    元氣滿滿321閱讀 278評論 1 1

友情鏈接更多精彩內(nèi)容