51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

新型php漏洞挖掘之debug导致的安全漏洞(Edusoho)

【过年了,每天发一篇以前的存货,一共七篇。】

现代cms框架(laraval/symfony/slim)的出现,导致现今的php漏洞出现点、原理、利用方法,发生了一些变化,这个系列希望可以总结一下自己挖掘的此类cms漏洞。

今天这个漏洞是Edusoho的一个user表dump漏洞。

首先,我简要说明一下漏洞原理。

【漏洞源码下载: https://mega.nz/#!4chVWCAB!xBVyC9QqxMCmeuLu3rGx__PwgkLe_a5NWUITLS3QzuM

0x01 开启DEBUG模式造成的隐患 {#0x01-debug}

Edusoho开启调试模式以后将会在程序出错后输出debug信息,其中包括当前环境中所有变量的值。默认的index.php是不开启debug的,但/api/index.php将会开启debug:

14512262668078.jpg

跟进一下框架的异常处理方法。Index.php里注册了异常处理:

ErrorHandler::register();
ExceptionHandler::register();

这里用的是Symfony框架自带的异常处理类:use Symfony\Component\Debug\ExceptionHandler;

跟进:

14512262936438.jpg

调用了set_exception_handler注册的异常处理方法。不断跟进,发现该类的getContent方法是输出错误内容的方法:

14512263050908.jpg

可见,这个异常类,将异常对象的"args"属性输出了。

认真学习过php异常处理类的同学应该知道,异常类的getTrace方法( http://php.net/manual/zh/exception.gettrace.php )是可以获取到当前上下文中所有变量的。

所以,这里这个debug模式,等于说可以将当前函数中定义的所有变量输出。那么试想,假设当前函数在出异常前,从数据库或文件中读取到了一些『敏感』信息,那么输出这个异常是不是就可以dump出这个『敏感变量』了呢?

明显这个猜想是可行的。

那么,我只需要在/api下找到一处出错的代码,并且当前函数中有敏感信息的地方,即可触发成一个『大漏洞』。

很幸运的是我找到了好几处。最简单的一处,/api/src/user.php:373

14512263202009.jpg

这个$follwers变量是一个未定义的变量呀,所以一定会触发错误。

正好,当前函数中有$user$follwings两个变量,$user变量是指定的用户,$follwings是它关注的用户。

所以,在报错输出调试信息以后,将会完全打印出这两个变量的值。而这两个变量都是从数据库user表里取出的数据,其中包含用户的所有信息(邮箱、密码hash、交易密码hash、salt、session、IP地址、昵称、登录时间等)。

另外,$follwings变量里也有这些信息,我只要批量关注所有人,这个漏洞就变成了一个dump数据库user表的漏洞。

0x02 利用方式一,直接获取任意用户user表信息 {#0x02-user}

访问 http://demo.edusoho.com/api/users/{用户id}/followings 即可,如 http://demo.edusoho.com/api/users/5/followings

14512263531475.jpg

0x03 利用方式二,利用社交属性批量获取信息 {#0x03}

利用方式二,首先关注你想获取密码的人,比如我关注了这四个,分别是Id为1、2、3、4的用户,其中1、4是管理员:

14512263722584.jpg

我的id是15670,直接访问 http://demo.edusoho.com/api/users/15670/followings ,即可获取我关注的所有人的所有信息,包括密码等:

14512263801766.jpg

诸如此处的地方还有一个。

http://demo.edusoho.com/api/users/1/friendship?toIds[]=a 通过传入数组制造warning:

14512263922457.jpg

其他位置肯定不止,还可能泄露其他信息,我就不一一挖掘了,只为证明问题存在。

这个漏洞已经私下里报给官方了,所以demo站已经修复。但搜索"powered by edusoho" 还是能找到很多存在漏洞的站,在时间上这个漏洞还是属于一个0day。

比如这个站:

http://mooc.sinepharm.com/api/users/1/followings

赞(2)
未经允许不得转载:工具盒子 » 新型php漏洞挖掘之debug导致的安全漏洞(Edusoho)