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

phpok 最新版(5.1) 审计

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

最近审了一下phpok,能力有限,目前找到的大部后台一些能利用的洞,涉及到的漏洞类型也挺多的,能getshell,在这里分享一些自己的拙见~
基本分析
官网下载最新的phpok 5.1版本:https://phpok.com
首先可以黑白盒结合的方式来分析路由解析规则:

跟目下有这么几个入口文件:

纵览整个目录,容易发现该程序是mvc的模式来编写的,至少有三个入口:
index.php,api.php,admin.php
所以,我们可以打开框架目录framework/来印证这个猜想:

这时候我们可以结合黑盒的方式看具体的解析到具体文件(控制器)以及具体的方法的过程,安装后网站后,随便点开个页面,观察参数变化:

再看看后台:

到这里其实差不多已经知道解析规则了,比如:
http://phpok/index.php?c=cart&f=checkout&id[]=2
入口:index.php
控制器:参数c=cart,对应着框架目录www模块,路径:framework/www/cart_control.php

方法:参数f=checkout,对应着checkout_f()方法

路由文件中会自动将f参数最后加入_f
反观,比如我们要调用framework/admin/freight_control.php的price_save_f()方法:

对应的url即:http://phpok/admin.php?c=freight&f=price_save
即在控制器中,只有以_f结尾的函数名可以直接调用
知道文件解析规则了,下面就可以从入口开始审,审全局过滤,审相关敏感函数进行回溯等等。
变量覆盖
从框架入口跟进后,发现framework/init.php 1611行存在parse_str变量覆盖

$query_string参数从framework/libs/server.php 94行传入:

比如访问:http://phpok/?data[script]=passer6y

如果想要利用的话最好是能覆盖全局变量,$_SESSION,$config这些,我在尝试覆盖$_SESSION的时候传入?_SESSION[script]=passer6y,经过动态调试后,发现会自动多加一个下划线,变成这样__SESSION[script]=passer6y。
后来也尝试了利用$_GET变量的一些特性在处理参数的时候,会将参数名中的空格、.、[替换成_,比如传入.SESSION[script]=passer6y会解析成_SESSION[script]=passer6y,但最终还是没有成功覆盖,师傅们有好的思路一起来交流交流~
后台任意文件读取
跟完框架入口核心文件之后,然后进框架目录的www模块,跟完了也没挖到一个洞,接着就开始审核心的libs库,看功能点来回溯,接着就找到了这么些后台洞:

当时在审框架里面的libs库里的file.php,看到cat命令眼前一亮

回溯到了:framework/admin/tpl_control.php

framework/admin/appsys_control.php

有两处均存在该问题:
exp1:
POST /admin.php?c=appsys&f=file_edit&id=fav&title=../../../../../../../etc/passwd HTTP/1.1
Host: phpok
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (X11; U; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3690.110 Safari/537.36

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

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