• [软件研究]对AMH面板的研究


     0x00 前言

    继续研究,这次来看一下AMH面板,图截自官网

     就让我们来看看这个多个"首个"的面板做的怎么样吧。

    0x01 安装

    官方提供了两种安装方式,一是极速安装,二是编译安装。

    所为极速安装,应该就是直接拉RPM包,编译好的安装了,编译安装就字面意思了,不解释。

    这里先选用极速安装,时间也跟官方说的差不多,1分来钟就安装好了。

    安装完之后,提示了我们默认的账号密码,管理界面端口等信息。

    其中8888端口为普通http,9999端口为https,其实是一个东西。

    注意到url后缀为php。

    0x02 研究&&分析

    先看看安装脚本amh.sh,里面到底写了什么东西:

    先定义了一些变量,可以看到极速安装默认安装的nginx为nginx-generic-1.12版本,mysql为5.5,而php就比较老了为php5.3版本。

    然后就是几个函数

    看了一下,大概意思就是这样了。

    后面的代码就是顺序执行并打印出结果了

    从安全方面来说,这里有几个思考点:

    1,默认密码是否可以猜测呢?

    2,源码可以获取,代码审计会不会发先一些问题呢?

    先来验证第一个问题。

    看到SetPassowrd函数,函数名很明显是和密码相关

    可以看到默认密码生成的方法:ip地址_随机数_当前时间 | md5sum 之后再取12位作为密码,已经是很难猜测得了了。

    那么接下来我们就获取源码审计一发。

    获取源码,分析后端源码,获取源码步骤:

    lsof -i:8888

    查看8888端口是谁开的。

    找nginx所在位置

    ps -aux | grep nginx

    到nginx的目录看nginx的配置文件

    可以发现包含了amh的vhosts,查看amh的配置文件最终找到amh的源码所在

    打包到本地分析

     这里先停一下,转过头来看看web界面,登录进到主页,发现无论点啥都提示要绑定授权账户

    好不容易注册了个账号,发现最少也要6块钱一个月。

    不贵,但是这个服务器是腾讯云实验室的,就开了几个小时,待会就到期了。

    况且我有源码了,就不折腾了。

    0x03 源代码审计

     拿到源码,先看目录

    标准的mvc目录,index.php 为入口。

    定义了一堆的常量,加载了Amysql目录下的Config.php 和Amysql.php,然后开启网站进程

    其中Amysql.php 定义了控制器,模型,视图模板等基类,

     而Config.php就是一些配置变量:

    可以看到默认是对$_GET,$_POST,$_COOKIE,$_FILES变量进行addslashes过滤。(代码位于Amysql.php中AmysqlProcess类的ProcessStart方法),开了XSS防护,不开启任何报错的。

    且每一次向后端的请求都必须要带token,防止了csrf攻击

    明确我们的目的:找到无需访问验证进入后台的漏洞。

    1,验证存在缺陷,可以直接访问一些API。

    2,前台存在缺陷,可以让我们间接获取到后台权限。比如一个存储型的xss,一个前台登录的sql注入等等。

    3,是否存在后门性质文件。

     想法1验证:

    发现程序使用了Function类的CheckLogin来判断用户是否登录:

    一一比对所有controller,发现能加的都加了Function::CheckLogin进行验证判断。

    想法2验证:

    找遍了所有不用登录的方法,就几个:

    index controller:

    1,login()

    2,module_list()

    3,index_csrf()

    4,index_forbidden()

    5,logout()
     
    verify_code controller
    1,IndexAction()

    一一查看了所有方法皆没有发现可利用的点。

    想法3验证:

    查遍所有文件皆没有发现可疑的后门文件。

    既然没办法直接获取后台权限,那么我们看看登录进后台后有哪些漏洞吧:

    1,index.php中的一个延时注入

    看到箭头所指之处,首先是love参数,是做了截断的,我们有很大的几率可以利用,再来是$_SERVER变量,是没有受到addslashes的影响,我们是可以引入单引号的。

    跟进add_love方法,在indexs模型中。

    首先是利用截断,这种方法需要我们可控两个地方,第一个查询是没有办法的,但是第二个插入是可以尝试的,但是这里是存在问题的,具体查看$url是怎么获取的。

    使用了parse_url进行解析,获取path和query字段,并拼接在一起,这里我们可以使query字段有值,但是依旧会引入我们没法控制的问号。

    所以找个方法的注入会失败。

    我们使用方法2,不用前面的截断,直接用后面的$url变量,加入单引号,因为没有开启报错,很大程度只能使用延时了,而且在后台压根就没啥屌用。

    简单证明一下:

    成功插入我们想要的字符

     还有其他一些问题,不看了。

    0x04 总结

    嗯,对AMH面板应该就看到这了。

    前台确实难挖,后台看了也没啥用。

    抛砖引玉吧。

  • 相关阅读:
    学习如何看懂SQL Server执行计划(一)——数据查询篇
    【异常】warning: refname 'feature1.3.0' is ambiguous.导致git merge失败
    Mac上使用sunlogin向日葵软件远程控制电脑
    软件随想录-
    idea启动卡死,项目界面一直processing
    【异常】hbase启动后hdfs文件权限目录不一致,导致Phoenix无法删除表结构
    【异常】ssh无法登录验证,非root用户ssh本机无法成功
    【异常】postman能够请求成功获取到参数,前端请求的却请求不到
    CentOS7磁盘空间不足,却找不到占用空间的大文件
    【异常】553 Mail from must equal authorized user
  • 原文地址:https://www.cnblogs.com/r00tuser/p/9946015.html
Copyright © 2020-2023  润新知