首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

从SQL注入到Getshell:记一次禅道系统的渗透

此过程为某站点的渗透记录,过程一波三折,但归根结底都是粗心大意造成的,不过自我认为在这个排坑的过程中也学习到了很多。

确认版本

首先可以通过接口来确认一下当前禅道的版本。

http://example.com/index.php?mode=getconfig

SQL注入分析

网上之前有过一个的函数的分析,但是没想到也存在此问题,(号看到目前最新版本是)。

对于后未做严格的过滤与判断,然后拼接到了后面导致产生注入.

看了一下的修补是对limit进行正则限制,但是事实上感觉此处正则是写了一个bug,比如正常调用的时候,其中为的时候,进入则是,导致匹配失败。

如果想要造成前台注入(无需登录)的话,就得先看看禅道开放了哪些接口,看是否有调用函数。

\zentao\module\common\model.php

其中的,也就是本次漏洞的主角,继续跟进。

\zentao\module\block\control.php

首先看中,是在验证的值,如果为真的话则后面的将不会进入语句里面

接下来跟进函数,可以看到最后的,会对一些函数进行调用,与此同时,我们搜索的调用的时候可以发现函数的存在

\zentao\module\block\control.php

所以前台注入的整个过程便比较清晰了,那么如何利用?

SQL注入利用

回过头来,因为禅道有windows直接的一键化安装程序,其数据库使用的也是权限,导致可直接导出shell,但是如果没有这么高权限的时候,对于这个注入应该如何出数据。

禅道是支持多语句的,这也为后面的利用提供方便。

注入出数据库名和表段名后,当我想继续注入出用户账号密码的时候,意外地发现没有出数据。

还是没有出数据,猜测是管理员改了表前缀,所以想去通过查询一下表名,但是意外地发现,也不能读取?难道被删了?但是我还是想知道一下表前缀。

请求的时候加了一个单引号,并且加上referer,看一下报错信息。

因为PDO的关系,SQL中的表名是替代的,所以未能够得到库名。

那么就利用报错去得到当前SQl语句里面查询的表名,比如利用函数。

此注入点可以理解为limit后的注入点,因为使用多语句的话,报错效果不明显,所以就直接在limit后面进行注入。

上图为本地测试,但是limit的注入和mysql版本还有一些关系,目前网上的payload仅限于低版本才可报错注入出数据,很不幸运的是,目标使用的是高版本mysql。

那既然可以多语句,在不能用的情况下,可以通过下面语法来进行盲注:

写到py里面的payload是这样的

经过一番折腾发现,表前缀就是默认的,但是为啥又不能够读取到用户数据呢?

仔细看到禅道里面的函数,发现做了过滤。

把下划线给过滤掉了,那这种在多语句下,可以利用mysql的预查询来绕过,值得注意的是,这个版本语法大小写敏感。

注入出admin密码的时候,惊喜地发现不能解开,无奈之下,只能先拿到一个普通账号。

Getshell

禅道在防止getshell方面还花了一点心思,曾经挖到一个可以任意写文件getshell(最新版本还存在这段代码),不过需要的权限是管理员权限。

看了一下禅道里面人员组织架构情况,有研发、项目经理、产品经理,高层管理,系统管理员等角色,其中系统管理员虽然密码解不开,但是我们可以去解密一下高层管理的密码,因为这个角色的权限是可以修改某用户的用户组权限。在高层管理账号中,我们可以将一个普通账号修改为管理员。

接下来就是写文件Getshell:

/xampp/zentaopro/module/api/control.php

可以看到是进入了call_user_func_array,也就是我们可以任意实例化一个module方法,方法的参数也是可控的,可以通过来分割参数。

/zentaopro/module/editor/model.php

在editor中是可以写一个文件的,filePath可控,fileContent也是可控的,这下就是可以任意写一个文件。

Exp:

但是问题又来了,前面报错里面得到的路径目录感觉像是做了权限(这里绕弯了,路径少加了一个www,所以以为是没权限写),最终从数据库中的获取上传文件的路径,然后再将shell写入当中才得以结束。

总结

对于的漏洞如何进行防御的时候,我觉得上面代码在部分上有可取之处。

1、去掉部分,然后限制格式

2、然后循环对每个字段进行反引号的添加

整个过程就是自己在挖莫名其妙的坑,然后再一个个慢慢补上,希望能够对大家有用。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180308B16VRB00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券