前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >记一次代码审计的APP渗透

记一次代码审计的APP渗透

作者头像
HACK学习
发布2021-04-26 13:05:14
2.1K0
发布2021-04-26 13:05:14
举报
文章被收录于专栏:HACK学习HACK学习

好久没更新了,刚好遇到,就记录一下吧

注:本文的测试经过授权

0x01 信息收集

第一步肯定先抓包找到域名,访问一下。

上面这个图是我本地的,远程的访问比较慢就不截图了。没有做UA头检测等,它本身就是移动端和PC端都可以访问的一种cms。

看到开放的端口,21尝试爆破和匿名登陆都没有成功。而8888以为是sun-answerbook,其实是BT。

因为服务器性能的原因以及还有其他人同时在看,因此没有进行大规模的扫描探测。后面小线程扫描发现了源代码,后面再说。

0x02 黑盒测试

上传点,经过测试白名单验证,没办法利用。总计有六七个上传点吧,有的是直接不作为文件上传,反正都没什么进展。

有个视频导入功能,测试了一下,也没什么用。

21爆破不成,3389爆破也不成,所以下面直接来审代码看能不能有突破。

0x03 白盒审计

0x3.1 本地环境搭建

emmm,是真的麻烦,我第一次碰到这么难搭的cms。是个收费的cms,源码来看应该是破解版,需要输入购买码等,安装完以后需要配置nginx伪静态规则。

那具体的路由和伪静态规则我这里就不多说了,看看代码加上熟悉一下网站基本就能心里有数。

0x3.2 越权访问后台

代码语言:javascript
复制
/admin-panel/autoload.php

后台是通过autoload.php来进行模块加载,呈现给用户,但是这里只是可以看,具体的后端操作还是在另外的php中。可以看到这里并没有进行身份验证,因此存在越权。

会存在上图这种情况,发现并没有引进常用函数文件,估计是通过其他文件来引用。

后面看到/ajax.php(ajax目录存放的就是后台的后端php)

因此payload如下:

代码语言:javascript
复制
http://www.my.com/ajax.php?type=../admin-panel/autoload&page=manage-users

可以通过它,它确实引入了函数文件,但是需要绕过:

简单来说就是不能让$is_error为1,那么就要GET传入hash并且通过CheckMainSession的检查并返回true(上面的print_r()是我调试自己加上的)

Secure()就是用来过滤的,做字符串安全性检查。跟进CheckMainSession()发现,要想返回true就需要我们传入的hash_id和_SESSION[‘main_hash_id’]是一样的。所以看想办法能不能绕过。

跟进/assets/includes/function_gernel.php

这个main_hash_id生成规则比较简单,1111-9999随机数的sha1哈希值,一开始想用py写个爆破的,但是发现Python请求的main_hash_id和浏览器不一样,那直接burpsuite跑一下就行了。

response打印了这个hash是因为我本地环境,调试时留下的。

后面发现不用爆破也可以,网站会隔段时间就请求notifications,会有hash:

那我们最终payload就是:

代码语言:javascript
复制
http://www.my.com/ajax.php?hash=90d6ff0d935b83169155f13651052247da58e416&type=../admin-panel/autoload&page=manage-users

但是只能看到当前设置,因为后端php其实都是做了身份验证的。首先上图可以看到所有用户名的密码,其次有ftp设置,访问s3模板可以看到(如果管理员在网站配置了ftp)。

0x3.3 安装未验证重装

代码语言:javascript
复制
/install/index.php

并没有验证是否安装。并且就算是我们传入的sql相关信息连接不上数据库,仍然会更新config.php,因此这里有两种利用思路。

第一种,本地服务器mysql开启外连,重新安装cms获得后台账号密码。

第二种,就算不开启本地也可以随便填sql,然后闭合字符串getshell。大概看了一下,url参数有过滤器检测是否是url,但是purcharse_code因为是破解版可以随便填。本地效果:

本地能成,那去目标试一下,访问/install确实可以,但是点击next没有反应,因此效仿本地访问:

代码语言:javascript
复制
http://www.my.com/install/?page=installation

闭合字符串不用我多说了吧,直接getshell。

0x3.3 绕过补丁再次RCE

服务器做了修补,判断了$ServerErrors[]不为空则不会写入。那我们需要满足一下条件:连接上数据库,url符合、规则(check_()是总返回success的)。

要么拿到远程的数据库账号密码要么本地开外链。

如上可getshell。

发现了原本config.php的备份,给他再恢复过去就可以了。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-04-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 HACK学习呀 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x01 信息收集
  • 0x02 黑盒测试
  • 0x03 白盒审计
    • 0x3.1 本地环境搭建
      • 0x3.2 越权访问后台
        • 0x3.3 安装未验证重装
          • 0x3.3 绕过补丁再次RCE
          相关产品与服务
          数据库
          云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档