وقتی که یک Activity مقدار exported آن true باشد بدین معناست که تمام برنامه های نصب شده روی دستگاه شما و همچنین adb shell میتواند آنرا اجرا کند
نکته فنی اینکه اگر که دستگاه شما روت باشد با adb shell میتوانید تمام Activity هارا لانچ کنید فارغ ازینکه exported باشد یا non exported
#intent without extras
adb shell am start -n "com.package.name/.TargetActivity"
#intent with extras
adb shell am start -n "com.package.name/.TargetActivity" --es Name "Ali" --ei Age 18 --ez isAdmin true
#intent with custom category + deeplink
adb shell am start -n "com.package.name/.TargetActivity"\
-a android.intent.action.VIEW \
-c android.intent.category.DEFAULT \
-c android.intent.category.BROWSABLE \
-d "myapp://com.package.name/Access/HiddenSettings"
شما برای پنتست اینتنت ها ابتدا لازم است که اینتنت هایی که مقدار exported برابر true هست پیدا کنید اگر یک اکتیویتی به جز اکتیویتی Main مقدار exported آن برابر true باشد به عنوان یک مشکل امنیتی بالقوه به حساب می آید!
اگر اکتیویتی دیگری به جز Main را بنابه دلایلی ناچار شدید مقدار exported آنرا true کنید باید حتما داخل آن اکتیویتی چک شود که اینتنت این اکتیویتی به واسطه اکتیویتی دیگری از خود برنامه لانچ شده است یا مستقیما به واسطه adb shell یا دیگر برنامه های نصب شده روی سیستم عامل؛ در صورت لانچ شدن آن به واسطه اپ های دیگر یا adb shell باید جلوی اجرای برنامه گرفته شود یا به کرش منجر شود یا به یک اینتنت دیگر مثل صفحه لاگین ریدایرکت شود در غیر اینصورت برنامه ما دارای یک مشکل امنیتی بالقوه است!
مثال عملی:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// بررسی اینکه Intent از کجا آمده
if (isIntentFromExternalApp()) {
finish(); // بستن Activity
return;
}
setContentView(R.layout.activity_sensitive);
}
private boolean isIntentFromExternalApp() {
String callingPackage = getCallingPackage();
if (callingPackage == null) {
// یعنی با adb یا مستقیما از لانچر باز شده
return true;
}
// بررسی اینکه صداکننده خود برنامه است یا یک اپ اندرویدی دیگر
return !callingPackage.equals(getPackageName());
}
متود getCallingPackage() نام پکیج اپلیکیشنی را برمیگرداند که این Intent را فرستاده.
· اگر null بود → یعنی از adb یا لانچر بیرون از برنامه صدا زده شده.
· اگر برابر با getPackageName() نبود → یعنی از اپ دیگر آمده.
@securation
#Android #RE #Owasp #Mastg #Intent