Hi, most projects are on GitLab now.
luke-goddard / enumy Goto Github PK
View Code? Open in Web Editor NEWLinux post exploitation privilege escalation enumeration
License: MIT License
Linux post exploitation privilege escalation enumeration
License: MIT License
Hi, most projects are on GitLab now.
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.
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
Files in need of refractoring
sshd_conf_scan.c
reporter.c
sys_scan.c
file_system.c
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
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
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.
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.
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
Assigning every issue an ID is not scalable. A better approach could be to hash the issue name to get an issue ID.
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.
Need to give some thought into how to test enemy
Need a way to report and handle errors, the current approach is not very good
Lines 60 to 73 in 86a11f9
lstat should use filepath not the file name
The manylinux project is used as a basis for native python PIP modules to build binaries which run on many linux distributions. This may provide a simpler/more compatible alternative to musl?
https://github.com/pypa/manylinux/blob/master/docker/Dockerfile-x86_64
Ncurses is currently disabled while scans are being implemented
Code needs better consistent commenting
If enumy is running as root shared object injection is always reported as true. There should be a check to see if the current process is root
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.