什么是漏洞利用/java反序列化漏洞利用-0基础渗透入门教程
1.前言
2019年9月,禅道项目管理软件爆出全版本的RCE漏洞。于是便好奇漏洞的成因,在阅读作者的文章及自己复现分析后,发现漏洞其实算是一种越权调用,普通权限(用户组为1-10)的攻击者可通过/api/.php中方法,越权调用目录下所有的model模块和方法,从而实现SQL注入、任意文件读取、远程代码执行等攻击。
2.漏洞分析
在分析漏洞之前,先需要了解禅道的路由模式。禅道有两种路由模式(2)、GET方式,其中GET方式为常见的m=&f=形式传递模块和方法名,而(2)则是通过路径和分隔符的方式传递模块和方法名。路由方式及分隔符定义在/.php中,下载的禅道11.6.1默认使用路由方式。
接下来,从入口文件www/index.php开始分析禅道如何传参的,在index.php的66-68行,调用了三个方法()、()、()。
先跟进/base/.class.php查看方法,当路由方式为或者的时候,会调用方法,将$this->URI用”-”分割,第一个参数设置为模块名,第二个参数设置为方法名,检查是否存在后传递到类的变量中。
再跟进//model.php 方法,主要是验证将要调用的模块和方法对当前用户是否有权限,除了中定义的公开模块和方法之外,其他的方法都是需要登录的。
而本漏洞需要利用的模块和方法分别为api、,可以表中查询调用该接口所需要的权限组为1-10,这意味着普通用户即可以调用该接口。
最后到方法,通过之前获取的包含对应的类文件并实例化,随后调用方法从路径中获取方法对应的参数值,最后通过方法调用对应类中的对应方法并赋值。
存在漏洞接口为/api/.php的方法,这是一个能够调用所有model类的超级方法,51行方法能否调用指定指定模块的model文件并返回model对象。配合52行的函数便可以调用所有的model文件的所有方法。
3.漏洞利用
原作者利用的是文件写入和文件包含结合执行任意代码,这里有一个更加简单的方式可以直接写入。文件写入漏洞代码位于//model.php中的save方法,$和$都可以控制。
要想写入php文件这里需要可以在路径中引入”.”,这里先看禅道会对PATH中传递的参数名和参数值限制规则/.php,对参数值的正则为^[a-zA-Z0-9=_,`#+\^\/\.%\|\x7f-\xff]+$,这里其实是可以有”.”的。
但是为什么原作者放弃了直接写入的方法呢,真实原因在/base/.class.php的方法,程序会先匹配路径中是否有”.”,如果有的话,将第一个点之前的部分作为需要解析的路径,之后的部分作为视图类型。这就解释了之前漏洞作者为什么没能直接写入。
那么如何绕过呢,仔细分析程序发现在/api/.php的方法中调用了对参数进行处理,而会对参数值做一次url解码!那么问题迎刃而解了,可以对”.”以及其他被限制的字符做两次url编码,即可以绕过对字符串中”.”的分割以及之后正则的匹配。直接写入的请求如下:
由于路由的原因,必须覆盖www目录下的原有php文件才可以被直接解析,这里可以覆盖x.php。
4.参考链接
~
网络安全学习,我们一起交流
~