0x01 前言
0x02 WEBSHELL获取的尝试
1.登录后台
data/backup
目录下找到数据库的备份,从中找到了用户表ims_users
。password
,在forget.ctrl.php中找到了一处。$password = md5($password . $member_info['salt'] . $_W['config']['setting']['authkey']);
。是根据原密码+salt+authkey
的形式进行拼接,然后进行md5加密。data/config.php
文件中。salt
和authkey
拼接为新的salt
,然后使用md5($pass.$salt)
的加密方式进行解密。2.失败的获取shell过程
pppppp
。
|
"*.php "
文件了。但是有限制,适用于apache下,而且版本有限制。目标站不使用该方法的原因有二,一是该系统上传的位置是腾讯云COS上,二是server是Tengine。
set global general_log = on; #开启general log模式 set global general_log_file = ‘/var/www/html/1.php’; #设置日志目录为shell地址 select ‘<?php eval($_POST[cmd]);?>’ #写入shell |
0x03 代码审计
1.分析
web/source/cloud/dock.ctrl.php
,找到执行的download
方法。$data
就是请求包的内容。然后对$data
进行发序列化返回$ret
,接下来获取$ret['file']
并Base64解密返回$file
。当存在gzcompress
和gzuncompress
这两个函数时,就会利用gzuncompress
函数对$file
进行解压操作。$file
进行md5加密后,与$ret['path']
以及获取的$_W['setting']['site']['token']
进行拼接为$string
。当满足$_W['setting']['site']['token']
非空并且$string
md5加密后的结果与$ret['sign']
一致时,才可以进行下面的操作。下面就是文件的写入了,根据$ret['path']
进行判断,然后写入的位置不一样。$_W['setting']['site']['token']
这个值的获取。这个是利用authcode函数对cache_load(cache_system_key('cloud_transtoken'))
进行解密获取的。authcode
函数位于framework/function/global.func.php
文件中。authcode
加解密,需要知道$GLOBALS['_W']['config']['setting']['authkey']
,在上面提到过,authkey在data/config.php
文件中。cache_system_key('cloud_transtoken')
的内容了。2.cloud_transtoken的获取
framework/model/cloud.mod.php
中的cloud_build_transtoken
函数中被写入的,通过进入cache_write
方法,发现会写入数据库中。cloud_transtoken
。结果并没有找到,可能原因是没有写入cloud_transtoken
的时候就进行了数据库备份。cloud_build_transtoken
。cloud_site_info()
函数获取站点信息。函数cloud_site_info()
调用了cloud_api('site/info')
,这里的method为site/info
,所以继续调用cloud_build_transtoken
从会而将cloud_transtoken
的内容写入数据库。然后通过数据库备份的功能,就可以看到数据库中保存的cloud_transtoken
,进而可以利用之前的分析写shell。3.自定义数据库备份
cloud_transtoken
,但是数据库目录和文件的名字是随机的。 cloud_transtoken
也无法利用,我们需要最新的备份文件。web/source/system/database.ctrl.php
。volume-10位随机字符串-1.sql
的形式,既然可以自定义,那么就简单多了。cloud_transtoken
了。接下来就可以进行shell的获取了。4.获取WEBSHELL
cloud_transtoken
、authkey
已经知道了,接下来就是构造payload了。5.延伸
/data/config.php
中的authkey
。如果没有文件备份,登录了一个管理员权限的用户,能否获取shell呢。答案也是可以的。data/.
,特征函数为password
。然后就可以看到查杀结果,获取authkey
的值。0x04 总结
cloud_transtoken
到数据库中。cloud_transtoken
。转自:乌云安全