chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

一種在Andorid中實現(xiàn)單應(yīng)用、全局、優(yōu)雅的抓包方法

哆啦安全 ? 來源:哆啦安全 ? 2023-02-07 10:50 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

本文介紹一種在 Andorid 中實現(xiàn)單應(yīng)用、全局、優(yōu)雅的抓包方法。

本文于去年端午節(jié)編寫,由于種種原因,當(dāng)時藏拙并未發(fā)布?,F(xiàn)刪除一些敏感信息后分享出來,希望對各位有所幫助。

背景

昨天在測試一個 Android APK 的時候發(fā)現(xiàn)使用 WiFi 的 HTTP 代理無法抓到包,在代理的日志中沒有發(fā)現(xiàn)任何 SSL Alert,因此可以判斷不是證書問題;另外 APP 本身仍可以正常收發(fā)數(shù)據(jù),這說明代理設(shè)置被應(yīng)用繞過了。

根據(jù)我們前一篇文章(終端應(yīng)用安全之網(wǎng)絡(luò)流量分析)中所介紹的,遇到這種情況時就可以使用路由抓包方法,確保接管所有流量。但是因為端午放假被封印在家,且用于抓包的樹莓派放在了公司,因此只有另謀他路。

本來接著考慮裝個 DroidProxy 去試一下,但突然間靈光一閃,為什么不直接用 iptables 去修改流量呢?于是,就有了這篇小記。

iptables 101

iptables應(yīng)該大家都不會陌生,說起來這也是我入門 “黑客” 時就接觸的命令,因為我的網(wǎng)絡(luò)安全入門第一戰(zhàn)就是使用aircrack去破解鄰居的 WiFi 密碼。多年以前還寫過一篇Linux內(nèi)核轉(zhuǎn)發(fā)技術(shù),介紹 iptables 的常用操作,但當(dāng)時年幼無知,很多概念自己并沒有完全理解。其實介紹 iptables 最好的資料就是官方的man-pages,因此這里也就不做一個無情的翻譯機器人了,只簡單介紹一些關(guān)鍵的概念。

basic

首先是我們作為系統(tǒng)管理員最為關(guān)心的命令行參數(shù),在坊間流傳的各類防火墻、WiFi 熱點、流控 shell 腳本中,充斥著各種混亂而難以理解的 iptables 命令,但實際上其命令行參數(shù)非常優(yōu)雅,可以概況為以下表述:

iptables[-ttable]{-A|-C|-D}chainrule-specification

rule-specification=[matches...][target]
match=-mmatchname[per-match-options]
target=-jtargetname[per-target-options]

一個 table 中有多個 chain,除了內(nèi)置的 chain,用戶也可以自己新建(比如 DOCKER 鏈)。常用的 table 及其包含的 chain 有以下這些:

  • ?filter

    • ?INPUT

    • ?FORWARD

    • ?OUTPUT

  • ?nat

    • ?PREROUTING

    • ?INPUT

    • ?OUTPUT

    • ?POSTROUTING

  • ?mangle

    • ?PREROUTING

    • ?OUTPUT

    • ?INPUT

    • ?FORWARD

    • ?POSTROUTING

  • ?raw

    • ?PREROUTING

    • ?OUTPUT

其中有的表比其他表包含更多的 chain,這是其定位決定的。正如其名字而言,filter主要用于流量過濾,nat表主要用于網(wǎng)絡(luò)地址轉(zhuǎn)換,mangle表用于數(shù)據(jù)包修改,而raw表則用于網(wǎng)絡(luò)包更早期的配置。除此之外還有security表用于權(quán)限控制,不過用得不多。

雖然看起來各個表各司其職,但實際中也沒有強制的差異。比如 mangle 表雖然用來修改流量,但也可以用來做網(wǎng)絡(luò)地址轉(zhuǎn)換,filter 表也是同理。在日常中設(shè)置 iptables 規(guī)則的時候主要考慮的是數(shù)據(jù)包的時序,而這和 chain 的關(guān)系更大一些。

上面提到的這些常見 chain,不管在哪個表中,其含義都是類似的:

  • ? INPUT: 表示數(shù)據(jù)包從遠端發(fā)送到本地;

  • ? OUTPUT: 表示數(shù)據(jù)包在本地生成,并準備發(fā)送到遠端;

  • ? PREROUTING: 接收到數(shù)據(jù)包的第一時間,在內(nèi)核進行路由之前;

  • ? POSTROUTNG: 表示數(shù)據(jù)包準備離開的前一刻;

  • ? FOWARD: 本機作為路由時正要準備轉(zhuǎn)發(fā)的時刻;

table 結(jié)合對應(yīng)的 chain,網(wǎng)絡(luò)數(shù)據(jù)包在 iptables 中的移動路徑如下圖所示:

ff55b776-a605-11ed-bfe3-dac502259ad0.pngflow

extensions

對于iptables而言重點無疑是其中的規(guī)則定義,上文提到的參數(shù)無非就是將自定義的規(guī)則加入到對應(yīng) CHAIN 之中,比如-A是將規(guī)則插入到鏈的末尾(append),-I是插入到鏈的頭部(insert),-D是刪除對應(yīng)規(guī)則(delete),等等。

而規(guī)則又分為兩個部分,即數(shù)據(jù)包匹配以及匹配之后的操作,分別通過-m-j來指定。這其中就引入了成百的命令行參數(shù),以至于社區(qū)還就此產(chǎn)生了不少段子:

Overheard:“Inanyteamyouneedatank,ahealer,adamagedealer,someonewithcrowdcontrolabilitiesandanotheronewhoknowsiptables”

—JéromePetazzoni(@jpetazzo)June27,2015

不過實際上社區(qū)對 iptables 的抱怨更多是在多用戶系統(tǒng)中規(guī)則配置沖突以及由此引發(fā)的艱難調(diào)試之旅,在沒有沖突的情況下,配置規(guī)則也是比較簡單的。定義 iptables 規(guī)則的參考主要是iptables-extensions(8),其中定義了一系列匹配拓展(MATCH EXTENSIONS)以及 **目標(biāo)拓展(TARGET EXTENSIONS)**。

match

先看匹配拓展,一般我們使用 iptables 都是根據(jù) ip 或者端口進行匹配,比如-m tcp --dport 22。但其中也有一些比較有趣的匹配規(guī)則,比如上一篇文章中介紹過的 Android 單應(yīng)用抓包方法:

$iptables-AOUTPUT-mowner--uid-owner1000-jCONNMARK--set-mark1
$iptables-AINPUT-mconnmark--mark1-jNFLOG--nflog-group30
$iptables-AOUTPUT-mconnmark--mark1-jNFLOG--nflog-group30
$dumpcap-inflog:30-wuid-1000.pcap

用到了兩個匹配拓展,一個是owner拓展,使用--uid-owner參數(shù)表示創(chuàng)建當(dāng)前數(shù)據(jù)包的應(yīng)用 UID。但是這樣只能抓到外發(fā)的包,而服務(wù)器返回的包由于并不是本地進程創(chuàng)建的,因此沒有對應(yīng)的 UID 信息,因此 owner 拓展只能應(yīng)用于OUTPUT或者POSTROUTING鏈上。為了解決這個問題,上面使用了另一個拓展connmark,用來匹配 tcp 連接的標(biāo)志,這個標(biāo)志是在第一條命令中的外發(fā)數(shù)據(jù)中進行設(shè)置的。

還有個值得一提的匹配拓展是bpf,支持兩個參數(shù),可以使用--object-pinned直接加載編譯后的 eBPF 代碼,也可以通過--bytecode直接指定字節(jié)碼。直接指定的字節(jié)碼格式類似于tcpdump -ddd的輸出結(jié)果,第一條是總指令數(shù)目。

例如以下 bpf 指令 (ip proto 6):

4#numberofinstructions
48009#loadbyteip->proto
21016#jumpequalIPPROTO_TCP
6001#returnpass(non-zero)
6000#returnfail(zero)

實際調(diào)用時候需用用逗號分隔每條指令,且不支持注釋等其他符號:

iptables-AOUTPUT-mbpf--bytecode'4,48009,21016,6001,6000'-jACCEPT

對于其他遇到的匹配拓展,可以在官方文檔中查看其詳細用法。

target

target 表示數(shù)據(jù)包匹配之后要執(zhí)行的操作,一般使用大寫表示。標(biāo)準操作有 ACCEPT/DROP/RETURN 這三個,其他都定義在 target extensions 即目標(biāo)拓展中。

比如我們前面提到的CONNMARK就是其中一個拓展,其作用是對當(dāng)前鏈接進行打標(biāo),這樣 TCP 請求的返回數(shù)據(jù)也會帶上我們的標(biāo)記。類似的還有MARK拓展,表示對當(dāng)前數(shù)據(jù)包設(shè)置標(biāo)志,主要用于后續(xù) table/chain 的識別。

前面用到的另一個拓展是NFLOG,表示 netfilter logging,規(guī)則匹配后內(nèi)核會將其使用對應(yīng)的日志后端進行保存,通常與nfnetlink_log一起使用,通過多播的方式將獲取到的數(shù)據(jù)包發(fā)送到netlink套接字中,從而可以讓用戶態(tài)的抓包程序獲取并進行進一步分析。

其他常用的拓展還有SNAT/DNAT用于修改數(shù)據(jù)包的源地址和目的地址,LOG可以使內(nèi)核 dmesg 打印匹配的數(shù)據(jù)包信息,TRACE可以使內(nèi)核打印規(guī)則信息用于調(diào)試分析等。

Android Proxy

復(fù)習(xí)完 iptables 的基礎(chǔ)后,我們繼續(xù)回到文章開頭的問題,有什么辦法可以在不設(shè)置代理的基礎(chǔ)上代理所有流量呢?

這個問題可以從兩方面去考慮,即:

  1. 1. 如何匹配目標(biāo)數(shù)據(jù)包;

  2. 2. 匹配之后如何轉(zhuǎn)發(fā)到代理地址;

第一個問題比較簡單,我們需要匹配從本地發(fā)出的,目的端口是 80/443 的 tcp 流量,因此匹配規(guī)則可以寫為:

-ptcp-mtcp--dport443

在不確定目標(biāo) web 服務(wù)器端口的情況下,可以將 dport 指定為0:65535,對所有端口都進行劫持轉(zhuǎn)發(fā);當(dāng)然也可以直接不寫 match,默認就是匹配所有 tcp 包。不過可以稍微過濾一下目的地址,比如! -d 127.0.0.1,以免本地的 RPC 請求也被誤攔截。

或者,更優(yōu)雅的方案是使用multiport來一次性指定多個端口:

-mmultiport--dports80,443

第二個問題,既然我們需要將流量轉(zhuǎn)發(fā)到代理工具,那么可以選擇透明代理模式,上篇文章也有提到過。因此一個最簡單的方法是使用 DNAT 修改目的地址。查閱文檔可知,DNAT 只能用在nat表中的PREROUTINGOUTPUT鏈。再根據(jù)上文中的流程圖,如果代理地址在本地,那只能使用 OUTPUT、如果是遠程地址,那么兩個鏈任選一個即可。

綜上所述,假設(shè) HTTP 透明代理監(jiān)聽在127.0.0.1:8080,那么可以直接用以下方法設(shè)置代理并進行抓包:

iptables-tnat-AOUTPUT-ptcp!-d127.0.0.1-mmultiport--dports80,443-jDNAT--to-destination127.0.0.1:8080

更進一步

通過這么一條 iptables 命令,配合上透明代理就可以實現(xiàn)全局的 HTTPS 抓包了。所以就這樣了嗎?回憶一下之前我們其實是可以通過ownertarget 去進行 UID 匹配的,只不過之前是使用 NFLOG 配合 tcpdump 進行抓包。因此我們其實也可以通過類似的方式實現(xiàn)基于 UID 的透明代理。

轉(zhuǎn)發(fā)規(guī)則并沒有太大變化,只需要在匹配規(guī)則上新增一個約束。

iptables-tnat-AOUTPUT-ptcp!-d127.0.0.1-mowner--uid-owner2000-mmultiport--dports80,443-jDNAT--to-destination127.0.0.1:8080

這樣,不需要額外的路由抓包設(shè)備,甚至不需要引入 VPN Service 等其他應(yīng)用,只需要一行命令即可實現(xiàn)針對單個 Android 應(yīng)用的全局 HTTP/HTTPS 抓包。

elegant

總結(jié)

本文主要介紹了 iptables 規(guī)則的配置方法,并且實現(xiàn)了一種在 Android 中全局 HTTP(S) 抓包的方案,同時借助owner拓展實現(xiàn)應(yīng)用維度的進一步過濾,從而避免手機中其他應(yīng)用的干擾。

相比于傳統(tǒng)的 HTTP 代理抓包方案,該方法的優(yōu)勢是可以實現(xiàn)全局抓包,應(yīng)用無法通過禁用代理等方法繞過;而相比于 Wireshark 等抓包方案,該方法基于透明代理,因此可以使用 BurpSuite、MITMProxy 等成熟的 HTTP/HTTPS 網(wǎng)絡(luò)分析工具來對流量進行快速的可視化、攔截/重放,以及腳本分析等操作,這些優(yōu)勢是傳統(tǒng)抓包方案所無法比擬的。

iptables-tnat-AOUTPUT-ptcp!-d127.0.0.1-mowner--uid-owner2000-mmultiport--dports80,443-jDNAT--to-destination<burp ip:port>


(1).-t nat -A OUTPUT 使用nat表,在OUTPUT鏈追加規(guī)則
(2).-p tcp 指定只過濾tcp協(xié)議
(3).!d 127.0.0.1 不誤傷回環(huán)包,很嚴謹!
(4).-mowner--uid-owner2000 通過uid指定只看單個應(yīng)用的數(shù)據(jù)包
(5).-mmultiport--dports80,443 優(yōu)雅的一次性指定多個目標(biāo)端口,owsap wstg上分2條命令不夠優(yōu)雅!
(6).-jDNAT--to-destination<burp ip:port> 使用DNAT 即修改目標(biāo)地址到您的透明代理地址上,記得勾選 invisible proxy哦!
(7).iptables-tnat-F 搞事結(jié)束,清場恢復(fù)!
(8).驗證查看轉(zhuǎn)發(fā)效果,可使用提供的debugAOSP rom,開啟adb root(高權(quán)限啟動tcpdump),結(jié)合新版wireshark有線接口選擇捕獲android wlan0接口的數(shù)據(jù)包,完美驗證!
(9).https如果有證書pin的 還是要hook搞定下,否則信任鏈不通數(shù)據(jù)包
審核編輯 :李倩


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 服務(wù)器
    +關(guān)注

    關(guān)注

    13

    文章

    9795

    瀏覽量

    87980
  • 數(shù)據(jù)包
    +關(guān)注

    關(guān)注

    0

    文章

    269

    瀏覽量

    24990

原文標(biāo)題:參考鏈接

文章出處:【微信號:哆啦安全,微信公眾號:哆啦安全】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    一種基于IP的單向文件廣播傳輸方法

    【作者】:朱佩江;尹亞光;丁森華;【來源】:《廣播電視信息》2010年03期【摘要】:本文針對單向廣播信道設(shè)計定義了一種基于IP的單向文件傳輸協(xié)議用于支持各種文檔、圖像、音視頻片段、應(yīng)用軟件、服務(wù)
    發(fā)表于 04-23 11:38

    一種優(yōu)雅的方式去實現(xiàn)個Verilog版的狀態(tài)機

    描述:基于此,我們便可以方便快捷的去描述狀態(tài)機,以一種優(yōu)雅的方式去實現(xiàn)狀態(tài)機描述,而對于他人閱讀來講也是相當(dāng)OK的。等等,還有更好玩兒的。SpinalHDL里,定義了四
    發(fā)表于 07-13 14:56

    利用golang優(yōu)雅實現(xiàn)實例分享

    1、利用golang優(yōu)雅實現(xiàn)實例平時編寫代碼過程,經(jīng)常會遇到對于全局角度只需運行次的代碼
    發(fā)表于 10-17 16:46

    一種環(huán)境下的線性差錯控制編碼方法

    網(wǎng)絡(luò)傳輸的數(shù)據(jù)存在著丟失現(xiàn)象,需要一種高效的差錯控制方法。本文針對分組低密度糾刪碼編碼復(fù)雜度較高的缺陷,提出了一種利用卷積結(jié)構(gòu)
    發(fā)表于 01-09 11:32 ?7次下載

    一種特殊陣列實現(xiàn)DOA估計的方法

    一種特殊陣列實現(xiàn)DOA估計的方法:提出了一種基于特殊陣列形式實現(xiàn)doa估計的方法,
    發(fā)表于 03-18 16:18 ?19次下載

    一種基于的邏輯內(nèi)置自測試電路設(shè)計方法

    一種基于的邏輯內(nèi)置自測試電路設(shè)計方法
    發(fā)表于 02-07 16:14 ?12次下載

    一種新的基于全局特征的極光圖像分類方法

    提出了一種新的基于全局特征的極光圖像分類方法,方法,極光圖像通過Radon變換投影到Rad
    發(fā)表于 11-30 14:13 ?1次下載
    <b class='flag-5'>一種</b>新的基于<b class='flag-5'>全局</b>特征的極光圖像分類<b class='flag-5'>方法</b>

    全局變量和全局函數(shù)的三基本方法

    在教授學(xué)生使用V isuaIC++60的MFC基本應(yīng)用時,由于MFC制作的工程由很多文件構(gòu)成,它不能象般C+程序那樣隨意在類外定義全局變量,那樣有時會在運行程序時出現(xiàn)問題。軟件開
    發(fā)表于 04-03 10:30 ?3次下載

    一種分析繞組電氣參數(shù)對不同種類變形的全局靈敏度方法

    目前已有利用變壓器繞組電氣參數(shù)檢測繞組變形的方法,但對電氣參數(shù)變化與繞組變形之間的聯(lián)系的研究還不夠深入。為此,提出一種分析繞組電氣參數(shù)對不同種類變形的全局靈敏度方法。該
    發(fā)表于 04-10 14:49 ?1次下載

    一種基于排序?qū)W習(xí)的軟件眾任務(wù)推薦方法

    為了更有效地實現(xiàn)軟件眾任務(wù)推薦,提升軟件開發(fā)質(zhì)量,為工人推薦合適的任務(wù),降低工人利益受損風(fēng)險,以達到工人和眾平臺雙贏的效果,設(shè)計了一種基于排序?qū)W習(xí)的軟件眾
    發(fā)表于 04-23 11:13 ?4次下載
    <b class='flag-5'>一種</b>基于排序?qū)W習(xí)的軟件眾<b class='flag-5'>包</b>任務(wù)推薦<b class='flag-5'>方法</b>

    一種AUTOSAR軟件架構(gòu)RTE的實現(xiàn)方法

    介紹了一種AUTOSAR軟件架構(gòu)RTE的實現(xiàn)方法
    發(fā)表于 07-13 16:02 ?7次下載

    滲透測試過程中所使用的方法

    本篇只是簡單分享平常筆者滲透測試過程中所使用的方法,后面會繼續(xù)更新其他以及安卓端的方法
    的頭像 發(fā)表于 02-01 15:41 ?2015次閱讀

    如何抓取app數(shù)據(jù) 網(wǎng)絡(luò)原理及實現(xiàn)

    實現(xiàn)對App的網(wǎng)絡(luò)數(shù)據(jù),需要監(jiān)控App與服務(wù)器交互之間的網(wǎng)絡(luò)節(jié)點,監(jiān)控其中任意個網(wǎng)絡(luò)節(jié)點(網(wǎng)卡),獲取所有經(jīng)過網(wǎng)卡的數(shù)據(jù),對這些數(shù)
    發(fā)表于 08-11 09:30 ?4313次閱讀
    如何抓取app數(shù)據(jù)<b class='flag-5'>包</b> 網(wǎng)絡(luò)<b class='flag-5'>抓</b><b class='flag-5'>包</b>原理及<b class='flag-5'>實現(xiàn)</b>

    一種利用wireshark對遠程服務(wù)器/路由器網(wǎng)絡(luò)方法

    一種利用wireshark對遠程服務(wù)器/路由器網(wǎng)絡(luò)方法
    的頭像 發(fā)表于 09-21 08:03 ?4917次閱讀
    <b class='flag-5'>一種</b>利用wireshark對遠程服務(wù)器/路由器網(wǎng)絡(luò)<b class='flag-5'>抓</b><b class='flag-5'>包</b><b class='flag-5'>方法</b>

    CentOS中使用tcpdump

    CentOS中使用tcpdump
    的頭像 發(fā)表于 10-28 14:48 ?732次閱讀