欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

老牌CMS——PHPMyWind代码审计

来源:本站整理 作者:佚名 时间:2019-09-06 TAG: 我要投稿

0×01 环境搭建
Phpstudy
PHPMyWind 5.6(http://phpmywind.com/downloads/PHPMyWind_5.6.zip)
代码审计工具(Seay源代码审计系统)
 
0×02 代码审计过程
我们拥有了一个CMS的源码,其实我们可以先不用着急先去看看这个CMS以前报过的漏洞,这个CMS比较老牌,稍微一查,就在乌云知识库发现了很多信息。

然后我们先看看这里漏洞为什么产生,究竟为什么,然后往那个方面思考。然后我们再去将源码就先放入根目录访问开始安装吧!安装好之后我们查看index.php文件,开头第一行就是文件包含,包含/include/config.inc.php这个文件,这个文件包含了好几个文件
我们着重来看看common.inc.php,这个文件就是帮助我们上面触发漏洞的文件,后面两个什么*.classs.php应该是定义类和函数的,可以先不看。
common.inc.php第一开始先定义一些常量,然后定义一个函数_RunMagicQuotes,这个函数实际上就是魔术引号的作用。
再看下面45-58行,这看着感觉很像$$的变量覆盖漏洞,实际上这里时一个方便开发的机制,可以让我们的传参全部都变成变量使用,例如我传参a=123。
那么经过这个处理就变为了$a = 123

这里记住,我们可以定义变量了,我通过全局搜索查询了下,调用这个文件都是文件的开头为主,然后这个文件中被调用的参数大部分都会先初始化参数,然后处理再进行调用。

然后代码又包含了三个文件

三个文件做什么的看开发贴心的注释就知道了,要是变量覆盖这个在包含common.func.php下面就可以飞起了。这三个文件可以先不看,一个是常用函数,一个是各种配置变量定义,还有一个就是连接数据库的文件。之后就是设置了一些路径之类的变量
然后我们还是回来看index.php,整页就没什么有用的地方了。各种输出都是读取了数据库里面的数据然后输出。然后还包含了两个文件,header.php|footer.php。然后读取这几个PHP然后再去按照功能和模块去读取每个文件就行了。
那么根据我们的信息收集,我们知道了这款CMS,他以前爆过的SQL注入就是因为没用初始化变量SQL,然后直接想办法跳过这个变量SQL的赋值,然后造成直接传参SQL语句直接执行造成SQL注入,详情可以见乌云知识库找,这里就不方便贴链接了

那么我们根据这个思想去找漏洞就很简单,找没有初始化过的传参
 
开胃菜:
SQL注入一:
打开admin目录下面的info_update.php文件

我们发现第55行有一个变量id,这个地方如果我们能够控制变量id,那么我们可能就可以对这个CMS进行SQL注入,并且这个变量id都没有被单双引号包裹,那么如果存在注入,我们都不需要去考虑魔术引号带来的烦恼。
然后这个文件的第57-59行,就是没有初始化这个$id,而且$id的执行语句在初始化之前,算是被我捡到一只漏网之鱼了。

但是我这个info_update.php并没有初始化参数,那么我们就可以控制$id的值,那么我们就可以进行SQL注入了。我们再来追踪一下GetOne函数究竟干了什么?
看到include目录下面的mysqli.class.php文件的第262-294行

SetQuery函数是替换表名的前缀,然后Execute才是真的执行语句函数,然后们追踪这个函数,他的定义在mysql.class.php这个文件的第165-191行

很明显这的第191行是执行,但是这里很明显要过一个CheckSql的检测。
这个函数在这个文件的522行被定义。

[1] [2] [3] [4]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载