[渗透测试]Discuz UC_Key getshell碰到防篡改

Posted by

环境

Discuz7.2

Mysql数据库

Linux服务器

rysnc文件同步服务

过程

DZ7.2sql注入漏洞,顺利获得admin账号密码salt,解不开。转而去抓UC_Key,准备getshell

config.inc.php刚开始无写权限,后来有了。本来是意图写入wiki目录(根据dz历史被放后门事件)然后又碰到防篡改了,刚开始脑筋卡主了。没想到有个防篡改,一直以为没写成功。后来研究了uc_keygetshell代码,发现根本不需要执行两次,一次就已经写进去了。通过连续两次的请求可以做到php的代码执行,也可以通过system等命令函数将php一句话写到任意目录中。

途中发现rsync的空口令连接,尝试下载成功。后来拿到shell发现根本就是个备份文件目录,被坑了。尝试上传php文件失败,因为xxxxxxxxxxxxxxxxxxxxxxx(这是个坑)

防篡改大概5秒重置一次,所以使用while(1)无限写入也是可以维持权限的,算是一种思路吧。

学习

       DZ通过uc_keygetshell需要config.inc.php文件可写,一次即可,根本不需要两次(也许理解有错误,看到可以指出)。

       uc_keygetshell是有两个版本的,一个针对7.2及以下版本,一个是针对X版本的。问题原因都是因为正则提取uc_key字段内容时没有过滤单引号跟右括号导致闭合,导致文件写入。

       碰到防篡改可以使用while来无限写入一句话来维持shell,不过请求过多可能导致服务器封IP,或者使用首先写入system执行系统命令echo一个一句话到其他目录下,连续请求两次的办法,寻找未在防篡改配置下的目录。

顺便坑一个

         Linux系统下使用root系统账户启动mysql进程时,可以使用mysql写文件的方式写入计划任务cron目录下执行反弹得到一个root权限的bash是不现实的,触发条件特殊。

         这里有个特性是cron下必须是644的权限文件才是可以被计划执行的,而mysql写入的文件权限是666,根本不会执行。

         (坑)官方为了可提权使用了一个计划脚本,会定时将cron目录下文件权限改成644而让其执行。渗透环境中其实也是可以注意的一个点,就是比较坑。

附件列表

     

    Leave a Reply

    电子邮件地址不会被公开。 必填项已用*标注