Giter Club home page Giter Club logo

enumy's Introduction

Hi, most projects are on GitLab now.

enumy's People

Contributors

johnthesecond avatar luke-goddard avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

enumy's Issues

XFS filesystem d_type=0

I was using enumy on an OSCP box and and walking the file system would fail. All files would come up as unknown file type error. I added some extra debug statements, recompiled code an shipped off throw netcat and found that d_type returns 0?

The main filesystem is XFS

df -Th
Filesystem              Type      Size  Used Avail Use% Mounted on
/dev/mapper/centos-root xfs        18G  2.3G   16G  13% /
devtmpfs                devtmpfs  487M     0  487M   0% /dev
tmpfs                   tmpfs     497M     0  497M   0% /dev/shm
tmpfs                   tmpfs     497M     0  497M   0% /sys/fs/cgroup
tmpfs                   tmpfs     497M   13M  484M   3% /run
/dev/sda1               xfs       497M  164M  333M  33% /boot
tmpfs                   tmpfs     100M     0  100M   0% /run/user/1004
tmpfs                   tmpfs     100M     0  100M   0% /run/user/0

We can run xfs_info and see that f_type is set to 0

xfs_info / 
meta-data=/dev/mapper/centos-root isize=256    agcount=4, agsize=1144832 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=0        finobt=0
data     =                       bsize=4096   blocks=4579328, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
log      =internal               bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

This prevents enumy from figuring out if a file is a file or a directory etc.

make: *** [obj/exploit_suggester.o] Error 1

Got error on Ubuntu 18.04

src/scans/exploit_suggester.c:313:68: error: initializer element is not constant
 static struct PossibleExploit WootExploit = {Woot, "Woot", "", "", WootSize};
                                                                    ^~~~~~~~
src/scans/exploit_suggester.c:313:68: note: (near initialization for ‘WootExploit.vul_count’)
src/scans/exploit_suggester.c:313:15: warning: missing initializer for field ‘vul_count’ of ‘struct PossibleExploit’ [-Wmissing-field-initializers]
 static struct PossibleExploit WootExploit = {Woot, "Woot", "", "", WootSize};
               ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:28:24: note: ‘vul_count’ declared here
     const unsigned int vul_count; /* Size of vuln_versions */
                        ^~~~~~~~~
src/scans/exploit_suggester.c:314:65: error: initializer element is not constant
 static struct PossibleExploit BrkExploit = {Brk, "Brk", "", "", BrkSize};
                                                                 ^~~~~~~
src/scans/exploit_suggester.c:314:65: note: (near initialization for ‘BrkExploit.vul_count’)
src/scans/exploit_suggester.c:314:15: warning: missing initializer for field ‘vul_count’ of ‘struct PossibleExploit’ [-Wmissing-field-initializers]
 static struct PossibleExploit BrkExploit = {Brk, "Brk", "", "", BrkSize};
               ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:28:24: note: ‘vul_count’ declared here
     const unsigned int vul_count; /* Size of vuln_versions */
                        ^~~~~~~~~
src/scans/exploit_suggester.c:315:65: error: initializer element is not constant
 static struct PossibleExploit AveExploit = {Ave, "Ave", "", "", AveSize};
                                                                 ^~~~~~~
src/scans/exploit_suggester.c:315:65: note: (near initialization for ‘AveExploit.vul_count’)
src/scans/exploit_suggester.c:315:15: warning: missing initializer for field ‘vul_count’ of ‘struct PossibleExploit’ [-Wmissing-field-initializers]
 static struct PossibleExploit AveExploit = {Ave, "Ave", "", "", AveSize};
               ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:28:24: note: ‘vul_count’ declared here
     const unsigned int vul_count; /* Size of vuln_versions */
                        ^~~~~~~~~
src/scans/exploit_suggester.c:316:112: error: initializer element is not constant
 static struct PossibleExploit ElflblExploit = {Elflbl, "Elflbl", "http://www.exploit-db.com/exploits/744", "", ElflblSize};
                                                                                                                ^~~~~~~~~~
src/scans/exploit_suggester.c:316:112: note: (near initialization for ‘ElflblExploit.vul_count’)
src/scans/exploit_suggester.c:316:15: warning: missing initializer for field ‘vul_count’ of ‘struct PossibleExploit’ [-Wmissing-field-initializers]
 static struct PossibleExploit ElflblExploit = {Elflbl, "Elflbl", "http://www.exploit-db.com/exploits/744", "", ElflblSize};
               ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:28:24: note: ‘vul_count’ declared here
     const unsigned int vul_count; /* Size of vuln_versions */
                        ^~~~~~~~~
src/scans/exploit_suggester.c:317:77: error: initializer element is not constant
 static struct PossibleExploit ElfDumpExploit = {ElfDump, "ElfDump", "", "", ElfDumpSize};
                                                                             ^~~~~~~~~~~
src/scans/exploit_suggester.c:317:77: note: (near initialization for ‘ElfDumpExploit.vul_count’)
src/scans/exploit_suggester.c:317:15: warning: missing initializer for field ‘vul_count’ of ‘struct PossibleExploit’ [-Wmissing-field-initializers]
 static struct PossibleExploit ElfDumpExploit = {ElfDump, "ElfDump", "", "", ElfDumpSize};
               ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:28:24: note: ‘vul_count’ declared here
     const unsigned int vul_count; /* Size of vuln_versions */
                        ^~~~~~~~~
src/scans/exploit_suggester.c:318:71: error: initializer element is not constant
 static struct PossibleExploit ElfcdExploit = {Elfcd, "Elfcd", "", "", ElfcdSize};
                                                                       ^~~~~~~~~
src/scans/exploit_suggester.c:318:71: note: (near initialization for ‘ElfcdExploit.vul_count’)
src/scans/exploit_suggester.c:318:15: warning: missing initializer for field ‘vul_count’ of ‘struct PossibleExploit’ [-Wmissing-field-initializers]
 static struct PossibleExploit ElfcdExploit = {Elfcd, "Elfcd", "", "", ElfcdSize};
               ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:28:24: note: ‘vul_count’ declared here
     const unsigned int vul_count; /* Size of vuln_versions */
                        ^~~~~~~~~
src/scans/exploit_suggester.c:319:89: error: initializer element is not constant
 static struct PossibleExploit ExpandStackExploit = {ExpandStack, "ExpandStack", "", "", ExpandStackSize};
                                                                                         ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:319:89: note: (near initialization for ‘ExpandStackExploit.vul_count’)
src/scans/exploit_suggester.c:319:15: warning: missing initializer for field ‘vul_count’ of ‘struct PossibleExploit’ [-Wmissing-field-initializers]
 static struct PossibleExploit ExpandStackExploit = {ExpandStack, "ExpandStack", "", "", ExpandStackSize};
               ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:28:24: note: ‘vul_count’ declared here
     const unsigned int vul_count; /* Size of vuln_versions */
                        ^~~~~~~~~
src/scans/exploit_suggester.c:320:131: error: initializer element is not constant
 static struct PossibleExploit H00lyShitExploit = {H00lyShit, "H00lyShit", "http://www.exploit-db.com/exploits/2013", "2006-3626", H00lyShitSize};
                                                                                                                                   ^~~~~~~~~~~~~
src/scans/exploit_suggester.c:320:131: note: (near initialization for ‘H00lyShitExploit.vul_count’)
src/scans/exploit_suggester.c:320:15: warning: missing initializer for field ‘vul_count’ of ‘struct PossibleExploit’ [-Wmissing-field-initializers]
 static struct PossibleExploit H00lyShitExploit = {H00lyShit, "H00lyShit", "http://www.exploit-db.com/exploits/2013", "2006-3626", H00lyShitSize};
               ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:28:24: note: ‘vul_count’ declared here
     const unsigned int vul_count; /* Size of vuln_versions */
                        ^~~~~~~~~
src/scans/exploit_suggester.c:321:71: error: initializer element is not constant
 static struct PossibleExploit KdumpExploit = {Kdump, "Kdump", "", "", KdumpSize};
                                                                       ^~~~~~~~~
src/scans/exploit_suggester.c:321:71: note: (near initialization for ‘KdumpExploit.vul_count’)
src/scans/exploit_suggester.c:321:15: warning: missing initializer for field ‘vul_count’ of ‘struct PossibleExploit’ [-Wmissing-field-initializers]
 static struct PossibleExploit KdumpExploit = {Kdump, "Kdump", "", "", KdumpSize};
               ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:28:24: note: ‘vul_count’ declared here
     const unsigned int vul_count; /* Size of vuln_versions */
                        ^~~~~~~~~
src/scans/exploit_suggester.c:322:74: error: initializer element is not constant
 static struct PossibleExploit Km2PwnExploit = {Km2Pwn, "Km2Pwn", "", "", Km2PwnSize};
                                                                          ^~~~~~~~~~
src/scans/exploit_suggester.c:322:74: note: (near initialization for ‘Km2PwnExploit.vul_count’)
src/scans/exploit_suggester.c:322:15: warning: missing initializer for field ‘vul_count’ of ‘struct PossibleExploit’ [-Wmissing-field-initializers]
 static struct PossibleExploit Km2PwnExploit = {Km2Pwn, "Km2Pwn", "", "", Km2PwnSize};
               ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:28:24: note: ‘vul_count’ declared here
     const unsigned int vul_count; /* Size of vuln_versions */
                        ^~~~~~~~~
src/scans/exploit_suggester.c:323:68: error: initializer element is not constant
 static struct PossibleExploit KradExploit = {Krad, "Krad", "", "", KradSize};
                                                                    ^~~~~~~~
src/scans/exploit_suggester.c:323:68: note: (near initialization for ‘KradExploit.vul_count’)
src/scans/exploit_suggester.c:323:15: warning: missing initializer for field ‘vul_count’ of ‘struct PossibleExploit’ [-Wmissing-field-initializers]
 static struct PossibleExploit KradExploit = {Krad, "Krad", "", "", KradSize};
               ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:28:24: note: ‘vul_count’ declared here
     const unsigned int vul_count; /* Size of vuln_versions */
                        ^~~~~~~~~
src/scans/exploit_suggester.c:324:106: error: initializer element is not constant
 static struct PossibleExploit Krad3Exploit = {Krad3, "Krad3", "http://exploit-db.com/exploits/1397", "", Krad3Size};
                                                                                                          ^~~~~~~~~
src/scans/exploit_suggester.c:324:106: note: (near initialization for ‘Krad3Exploit.vul_count’)
src/scans/exploit_suggester.c:324:15: warning: missing initializer for field ‘vul_count’ of ‘struct PossibleExploit’ [-Wmissing-field-initializers]
 static struct PossibleExploit Krad3Exploit = {Krad3, "Krad3", "http://exploit-db.com/exploits/1397", "", Krad3Size};
               ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:28:24: note: ‘vul_count’ declared here
     const unsigned int vul_count; /* Size of vuln_versions */
                        ^~~~~~~~~
src/scans/exploit_suggester.c:325:77: error: initializer element is not constant
 static struct PossibleExploit Local26Exploit = {Local26, "Local26", "", "", Local26Size};
                                                                             ^~~~~~~~~~~
src/scans/exploit_suggester.c:325:77: note: (near initialization for ‘Local26Exploit.vul_count’)
src/scans/exploit_suggester.c:325:15: warning: missing initializer for field ‘vul_count’ of ‘struct PossibleExploit’ [-Wmissing-field-initializers]
 static struct PossibleExploit Local26Exploit = {Local26, "Local26", "", "", Local26Size};
               ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:28:24: note: ‘vul_count’ declared here
     const unsigned int vul_count; /* Size of vuln_versions */
                        ^~~~~~~~~
src/scans/exploit_suggester.c:326:68: error: initializer element is not constant
 static struct PossibleExploit LokoExploit = {Loko, "Loko", "", "", LokoSize};
                                                                    ^~~~~~~~
src/scans/exploit_suggester.c:326:68: note: (near initialization for ‘LokoExploit.vul_count’)
src/scans/exploit_suggester.c:326:15: warning: missing initializer for field ‘vul_count’ of ‘struct PossibleExploit’ [-Wmissing-field-initializers]
 static struct PossibleExploit LokoExploit = {Loko, "Loko", "", "", LokoSize};
               ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:28:24: note: ‘vul_count’ declared here
     const unsigned int vul_count; /* Size of vuln_versions */
                        ^~~~~~~~~
src/scans/exploit_suggester.c:327:124: error: initializer element is not constant
 static struct PossibleExploit Mremap_pteExploit = {Mremap_pte, "Mremap_pte", "http://www.exploit-db.com/exploits/160", "", Mremap_pteSize};
                                                                                                                            ^~~~~~~~~~~~~~
src/scans/exploit_suggester.c:327:124: note: (near initialization for ‘Mremap_pteExploit.vul_count’)
src/scans/exploit_suggester.c:327:15: warning: missing initializer for field ‘vul_count’ of ‘struct PossibleExploit’ [-Wmissing-field-initializers]
 static struct PossibleExploit Mremap_pteExploit = {Mremap_pte, "Mremap_pte", "http://www.exploit-db.com/exploits/160", "", Mremap_pteSize};
               ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:28:24: note: ‘vul_count’ declared here
     const unsigned int vul_count; /* Size of vuln_versions */
                        ^~~~~~~~~
src/scans/exploit_suggester.c:328:80: error: initializer element is not constant
 static struct PossibleExploit NewLocalExploit = {NewLocal, "NewLocal", "", "", NewLocalSize};
                                                                                ^~~~~~~~~~~~
src/scans/exploit_suggester.c:328:80: note: (near initialization for ‘NewLocalExploit.vul_count’)
src/scans/exploit_suggester.c:328:15: warning: missing initializer for field ‘vul_count’ of ‘struct PossibleExploit’ [-Wmissing-field-initializers]
 static struct PossibleExploit NewLocalExploit = {NewLocal, "NewLocal", "", "", NewLocalSize};
               ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:28:24: note: ‘vul_count’ declared here
     const unsigned int vul_count; /* Size of vuln_versions */
                        ^~~~~~~~~
src/scans/exploit_suggester.c:329:74: error: initializer element is not constant
 static struct PossibleExploit OngBakExploit = {OngBak, "OngBak", "", "", OngBakSize};
                                                                          ^~~~~~~~~~
src/scans/exploit_suggester.c:329:74: note: (near initialization for ‘OngBakExploit.vul_count’)
src/scans/exploit_suggester.c:329:15: warning: missing initializer for field ‘vul_count’ of ‘struct PossibleExploit’ [-Wmissing-field-initializers]
 static struct PossibleExploit OngBakExploit = {OngBak, "OngBak", "", "", OngBakSize};
               ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:28:24: note: ‘vul_count’ declared here
     const unsigned int vul_count; /* Size of vuln_versions */
                        ^~~~~~~~~
src/scans/exploit_suggester.c:330:74: error: initializer element is not constant
 static struct PossibleExploit PtraceExploit = {Ptrace, "Ptrace", "", "", PtraceSize};
                                                                          ^~~~~~~~~~
src/scans/exploit_suggester.c:330:74: note: (near initialization for ‘PtraceExploit.vul_count’)
src/scans/exploit_suggester.c:330:15: warning: missing initializer for field ‘vul_count’ of ‘struct PossibleExploit’ [-Wmissing-field-initializers]
 static struct PossibleExploit PtraceExploit = {Ptrace, "Ptrace", "", "", PtraceSize};
               ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:28:24: note: ‘vul_count’ declared here
     const unsigned int vul_count; /* Size of vuln_versions */
                        ^~~~~~~~~
src/scans/exploit_suggester.c:331:95: error: initializer element is not constant
 static struct PossibleExploit PtraceKmodExploit = {PtraceKmod, "PtraceKmod", "", "2007-4573", PtraceKmodSize};
                                                                                               ^~~~~~~~~~~~~~
src/scans/exploit_suggester.c:331:95: note: (near initialization for ‘PtraceKmodExploit.vul_count’)
src/scans/exploit_suggester.c:331:15: warning: missing initializer for field ‘vul_count’ of ‘struct PossibleExploit’ [-Wmissing-field-initializers]
 static struct PossibleExploit PtraceKmodExploit = {PtraceKmod, "PtraceKmod", "", "2007-4573", PtraceKmodSize};
               ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:28:24: note: ‘vul_count’ declared here
     const unsigned int vul_count; /* Size of vuln_versions */
                        ^~~~~~~~~
src/scans/exploit_suggester.c:332:138: error: initializer element is not constant
 static struct PossibleExploit PtraceKmod2Exploit = {PtraceKmod2, "PtraceKmod2", "http://www.exploit-db.com/exploits/15023", "2010-3301", PtraceKmod2Size};
                                                                                                                                          ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:332:138: note: (near initialization for ‘PtraceKmod2Exploit.vul_count’)
src/scans/exploit_suggester.c:332:15: warning: missing initializer for field ‘vul_count’ of ‘struct PossibleExploit’ [-Wmissing-field-initializers]
 static struct PossibleExploit PtraceKmod2Exploit = {PtraceKmod2, "PtraceKmod2", "http://www.exploit-db.com/exploits/15023", "2010-3301", PtraceKmod2Size};
               ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:28:24: note: ‘vul_count’ declared here
     const unsigned int vul_count; /* Size of vuln_versions */
                        ^~~~~~~~~
src/scans/exploit_suggester.c:333:80: error: initializer element is not constant
 static struct PossibleExploit Ptrace24Exploit = {Ptrace24, "Ptrace24", "", "", Ptrace24Size};
                                                                                ^~~~~~~~~~~~
src/scans/exploit_suggester.c:333:80: note: (near initialization for ‘Ptrace24Exploit.vul_count’)
src/scans/exploit_suggester.c:333:15: warning: missing initializer for field ‘vul_count’ of ‘struct PossibleExploit’ [-Wmissing-field-initializers]
 static struct PossibleExploit Ptrace24Exploit = {Ptrace24, "Ptrace24", "", "", Ptrace24Size};
               ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:28:24: note: ‘vul_count’ declared here
     const unsigned int vul_count; /* Size of vuln_versions */
                        ^~~~~~~~~
src/scans/exploit_suggester.c:334:71: error: initializer element is not constant
 static struct PossibleExploit PwnedExploit = {Pwned, "Pwned", "", "", PwnedSize};
                                                                       ^~~~~~~~~
src/scans/exploit_suggester.c:334:71: note: (near initialization for ‘PwnedExploit.vul_count’)
src/scans/exploit_suggester.c:334:15: warning: missing initializer for field ‘vul_count’ of ‘struct PossibleExploit’ [-Wmissing-field-initializers]
 static struct PossibleExploit PwnedExploit = {Pwned, "Pwned", "", "", PwnedSize};
               ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:28:24: note: ‘vul_count’ declared here
     const unsigned int vul_count; /* Size of vuln_versions */
                        ^~~~~~~~~
src/scans/exploit_suggester.c:335:74: error: initializer element is not constant
 static struct PossibleExploit Py2PwnExploit = {Py2Pwn, "Py2Pwn", "", "", Py2PwnSize};
                                                                          ^~~~~~~~~~
src/scans/exploit_suggester.c:335:74: note: (near initialization for ‘Py2PwnExploit.vul_count’)
src/scans/exploit_suggester.c:335:15: warning: missing initializer for field ‘vul_count’ of ‘struct PossibleExploit’ [-Wmissing-field-initializers]
 static struct PossibleExploit Py2PwnExploit = {Py2Pwn, "Py2Pwn", "", "", Py2PwnSize};
               ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:28:24: note: ‘vul_count’ declared here
     const unsigned int vul_count; /* Size of vuln_versions */
                        ^~~~~~~~~
src/scans/exploit_suggester.c:336:137: error: initializer element is not constant
 static struct PossibleExploit RaptorPrctlExploit = {RaptorPrctl, "RaptorPrctl", "http://www.exploit-db.com/exploits/2031", "2006-2451", RaptorPrctlSize};
                                                                                                                                         ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:336:137: note: (near initialization for ‘RaptorPrctlExploit.vul_count’)
src/scans/exploit_suggester.c:336:15: warning: missing initializer for field ‘vul_count’ of ‘struct PossibleExploit’ [-Wmissing-field-initializers]
 static struct PossibleExploit RaptorPrctlExploit = {RaptorPrctl, "RaptorPrctl", "http://www.exploit-db.com/exploits/2031", "2006-2451", RaptorPrctlSize};
               ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:28:24: note: ‘vul_count’ declared here
     const unsigned int vul_count; /* Size of vuln_versions */
                        ^~~~~~~~~
src/scans/exploit_suggester.c:337:110: error: initializer element is not constant
 static struct PossibleExploit PrctlExploit = {Prctl, "Prctl", "http://www.exploit-db.com/exploits/2004", "", PrctlSize};
                                                                                                              ^~~~~~~~~
src/scans/exploit_suggester.c:337:110: note: (near initialization for ‘PrctlExploit.vul_count’)
src/scans/exploit_suggester.c:337:15: warning: missing initializer for field ‘vul_count’ of ‘struct PossibleExploit’ [-Wmissing-field-initializers]
 static struct PossibleExploit PrctlExploit = {Prctl, "Prctl", "http://www.exploit-db.com/exploits/2004", "", PrctlSize};
               ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:28:24: note: ‘vul_count’ declared here
     const unsigned int vul_count; /* Size of vuln_versions */
                        ^~~~~~~~~
src/scans/exploit_suggester.c:338:113: error: initializer element is not constant
 static struct PossibleExploit Prctl2Exploit = {Prctl2, "Prctl2", "http://www.exploit-db.com/exploits/2005", "", Prctl2Size};
                                                                                                                 ^~~~~~~~~~
src/scans/exploit_suggester.c:338:113: note: (near initialization for ‘Prctl2Exploit.vul_count’)
src/scans/exploit_suggester.c:338:15: warning: missing initializer for field ‘vul_count’ of ‘struct PossibleExploit’ [-Wmissing-field-initializers]
 static struct PossibleExploit Prctl2Exploit = {Prctl2, "Prctl2", "http://www.exploit-db.com/exploits/2005", "", Prctl2Size};
               ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:28:24: note: ‘vul_count’ declared here
     const unsigned int vul_count; /* Size of vuln_versions */
                        ^~~~~~~~~
src/scans/exploit_suggester.c:339:113: error: initializer element is not constant
 static struct PossibleExploit Prctl3Exploit = {Prctl3, "Prctl3", "http://www.exploit-db.com/exploits/2005", "", Prctl3Size};
                                                                                                                 ^~~~~~~~~~
src/scans/exploit_suggester.c:339:113: note: (near initialization for ‘Prctl3Exploit.vul_count’)
src/scans/exploit_suggester.c:339:15: warning: missing initializer for field ‘vul_count’ of ‘struct PossibleExploit’ [-Wmissing-field-initializers]
 static struct PossibleExploit Prctl3Exploit = {Prctl3, "Prctl3", "http://www.exploit-db.com/exploits/2005", "", Prctl3Size};
               ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:28:24: note: ‘vul_count’ declared here
     const unsigned int vul_count; /* Size of vuln_versions */
                        ^~~~~~~~~
src/scans/exploit_suggester.c:340:113: error: initializer element is not constant
 static struct PossibleExploit Prctl4Exploit = {Prctl4, "Prctl4", "http://www.exploit-db.com/exploits/2011", "", Prctl4Size};
                                                                                                                 ^~~~~~~~~~
src/scans/exploit_suggester.c:340:113: note: (near initialization for ‘Prctl4Exploit.vul_count’)
src/scans/exploit_suggester.c:340:15: warning: missing initializer for field ‘vul_count’ of ‘struct PossibleExploit’ [-Wmissing-field-initializers]
 static struct PossibleExploit Prctl4Exploit = {Prctl4, "Prctl4", "http://www.exploit-db.com/exploits/2011", "", Prctl4Size};
               ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:28:24: note: ‘vul_count’ declared here
     const unsigned int vul_count; /* Size of vuln_versions */
                        ^~~~~~~~~
src/scans/exploit_suggester.c:341:71: error: initializer element is not constant
 static struct PossibleExploit RemapExploit = {Remap, "Remap", "", "", RemapSize};
                                                                       ^~~~~~~~~
src/scans/exploit_suggester.c:341:71: note: (near initialization for ‘RemapExploit.vul_count’)
src/scans/exploit_suggester.c:341:15: warning: missing initializer for field ‘vul_count’ of ‘struct PossibleExploit’ [-Wmissing-field-initializers]
 static struct PossibleExploit RemapExploit = {Remap, "Remap", "", "", RemapSize};
               ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:28:24: note: ‘vul_count’ declared here
     const unsigned int vul_count; /* Size of vuln_versions */
                        ^~~~~~~~~
src/scans/exploit_suggester.c:342:74: error: initializer element is not constant
 static struct PossibleExploit RipPwnExploit = {RipPwn, "RipPwn", "", "", RipPwnSize};
                                                                          ^~~~~~~~~~
src/scans/exploit_suggester.c:342:74: note: (near initialization for ‘RipPwnExploit.vul_count’)
src/scans/exploit_suggester.c:342:15: warning: missing initializer for field ‘vul_count’ of ‘struct PossibleExploit’ [-Wmissing-field-initializers]
 static struct PossibleExploit RipPwnExploit = {RipPwn, "RipPwn", "", "", RipPwnSize};
               ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:28:24: note: ‘vul_count’ declared here
     const unsigned int vul_count; /* Size of vuln_versions */
                        ^~~~~~~~~
src/scans/exploit_suggester.c:343:86: error: initializer element is not constant
 static struct PossibleExploit StackGrow2Exploit = {StackGrow2, "StackGrow2", "", "", StackGrow2Size};
                                                                                      ^~~~~~~~~~~~~~
src/scans/exploit_suggester.c:343:86: note: (near initialization for ‘StackGrow2Exploit.vul_count’)
src/scans/exploit_suggester.c:343:15: warning: missing initializer for field ‘vul_count’ of ‘struct PossibleExploit’ [-Wmissing-field-initializers]
 static struct PossibleExploit StackGrow2Exploit = {StackGrow2, "StackGrow2", "", "", StackGrow2Size};
               ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:28:24: note: ‘vul_count’ declared here
     const unsigned int vul_count; /* Size of vuln_versions */
                        ^~~~~~~~~
src/scans/exploit_suggester.c:344:80: error: initializer element is not constant
 static struct PossibleExploit UseLib24Exploit = {UseLib24, "UseLib24", "", "", UseLib24Size};
                                                                                ^~~~~~~~~~~~
src/scans/exploit_suggester.c:344:80: note: (near initialization for ‘UseLib24Exploit.vul_count’)
src/scans/exploit_suggester.c:344:15: warning: missing initializer for field ‘vul_count’ of ‘struct PossibleExploit’ [-Wmissing-field-initializers]
 static struct PossibleExploit UseLib24Exploit = {UseLib24, "UseLib24", "", "", UseLib24Size};
               ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:28:24: note: ‘vul_count’ declared here
     const unsigned int vul_count; /* Size of vuln_versions */
                        ^~~~~~~~~
src/scans/exploit_suggester.c:345:74: error: initializer element is not constant
 static struct PossibleExploit NewsmpExploit = {Newsmp, "Newsmp", "", "", NewsmpSize};
                                                                          ^~~~~~~~~~
src/scans/exploit_suggester.c:345:74: note: (near initialization for ‘NewsmpExploit.vul_count’)
src/scans/exploit_suggester.c:345:15: warning: missing initializer for field ‘vul_count’ of ‘struct PossibleExploit’ [-Wmissing-field-initializers]
 static struct PossibleExploit NewsmpExploit = {Newsmp, "Newsmp", "", "", NewsmpSize};
               ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:28:24: note: ‘vul_count’ declared here
     const unsigned int vul_count; /* Size of vuln_versions */
                        ^~~~~~~~~
src/scans/exploit_suggester.c:346:83: error: initializer element is not constant
 static struct PossibleExploit SnptracerExploit = {Snptracer, "Snptracer", "", "", SnptracerSize};
                                                                                   ^~~~~~~~~~~~~
src/scans/exploit_suggester.c:346:83: note: (near initialization for ‘SnptracerExploit.vul_count’)
src/scans/exploit_suggester.c:346:15: warning: missing initializer for field ‘vul_count’ of ‘struct PossibleExploit’ [-Wmissing-field-initializers]
 static struct PossibleExploit SnptracerExploit = {Snptracer, "Snptracer", "", "", SnptracerSize};
               ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:28:24: note: ‘vul_count’ declared here
     const unsigned int vul_count; /* Size of vuln_versions */
                        ^~~~~~~~~
src/scans/exploit_suggester.c:347:74: error: initializer element is not constant
 static struct PossibleExploit LoginxExploit = {Loginx, "Loginx", "", "", LoginxSize};
                                                                          ^~~~~~~~~~
src/scans/exploit_suggester.c:347:74: note: (near initialization for ‘LoginxExploit.vul_count’)
src/scans/exploit_suggester.c:347:15: warning: missing initializer for field ‘vul_count’ of ‘struct PossibleExploit’ [-Wmissing-field-initializers]
 static struct PossibleExploit LoginxExploit = {Loginx, "Loginx", "", "", LoginxSize};
               ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:28:24: note: ‘vul_count’ declared here
     const unsigned int vul_count; /* Size of vuln_versions */
                        ^~~~~~~~~
src/scans/exploit_suggester.c:348:71: error: initializer element is not constant
 static struct PossibleExploit ExpShExploit = {ExpSh, "ExpSh", "", "", ExpShSize};
                                                                       ^~~~~~~~~
src/scans/exploit_suggester.c:348:71: note: (near initialization for ‘ExpShExploit.vul_count’)
src/scans/exploit_suggester.c:348:15: warning: missing initializer for field ‘vul_count’ of ‘struct PossibleExploit’ [-Wmissing-field-initializers]
 static struct PossibleExploit ExpShExploit = {ExpSh, "ExpSh", "", "", ExpShSize};
               ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:28:24: note: ‘vul_count’ declared here
     const unsigned int vul_count; /* Size of vuln_versions */
                        ^~~~~~~~~
src/scans/exploit_suggester.c:349:131: error: initializer element is not constant
 static struct PossibleExploit Vmsplice1Exploit = {Vmsplice1, "Vmsplice1", "http://www.exploit-db.com/exploits/5092", "2008-0600", Vmsplice1Size};
                                                                                                                                   ^~~~~~~~~~~~~
src/scans/exploit_suggester.c:349:131: note: (near initialization for ‘Vmsplice1Exploit.vul_count’)
src/scans/exploit_suggester.c:349:15: warning: missing initializer for field ‘vul_count’ of ‘struct PossibleExploit’ [-Wmissing-field-initializers]
 static struct PossibleExploit Vmsplice1Exploit = {Vmsplice1, "Vmsplice1", "http://www.exploit-db.com/exploits/5092", "2008-0600", Vmsplice1Size};
               ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:28:24: note: ‘vul_count’ declared here
     const unsigned int vul_count; /* Size of vuln_versions */
                        ^~~~~~~~~
src/scans/exploit_suggester.c:350:131: error: initializer element is not constant
 static struct PossibleExploit Vmsplice2Exploit = {Vmsplice2, "Vmsplice2", "http://www.exploit-db.com/exploits/5093", "2008-0600", Vmsplice2Size};
                                                                                                                                   ^~~~~~~~~~~~~
src/scans/exploit_suggester.c:350:131: note: (near initialization for ‘Vmsplice2Exploit.vul_count’)
src/scans/exploit_suggester.c:350:15: warning: missing initializer for field ‘vul_count’ of ‘struct PossibleExploit’ [-Wmissing-field-initializers]
 static struct PossibleExploit Vmsplice2Exploit = {Vmsplice2, "Vmsplice2", "http://www.exploit-db.com/exploits/5093", "2008-0600", Vmsplice2Size};
               ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:28:24: note: ‘vul_count’ declared here
     const unsigned int vul_count; /* Size of vuln_versions */
                        ^~~~~~~~~
src/scans/exploit_suggester.c:351:80: error: initializer element is not constant
 static struct PossibleExploit VconsoleExploit = {Vconsole, "Vconsole", "", "", VconsoleSize};
                                                                                ^~~~~~~~~~~~
src/scans/exploit_suggester.c:351:80: note: (near initialization for ‘VconsoleExploit.vul_count’)
src/scans/exploit_suggester.c:351:15: warning: missing initializer for field ‘vul_count’ of ‘struct PossibleExploit’ [-Wmissing-field-initializers]
 static struct PossibleExploit VconsoleExploit = {Vconsole, "Vconsole", "", "", VconsoleSize};
               ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:28:24: note: ‘vul_count’ declared here
     const unsigned int vul_count; /* Size of vuln_versions */
                        ^~~~~~~~~
src/scans/exploit_suggester.c:352:68: error: initializer element is not constant
 static struct PossibleExploit SctpExploit = {Sctp, "Sctp", "", "", SctpSize};
                                                                    ^~~~~~~~
src/scans/exploit_suggester.c:352:68: note: (near initialization for ‘SctpExploit.vul_count’)
src/scans/exploit_suggester.c:352:15: warning: missing initializer for field ‘vul_count’ of ‘struct PossibleExploit’ [-Wmissing-field-initializers]
 static struct PossibleExploit SctpExploit = {Sctp, "Sctp", "", "", SctpSize};
               ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:28:24: note: ‘vul_count’ declared here
     const unsigned int vul_count; /* Size of vuln_versions */
                        ^~~~~~~~~
src/scans/exploit_suggester.c:353:119: error: initializer element is not constant
 static struct PossibleExploit FtrexExploit = {Ftrex, "Ftrex", "http://www.exploit-db.com/exploits/6851", "2008-4210", FtrexSize};
                                                                                                                       ^~~~~~~~~
src/scans/exploit_suggester.c:353:119: note: (near initialization for ‘FtrexExploit.vul_count’)
src/scans/exploit_suggester.c:353:15: warning: missing initializer for field ‘vul_count’ of ‘struct PossibleExploit’ [-Wmissing-field-initializers]
 static struct PossibleExploit FtrexExploit = {Ftrex, "Ftrex", "http://www.exploit-db.com/exploits/6851", "2008-4210", FtrexSize};
               ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:28:24: note: ‘vul_count’ declared here
     const unsigned int vul_count; /* Size of vuln_versions */
                        ^~~~~~~~~
src/scans/exploit_suggester.c:354:125: error: initializer element is not constant
 static struct PossibleExploit ExitNotifyExploit = {ExitNotify, "ExitNotify", "http://www.exploit-db.com/exploits/8369", "", ExitNotifySize};
                                                                                                                             ^~~~~~~~~~~~~~
src/scans/exploit_suggester.c:354:125: note: (near initialization for ‘ExitNotifyExploit.vul_count’)
src/scans/exploit_suggester.c:354:15: warning: missing initializer for field ‘vul_count’ of ‘struct PossibleExploit’ [-Wmissing-field-initializers]
 static struct PossibleExploit ExitNotifyExploit = {ExitNotify, "ExitNotify", "http://www.exploit-db.com/exploits/8369", "", ExitNotifySize};
               ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:28:24: note: ‘vul_count’ declared here
     const unsigned int vul_count; /* Size of vuln_versions */
                        ^~~~~~~~~
src/scans/exploit_suggester.c:355:116: error: initializer element is not constant
 static struct PossibleExploit UdevExploit = {Udev, "Udev", "http://www.exploit-db.com/exploits/8478", "2009-1185", UdevSize};
                                                                                                                    ^~~~~~~~
src/scans/exploit_suggester.c:355:116: note: (near initialization for ‘UdevExploit.vul_count’)
src/scans/exploit_suggester.c:355:15: warning: missing initializer for field ‘vul_count’ of ‘struct PossibleExploit’ [-Wmissing-field-initializers]
 static struct PossibleExploit UdevExploit = {Udev, "Udev", "http://www.exploit-db.com/exploits/8478", "2009-1185", UdevSize};
               ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:28:24: note: ‘vul_count’ declared here
     const unsigned int vul_count; /* Size of vuln_versions */
                        ^~~~~~~~~
src/scans/exploit_suggester.c:356:143: error: initializer element is not constant
 static struct PossibleExploit SockSendPage2Exploit = {SockSendPage2, "SockSendPage2", "http://www.exploit-db.com/exploits/9436", "2009-2692", SockSendPage2Size};
                                                                                                                                               ^~~~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:356:143: note: (near initialization for ‘SockSendPage2Exploit.vul_count’)
src/scans/exploit_suggester.c:356:15: warning: missing initializer for field ‘vul_count’ of ‘struct PossibleExploit’ [-Wmissing-field-initializers]
 static struct PossibleExploit SockSendPage2Exploit = {SockSendPage2, "SockSendPage2", "http://www.exploit-db.com/exploits/9436", "2009-2692", SockSendPage2Size};
               ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:28:24: note: ‘vul_count’ declared here
     const unsigned int vul_count; /* Size of vuln_versions */
                        ^~~~~~~~~
src/scans/exploit_suggester.c:357:140: error: initializer element is not constant
 static struct PossibleExploit SockSendPageExploit = {SockSendPage, "SockSendPage", "http://www.exploit-db.com/exploits/9435", "2009-2692", SockSendPageSize};
                                                                                                                                            ^~~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:357:140: note: (near initialization for ‘SockSendPageExploit.vul_count’)
src/scans/exploit_suggester.c:357:15: warning: missing initializer for field ‘vul_count’ of ‘struct PossibleExploit’ [-Wmissing-field-initializers]
 static struct PossibleExploit SockSendPageExploit = {SockSendPage, "SockSendPage", "http://www.exploit-db.com/exploits/9435", "2009-2692", SockSendPageSize};
               ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:28:24: note: ‘vul_count’ declared here
     const unsigned int vul_count; /* Size of vuln_versions */
                        ^~~~~~~~~
src/scans/exploit_suggester.c:358:177: error: initializer element is not constant
 static struct PossibleExploit UdpSendMsg32BitExploit = {UdpSendMsg32Bit, "UdpSendMsg32Bit", "http://downloads.securityfocus.com/vulnerabilities/exploits/36108.c", "2009-2698", UdpSendMsg32BitSize};
                                                                                                                                                                                 ^~~~~~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:358:177: note: (near initialization for ‘UdpSendMsg32BitExploit.vul_count’)
src/scans/exploit_suggester.c:358:15: warning: missing initializer for field ‘vul_count’ of ‘struct PossibleExploit’ [-Wmissing-field-initializers]
 static struct PossibleExploit UdpSendMsg32BitExploit = {UdpSendMsg32Bit, "UdpSendMsg32Bit", "http://downloads.securityfocus.com/vulnerabilities/exploits/36108.c", "2009-2698", UdpSendMsg32BitSize};
               ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:28:24: note: ‘vul_count’ declared here
     const unsigned int vul_count; /* Size of vuln_versions */
                        ^~~~~~~~~
src/scans/exploit_suggester.c:359:163: error: initializer element is not constant
 static struct PossibleExploit PipeC32BitExploit = {PipeC32Bit, "PipeC32Bit", "http://www.securityfocus.com/data/vulnerabilities/exploits/36901-1.c", "2009-3547", PipeC32BitSize};
                                                                                                                                                                   ^~~~~~~~~~~~~~
src/scans/exploit_suggester.c:359:163: note: (near initialization for ‘PipeC32BitExploit.vul_count’)
src/scans/exploit_suggester.c:359:15: warning: missing initializer for field ‘vul_count’ of ‘struct PossibleExploit’ [-Wmissing-field-initializers]
 static struct PossibleExploit PipeC32BitExploit = {PipeC32Bit, "PipeC32Bit", "http://www.securityfocus.com/data/vulnerabilities/exploits/36901-1.c", "2009-3547", PipeC32BitSize};
               ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:28:24: note: ‘vul_count’ declared here
     const unsigned int vul_count; /* Size of vuln_versions */
                        ^~~~~~~~~
src/scans/exploit_suggester.c:360:95: error: initializer element is not constant
 static struct PossibleExploit DoPageMoveExploit = {DoPageMove, "DoPageMove", "", "2010-0415", DoPageMoveSize};
                                                                                               ^~~~~~~~~~~~~~
src/scans/exploit_suggester.c:360:95: note: (near initialization for ‘DoPageMoveExploit.vul_count’)
src/scans/exploit_suggester.c:360:15: warning: missing initializer for field ‘vul_count’ of ‘struct PossibleExploit’ [-Wmissing-field-initializers]
 static struct PossibleExploit DoPageMoveExploit = {DoPageMove, "DoPageMove", "", "2010-0415", DoPageMoveSize};
               ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:28:24: note: ‘vul_count’ declared here
     const unsigned int vul_count; /* Size of vuln_versions */
                        ^~~~~~~~~
src/scans/exploit_suggester.c:361:129: error: initializer element is not constant
 static struct PossibleExploit ReiserfsExploit = {Reiserfs, "Reiserfs", "http://www.exploit-db.com/exploits/12130", "2010-1146", ReiserfsSize};
                                                                                                                                 ^~~~~~~~~~~~
src/scans/exploit_suggester.c:361:129: note: (near initialization for ‘ReiserfsExploit.vul_count’)
src/scans/exploit_suggester.c:361:15: warning: missing initializer for field ‘vul_count’ of ‘struct PossibleExploit’ [-Wmissing-field-initializers]
 static struct PossibleExploit ReiserfsExploit = {Reiserfs, "Reiserfs", "http://www.exploit-db.com/exploits/12130", "2010-1146", ReiserfsSize};
               ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:28:24: note: ‘vul_count’ declared here
     const unsigned int vul_count; /* Size of vuln_versions */
                        ^~~~~~~~~
src/scans/exploit_suggester.c:362:123: error: initializer element is not constant
 static struct PossibleExploit CanBcmExploit = {CanBcm, "CanBcm", "http://www.exploit-db.com/exploits/14814", "2010-2959", CanBcmSize};
                                                                                                                           ^~~~~~~~~~
src/scans/exploit_suggester.c:362:123: note: (near initialization for ‘CanBcmExploit.vul_count’)
src/scans/exploit_suggester.c:362:15: warning: missing initializer for field ‘vul_count’ of ‘struct PossibleExploit’ [-Wmissing-field-initializers]
 static struct PossibleExploit CanBcmExploit = {CanBcm, "CanBcm", "http://www.exploit-db.com/exploits/14814", "2010-2959", CanBcmSize};
               ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:28:24: note: ‘vul_count’ declared here
     const unsigned int vul_count; /* Size of vuln_versions */
                        ^~~~~~~~~
src/scans/exploit_suggester.c:363:123: error: initializer element is not constant
 static struct PossibleExploit RdsPwnExploit = {RdsPwn, "RdsPwn", "http://www.exploit-db.com/exploits/15285", "2010-3904", RdsPwnSize};
                                                                                                                           ^~~~~~~~~~
src/scans/exploit_suggester.c:363:123: note: (near initialization for ‘RdsPwnExploit.vul_count’)
src/scans/exploit_suggester.c:363:15: warning: missing initializer for field ‘vul_count’ of ‘struct PossibleExploit’ [-Wmissing-field-initializers]
 static struct PossibleExploit RdsPwnExploit = {RdsPwn, "RdsPwn", "http://www.exploit-db.com/exploits/15285", "2010-3904", RdsPwnSize};
               ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:28:24: note: ‘vul_count’ declared here
     const unsigned int vul_count; /* Size of vuln_versions */
                        ^~~~~~~~~
src/scans/exploit_suggester.c:364:138: error: initializer element is not constant
 static struct PossibleExploit HalfNelson1Exploit = {HalfNelson1, "HalfNelson1", "http://www.exploit-db.com/exploits/17787", "2010-3848", HalfNelson1Size};
                                                                                                                                          ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:364:138: note: (near initialization for ‘HalfNelson1Exploit.vul_count’)
src/scans/exploit_suggester.c:364:15: warning: missing initializer for field ‘vul_count’ of ‘struct PossibleExploit’ [-Wmissing-field-initializers]
 static struct PossibleExploit HalfNelson1Exploit = {HalfNelson1, "HalfNelson1", "http://www.exploit-db.com/exploits/17787", "2010-3848", HalfNelson1Size};
               ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:28:24: note: ‘vul_count’ declared here
     const unsigned int vul_count; /* Size of vuln_versions */
                        ^~~~~~~~~
src/scans/exploit_suggester.c:365:138: error: initializer element is not constant
 static struct PossibleExploit HalfNelson2Exploit = {HalfNelson2, "HalfNelson2", "http://www.exploit-db.com/exploits/17787", "2010-3850", HalfNelson2Size};
                                                                                                                                          ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:365:138: note: (near initialization for ‘HalfNelson2Exploit.vul_count’)
src/scans/exploit_suggester.c:365:15: warning: missing initializer for field ‘vul_count’ of ‘struct PossibleExploit’ [-Wmissing-field-initializers]
 static struct PossibleExploit HalfNelson2Exploit = {HalfNelson2, "HalfNelson2", "http://www.exploit-db.com/exploits/17787", "2010-3850", HalfNelson2Size};
               ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:28:24: note: ‘vul_count’ declared here
     const unsigned int vul_count; /* Size of vuln_versions */
                        ^~~~~~~~~
src/scans/exploit_suggester.c:366:138: error: initializer element is not constant
 static struct PossibleExploit HalfNelson3Exploit = {HalfNelson3, "HalfNelson3", "http://www.exploit-db.com/exploits/17787", "2010-4073", HalfNelson3Size};
                                                                                                                                          ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:366:138: note: (near initialization for ‘HalfNelson3Exploit.vul_count’)
src/scans/exploit_suggester.c:366:15: warning: missing initializer for field ‘vul_count’ of ‘struct PossibleExploit’ [-Wmissing-field-initializers]
 static struct PossibleExploit HalfNelson3Exploit = {HalfNelson3, "HalfNelson3", "http://www.exploit-db.com/exploits/17787", "2010-4073", HalfNelson3Size};
               ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:28:24: note: ‘vul_count’ declared here
     const unsigned int vul_count; /* Size of vuln_versions */
                        ^~~~~~~~~
src/scans/exploit_suggester.c:367:126: error: initializer element is not constant
 static struct PossibleExploit CapsToRootExploit = {CapsToRoot, "CapsToRoot", "http://www.exploit-db.com/exploits/15916", "", CapsToRootSize};
                                                                                                                              ^~~~~~~~~~~~~~
src/scans/exploit_suggester.c:367:126: note: (near initialization for ‘CapsToRootExploit.vul_count’)
src/scans/exploit_suggester.c:367:15: warning: missing initializer for field ‘vul_count’ of ‘struct PossibleExploit’ [-Wmissing-field-initializers]
 static struct PossibleExploit CapsToRootExploit = {CapsToRoot, "CapsToRoot", "http://www.exploit-db.com/exploits/15916", "", CapsToRootSize};
               ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:28:24: note: ‘vul_count’ declared here
     const unsigned int vul_count; /* Size of vuln_versions */
                        ^~~~~~~~~
src/scans/exploit_suggester.c:368:163: error: initializer element is not constant
 static struct PossibleExploit AmericanSignLanguageExploit = {AmericanSignLanguage, "AmericanSignLanguage", "http://www.securityfocus.com/bid/45408", "2010-4347", AmericanSignLanguageSize};
                                                                                                                                                                   ^~~~~~~~~~~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:368:163: note: (near initialization for ‘AmericanSignLanguageExploit.vul_count’)
src/scans/exploit_suggester.c:368:15: warning: missing initializer for field ‘vul_count’ of ‘struct PossibleExploit’ [-Wmissing-field-initializers]
 static struct PossibleExploit AmericanSignLanguageExploit = {AmericanSignLanguage, "AmericanSignLanguage", "http://www.securityfocus.com/bid/45408", "2010-4347", AmericanSignLanguageSize};
               ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:28:24: note: ‘vul_count’ declared here
     const unsigned int vul_count; /* Size of vuln_versions */
                        ^~~~~~~~~
src/scans/exploit_suggester.c:369:126: error: initializer element is not constant
 static struct PossibleExploit PktcdvdExploit = {Pktcdvd, "Pktcdvd", "http://www.exploit-db.com/exploits/15150", "2010-3437", PktcdvdSize};
                                                                                                                              ^~~~~~~~~~~
src/scans/exploit_suggester.c:369:126: note: (near initialization for ‘PktcdvdExploit.vul_count’)
src/scans/exploit_suggester.c:369:15: warning: missing initializer for field ‘vul_count’ of ‘struct PossibleExploit’ [-Wmissing-field-initializers]
 static struct PossibleExploit PktcdvdExploit = {Pktcdvd, "Pktcdvd", "http://www.exploit-db.com/exploits/15150", "2010-3437", PktcdvdSize};
               ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:28:24: note: ‘vul_count’ declared here
     const unsigned int vul_count; /* Size of vuln_versions */
                        ^~~~~~~~~
src/scans/exploit_suggester.c:370:138: error: initializer element is not constant
 static struct PossibleExploit Video4LinuxExploit = {Video4Linux, "Video4Linux", "http://www.exploit-db.com/exploits/15024", "2010-3081", Video4LinuxSize};
                                                                                                                                          ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:370:138: note: (near initialization for ‘Video4LinuxExploit.vul_count’)
src/scans/exploit_suggester.c:370:15: warning: missing initializer for field ‘vul_count’ of ‘struct PossibleExploit’ [-Wmissing-field-initializers]
 static struct PossibleExploit Video4LinuxExploit = {Video4Linux, "Video4Linux", "http://www.exploit-db.com/exploits/15024", "2010-3081", Video4LinuxSize};
               ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:28:24: note: ‘vul_count’ declared here
     const unsigned int vul_count; /* Size of vuln_versions */
                        ^~~~~~~~~
src/scans/exploit_suggester.c:371:135: error: initializer element is not constant
 static struct PossibleExploit MemodipperExploit = {Memodipper, "Memodipper", "http://www.exploit-db.com/exploits/18411", "2012-0056", MemodipperSize};
                                                                                                                                       ^~~~~~~~~~~~~~
src/scans/exploit_suggester.c:371:135: note: (near initialization for ‘MemodipperExploit.vul_count’)
src/scans/exploit_suggester.c:371:15: warning: missing initializer for field ‘vul_count’ of ‘struct PossibleExploit’ [-Wmissing-field-initializers]
 static struct PossibleExploit MemodipperExploit = {Memodipper, "Memodipper", "http://www.exploit-db.com/exploits/18411", "2012-0056", MemodipperSize};
               ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:28:24: note: ‘vul_count’ declared here
     const unsigned int vul_count; /* Size of vuln_versions */
                        ^~~~~~~~~
src/scans/exploit_suggester.c:372:123: error: initializer element is not constant
 static struct PossibleExploit SemTexExploit = {SemTex, "SemTex", "http://www.exploit-db.com/exploits/25444", "2013-2094", SemTexSize};
                                                                                                                           ^~~~~~~~~~
src/scans/exploit_suggester.c:372:123: note: (near initialization for ‘SemTexExploit.vul_count’)
src/scans/exploit_suggester.c:372:15: warning: missing initializer for field ‘vul_count’ of ‘struct PossibleExploit’ [-Wmissing-field-initializers]
 static struct PossibleExploit SemTexExploit = {SemTex, "SemTex", "http://www.exploit-db.com/exploits/25444", "2013-2094", SemTexSize};
               ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:28:24: note: ‘vul_count’ declared here
     const unsigned int vul_count; /* Size of vuln_versions */
                        ^~~~~~~~~
src/scans/exploit_suggester.c:373:138: error: initializer element is not constant
 static struct PossibleExploit PerfSweventExploit = {PerfSwevent, "PerfSwevent", "http://www.exploit-db.com/exploits/26131", "2013-2094", PerfSweventSize};
                                                                                                                                          ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:373:138: note: (near initialization for ‘PerfSweventExploit.vul_count’)
src/scans/exploit_suggester.c:373:15: warning: missing initializer for field ‘vul_count’ of ‘struct PossibleExploit’ [-Wmissing-field-initializers]
 static struct PossibleExploit PerfSweventExploit = {PerfSwevent, "PerfSwevent", "http://www.exploit-db.com/exploits/26131", "2013-2094", PerfSweventSize};
               ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:28:24: note: ‘vul_count’ declared here
     const unsigned int vul_count; /* Size of vuln_versions */
                        ^~~~~~~~~
src/scans/exploit_suggester.c:374:123: error: initializer element is not constant
 static struct PossibleExploit MsrPwnExploit = {MsrPwn, "MsrPwn", "http://www.exploit-db.com/exploits/27297", "2013-0268", MsrPwnSize};
                                                                                                                           ^~~~~~~~~~
src/scans/exploit_suggester.c:374:123: note: (near initialization for ‘MsrPwnExploit.vul_count’)
src/scans/exploit_suggester.c:374:15: warning: missing initializer for field ‘vul_count’ of ‘struct PossibleExploit’ [-Wmissing-field-initializers]
 static struct PossibleExploit MsrPwnExploit = {MsrPwn, "MsrPwn", "http://www.exploit-db.com/exploits/27297", "2013-0268", MsrPwnSize};
               ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:28:24: note: ‘vul_count’ declared here
     const unsigned int vul_count; /* Size of vuln_versions */
                        ^~~~~~~~~
src/scans/exploit_suggester.c:375:135: error: initializer element is not constant
 static struct PossibleExploit TimeOutPwnExploit = {TimeOutPwn, "TimeOutPwn", "http://www.exploit-db.com/exploits/31346", "2014-0038", TimeOutPwnSize};
                                                                                                                                       ^~~~~~~~~~~~~~
src/scans/exploit_suggester.c:375:135: note: (near initialization for ‘TimeOutPwnExploit.vul_count’)
src/scans/exploit_suggester.c:375:15: warning: missing initializer for field ‘vul_count’ of ‘struct PossibleExploit’ [-Wmissing-field-initializers]
 static struct PossibleExploit TimeOutPwnExploit = {TimeOutPwn, "TimeOutPwn", "http://www.exploit-db.com/exploits/31346", "2014-0038", TimeOutPwnSize};
               ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:28:24: note: ‘vul_count’ declared here
     const unsigned int vul_count; /* Size of vuln_versions */
                        ^~~~~~~~~
src/scans/exploit_suggester.c:376:166: error: initializer element is not constant
 static struct PossibleExploit RawModePTYExploit = {RawModePTY, "RawModePTY", "http://packetstormsecurity.com/files/download/126603/cve-2014-0196-md.c", "2014-0196", RawModePTYSize};
                                                                                                                                                                      ^~~~~~~~~~~~~~
src/scans/exploit_suggester.c:376:166: note: (near initialization for ‘RawModePTYExploit.vul_count’)
src/scans/exploit_suggester.c:376:15: warning: missing initializer for field ‘vul_count’ of ‘struct PossibleExploit’ [-Wmissing-field-initializers]
 static struct PossibleExploit RawModePTYExploit = {RawModePTY, "RawModePTY", "http://packetstormsecurity.com/files/download/126603/cve-2014-0196-md.c", "2014-0196", RawModePTYSize};
               ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:28:24: note: ‘vul_count’ declared here
     const unsigned int vul_count; /* Size of vuln_versions */
                        ^~~~~~~~~
src/scans/exploit_suggester.c:377:132: error: initializer element is not constant
 static struct PossibleExploit OverlayfsExploit = {Overlayfs, "Overlayfs", "http://www.exploit-db.com/exploits/39230", "2015-8660", OverlayfsSize};
                                                                                                                                    ^~~~~~~~~~~~~
src/scans/exploit_suggester.c:377:132: note: (near initialization for ‘OverlayfsExploit.vul_count’)
src/scans/exploit_suggester.c:377:15: warning: missing initializer for field ‘vul_count’ of ‘struct PossibleExploit’ [-Wmissing-field-initializers]
 static struct PossibleExploit OverlayfsExploit = {Overlayfs, "Overlayfs", "http://www.exploit-db.com/exploits/39230", "2015-8660", OverlayfsSize};
               ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:28:24: note: ‘vul_count’ declared here
     const unsigned int vul_count; /* Size of vuln_versions */
                        ^~~~~~~~~
src/scans/exploit_suggester.c:378:120: error: initializer element is not constant
 static struct PossibleExploit PPKeyExploit = {PPKey, "PPKey", "http://www.exploit-db.com/exploits/39277", "2016-0728", PPKeySize};
                                                                                                                        ^~~~~~~~~
src/scans/exploit_suggester.c:378:120: note: (near initialization for ‘PPKeyExploit.vul_count’)
src/scans/exploit_suggester.c:378:15: warning: missing initializer for field ‘vul_count’ of ‘struct PossibleExploit’ [-Wmissing-field-initializers]
 static struct PossibleExploit PPKeyExploit = {PPKey, "PPKey", "http://www.exploit-db.com/exploits/39277", "2016-0728", PPKeySize};
               ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:28:24: note: ‘vul_count’ declared here
     const unsigned int vul_count; /* Size of vuln_versions */
                        ^~~~~~~~~
src/scans/exploit_suggester.c:379:129: error: initializer element is not constant
 static struct PossibleExploit DirtyCowExploit = {DirtyCow, "DirtyCow", "http://www.exploit-db.com/exploits/40616", "2016-5195", DirtyCowSize};
                                                                                                                                 ^~~~~~~~~~~~
src/scans/exploit_suggester.c:379:129: note: (near initialization for ‘DirtyCowExploit.vul_count’)
src/scans/exploit_suggester.c:379:15: warning: missing initializer for field ‘vul_count’ of ‘struct PossibleExploit’ [-Wmissing-field-initializers]
 static struct PossibleExploit DirtyCowExploit = {DirtyCow, "DirtyCow", "http://www.exploit-db.com/exploits/40616", "2016-5195", DirtyCowSize};
               ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:28:24: note: ‘vul_count’ declared here
     const unsigned int vul_count; /* Size of vuln_versions */
                        ^~~~~~~~~
src/scans/exploit_suggester.c:380:129: error: initializer element is not constant
 static struct PossibleExploit AfPacketExploit = {AfPacket, "AfPacket", "http://www.exploit-db.com/exploits/40871", "2016-8655", AfPacketSize};
                                                                                                                                 ^~~~~~~~~~~~
src/scans/exploit_suggester.c:380:129: note: (near initialization for ‘AfPacketExploit.vul_count’)
src/scans/exploit_suggester.c:380:15: warning: missing initializer for field ‘vul_count’ of ‘struct PossibleExploit’ [-Wmissing-field-initializers]
 static struct PossibleExploit AfPacketExploit = {AfPacket, "AfPacket", "http://www.exploit-db.com/exploits/40871", "2016-8655", AfPacketSize};
               ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:28:24: note: ‘vul_count’ declared here
     const unsigned int vul_count; /* Size of vuln_versions */
                        ^~~~~~~~~
src/scans/exploit_suggester.c:381:144: error: initializer element is not constant
 static struct PossibleExploit PacketSetRingExploit = {PacketSetRing, "PacketSetRing", "http://www.exploit-db.com/exploits/41994", "2017-7308", PacketSetRingSize};
                                                                                                                                                ^~~~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:381:144: note: (near initialization for ‘PacketSetRingExploit.vul_count’)
src/scans/exploit_suggester.c:381:15: warning: missing initializer for field ‘vul_count’ of ‘struct PossibleExploit’ [-Wmissing-field-initializers]
 static struct PossibleExploit PacketSetRingExploit = {PacketSetRing, "PacketSetRing", "http://www.exploit-db.com/exploits/41994", "2017-7308", PacketSetRingSize};
               ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:28:24: note: ‘vul_count’ declared here
     const unsigned int vul_count; /* Size of vuln_versions */
                        ^~~~~~~~~
src/scans/exploit_suggester.c:382:132: error: initializer element is not constant
 static struct PossibleExploit CloneNewUserExploit = {CloneNewUser, "CloneNewUser", "http://www.exploit-db.com/exploits/38390", "", CloneNewUserSize};
                                                                                                                                    ^~~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:382:132: note: (near initialization for ‘CloneNewUserExploit.vul_count’)
src/scans/exploit_suggester.c:382:15: warning: missing initializer for field ‘vul_count’ of ‘struct PossibleExploit’ [-Wmissing-field-initializers]
 static struct PossibleExploit CloneNewUserExploit = {CloneNewUser, "CloneNewUser", "http://www.exploit-db.com/exploits/38390", "", CloneNewUserSize};
               ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:28:24: note: ‘vul_count’ declared here
     const unsigned int vul_count; /* Size of vuln_versions */
                        ^~~~~~~~~
src/scans/exploit_suggester.c:383:127: error: initializer element is not constant
 static struct PossibleExploit GetRektExploit = {GetRekt, "GetRekt", "http://www.exploit-db.com/exploits/45010", "2017-16695", GetRektSize};
                                                                                                                               ^~~~~~~~~~~
src/scans/exploit_suggester.c:383:127: note: (near initialization for ‘GetRektExploit.vul_count’)
src/scans/exploit_suggester.c:383:15: warning: missing initializer for field ‘vul_count’ of ‘struct PossibleExploit’ [-Wmissing-field-initializers]
 static struct PossibleExploit GetRektExploit = {GetRekt, "GetRekt", "http://www.exploit-db.com/exploits/45010", "2017-16695", GetRektSize};
               ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:28:24: note: ‘vul_count’ declared here
     const unsigned int vul_count; /* Size of vuln_versions */
                        ^~~~~~~~~
src/scans/exploit_suggester.c:384:130: error: initializer element is not constant
 static struct PossibleExploit ExploitXExploit = {ExploitX, "ExploitX", "http://www.exploit-db.com/exploits/45697", "2018-14665", ExploitXSize};
                                                                                                                                  ^~~~~~~~~~~~
src/scans/exploit_suggester.c:384:130: note: (near initialization for ‘ExploitXExploit.vul_count’)
src/scans/exploit_suggester.c:384:15: warning: missing initializer for field ‘vul_count’ of ‘struct PossibleExploit’ [-Wmissing-field-initializers]
 static struct PossibleExploit ExploitXExploit = {ExploitX, "ExploitX", "http://www.exploit-db.com/exploits/45697", "2018-14665", ExploitXSize};
               ^~~~~~~~~~~~~~~
src/scans/exploit_suggester.c:28:24: note: ‘vul_count’ declared here
     const unsigned int vul_count; /* Size of vuln_versions */
                        ^~~~~~~~~
make: *** [obj/exploit_suggester.o] Error 1

refractor / tlc

Files in need of refractoring

sshd_conf_scan.c
reporter.c
sys_scan.c
file_system.c

Segfault when statically linked against musl

Bug only reproducible inside of release binary when compiled with musl in Alpine, with multiple threads enabled.

/**
 * This function will check the current file to see if it resides in a location 
 * that should be read only
 */
static void check_global_write(All_Results *ar, File_Info *fi)
{
    if (!has_global_write(fi))
        return;

    /* Check to see if the file is protected by any parent directories */
    char parent_buf[MAXSIZE] = {'\0'};
    char issue_buf[MAXSIZE + 50] = {'\0'};

    if (get_first_dir_that_protects_file(fi->location, parent_buf, ar))
    {
        /* The directory is protected */
        snprintf(issue_buf, (sizeof(issue_buf) - 1), "Found a protected world writable file in: %s", parent_buf);
        struct stat stats;
        if ((stat(parent_buf, &stats) != 0))
        {
            log_error_errno_loc(ar, "Failed to stat directory", parent_buf, errno);
            printf("%i -> %i -> %s -> %i -> %s\n", LOW, AUDIT, fi->location, ar == NULL, issue_buf);
            add_issue(LOW, AUDIT, fi->location, ar, issue_buf, "ENUMY failed to stat the parent directory");
            return;
        }
        struct passwd *data = getpwuid(stats.st_uid); <======== Segfault here 
        if (data == NULL)
        {
            log_error_errno_loc(ar, "Failed to stat directory", parent_buf, errno);
            add_issue(LOW, AUDIT, fi->location, ar, issue_buf, "ENUMY failed to got the owner of the directory");
            return;
        }
        add_issue(LOW, AUDIT, fi->location, ar, issue_buf, data->pw_name);
        return;
    }
debug extra-> src/all_scans.c:99:scan_file_for_issues(): Scanning file ->/home/luke/some_file
[!] - ERROR -> Failed to stat directory: No data available /home/luke/

This file does exist and previous stat calls worked on the same file.

$ gdb ouput/enumy64
@gdb-peda$ set follow-fork-mode parent 
@gdb-peda$ start -t 12 
@gdb-peda$ c
...Stopped reason: SIGSEGV
@gdb-peda$ backtrace 
#0  unmap_chunk (self=0x7ffffa5dc930) at src/malloc/malloc.c:515
#1  free (p=p@entry=0x7ffffa5dc940) at src/malloc/malloc.c:526
#2  0x00007ffff7fe0eb6 in realloc (p=0x7ffffa5dc940, n=<optimized out>, n@entry=0x32) at src/malloc/malloc.c:436
#3  0x00007ffff7fea1a6 in getdelim (s=s@entry=0x7ffff7ffe350 <line>, n=n@entry=0x7ffff7ffe318 <size>, delim=delim@entry=0xa, f=f@entry=0x7ffffa65b120) at src/stdio/getdelim.c:38
#4  0x00007ffff7fe276e in getline (s=s@entry=0x7ffff7ffe350 <line>, n=n@entry=0x7ffff7ffe318 <size>, f=f@entry=0x7ffffa65b120) at src/stdio/getline.c:5
#5  0x00007ffff7fe1961 in __getpwent_a (f=f@entry=0x7ffffa65b120, pw=pw@entry=0x7ffff7ffe320 <pw>, line=line@entry=0x7ffff7ffe350 <line>, size=size@entry=0x7ffff7ffe318 <size>, res=res@entry=0x7ffff7f33bb8) at src/passwd/getpwent_a.c:19
#6  0x00007ffff7fe9044 in __getpw_a (name=name@entry=0x0, uid=0x3e8, pw=pw@entry=0x7ffff7ffe320 <pw>, buf=buf@entry=0x7ffff7ffe350 <line>, size=size@entry=0x7ffff7ffe318 <size>, res=res@entry=0x7ffff7f33bb8) at src/passwd/getpw_a.c:36
#7  0x00007ffff7fe18f0 in getpwuid (uid=<optimized out>) at src/passwd/getpwent.c:28
#8  0x00007ffff7fdac56 in check_global_write (ar=0x7ffff8000860, fi=0x7ffffa6c6360) at src/scans/permissions_scan.c:80
#9  0x00007ffff7fdaa57 in permissions_scan (fi=0x7ffffa6c6360, ar=0x7ffff8000860, users=0x7ffff80ea500) at src/scans/permissions_scan.c:50
#10 0x00007ffff7fcf5b9 in scan_file_for_issues (thread_pool_args=0x7ffff8000940) at src/all_scans.c:106
#11 0x00007ffff7fd527b in thread_do (thread_p=0x7ffff8b25880) at src/thpool.c:362
#12 0x00007ffff7fe6270 in start (p=0x7ffff7f34ee8) at src/thread/pthread_create.c:192
#13 0x00007ffff7fe6f23 in __clone () at src/thread/x86_64/clone.s:22
@gdb-peda$ frame 8
@gdb-peda$ stats = {
  st_dev = 0x30,
  st_ino = 0x75c0,
  st_nlink = 0xc,
  st_mode = 0x41c0,
  st_uid = 0x3e8,
  st_gid = 0x3d9,
  __pad0 = 0x0,
  st_rdev = 0x0,
  st_size = 0x17c,
  st_blksize = 0x1000,
  st_blocks = 0x0,
  st_atim = {
    tv_sec = 0x5ed7a82e,
    tv_nsec = 0x3cbe13
  },
  st_mtim = {
    tv_sec = 0x5ed7a7b2,
    tv_nsec = 0x23cd2232
  },
  st_ctim = {
    tv_sec = 0x5ed7a7b2,
    tv_nsec = 0x23cd2232
  },
  __unused = {0x0, 0x0, 0x0}
}
data = 0x0
parent_buf = "/run/user/1000/", '\000' <repeats 2033 times>
issue_buf = "Found a protected world writable file in: /run/user/1000/", '\000' <repeats 2041 times>
@gdb-peda$ x/10i $rip-10
   0x7ffff7fe0eac <realloc+368>:        mov    edi,esp
   0x7ffff7fe0eae <realloc+370>:        mov    r12,r14
   0x7ffff7fe0eb1 <realloc+373>:        call   0x7ffff7fe0d05 <free>
=> 0x7ffff7fe0eb6 <realloc+378>:        add    rsp,0x18
   0x7ffff7fe0eba <realloc+382>:        mov    rax,r12

I've commented the code causing the segfault

How to tackle enumerating mount points

One of the scans is going to iterate through all the mount points and check if they're encrypted.

I did a bit of research and found the following file systems

File system type supports encryption encrypted by default
VFAT ? ?
exFAT ? ?
mkexfatfs(8) ? ?
F2FS ? ?
ext3 ? ?
ext4 ? ?
HFS ? ?
HFS+ ? ?
JFS ? ?
NILFS2 ? ?
NTFS ? ?
ReiserFS ? ?
UDF ? ?

I also know of Luks, that to my knowledge works on all filesystem types as a separate layer on top.

Without using blkid how would I get all mount points and test if they're encrypted?

I encrypted a USB with luks/etx4 and mounted it but /proc/mounts did not show indication of encryption.

 /dev/mapper/reddrive /mnt ext4 rw,relatime 0 0

How to hand RPATH edge case

One of the scans will parse ELF files and find the DT_RUNPATH and DT_RPATH. Then if it finds a path we check to see if we have to write access at that location so that we can inject a malicious shared object. From testing I found the following edge case.

$ readelf -d /opt/minecraft-launcher/minecraft-launcher | grep RPATH
  0x000000000000000f (RPATH)              Library rpath: [.:$ORIGIN/]

This gets split into to two values.

  1. "."
  2. "$ORIGIN/"

I understand that $ORIGIN gets replaced with the binaries' current working directory. But what on earth does "." do? I've looked through loads of documentation and cannot find anything. I also looked at ld.so source code but I did not really understand it.

[Feature Request] User Friendly Reports

enumy finds lots of useful info but, it can some times be a bit hard to analyze when the reports big and there's lots their.

Perhaps, have an option to create an html report with hyperlinks and cullers as well as minimizing or expanding sections, this may make it easier to analyze.
Thanks

Scrap issue ID's for hashes

Assigning every issue an ID is not scalable. A better approach could be to hash the issue name to get an issue ID.

Elf file parser 64/32 Bit compatibility

Current enumy64 can only handle 64 bit elfs and will skip 32 bit elfs. This is currently a limitation but would be good in the future if both could be supported.

Testing

Need to give some thought into how to test enemy

Error reporting

Need a way to report and handle errors, the current approach is not very good

bug lstat uses wrong path

enumy/src/file_system.c

Lines 60 to 73 in 86a11f9

unsigned char get_d_type(struct dirent* entry, const char* location) {
struct stat statbuf;
unsigned char rv = DT_UNKNOWN;
if (DT_UNKNOWN == entry->d_type){
char filepath[MAXSIZE];
strncpy(filepath, location, MAXSIZE - 1);
strncat(filepath, entry->d_name, MAXSIZE - 1);
// The call to lstat here might not be thread safe, if the call is being made on the same file at the same time.
// I think there ius no way that this happens at the moment, but am not sure at all.
// Could globally lock this or do some sort of filesystem hash to make this more fine-grained etc.
if(-1 != lstat(entry->d_name, &statbuf))

lstat should use filepath not the file name

ncurses

Ncurses is currently disabled while scans are being implemented

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.