浅析网站被挂马的代码

前言:

        其实我网站中马应该可以追朔到去年的八月份,当时好像是在 xx 平台有用户给我留言说网站上的游戏进不去了 (五子棋多人联机)。于是我打开一看发现首页被静态化了,为了快速能访问就重新提交了入口文件也没继续理会。

        直到后来,隔一断时间就又有人留言说打不开,我才开始排查起因了。进入项目代码里,我发现有些文件被修改了。另一方面呢,网站的收录也在不断变少,甚至搜索出来的词和描述都变了,有赌博的,也有体育,迷彩之类的,我猜测应该是中马了。

        但是有一点想不通,这人是不是闲得无聊。网站上除了技术类文章,还有就是一些 H5 单机游戏,资源城和多人联机游戏由于没有其他收入支撑,到期后就关闭了。剩下的就是一些免费使用的小工具了,有必要在我网站上挂马吗,带着这个疑问就全都排查了一下代码,终于找到了两个文件能解释这个问题了。

文件一,篡改的入口文件:

       他是直接拿静态化的首页加了一些脚本放在了入口文件上,导致我导航栏的跳转全部失效,以下就是我截取的部分文件代码,再说明一下里面放了什么。

1. TDK 部分

        也就是标题,描述和关键词都改了,就是上面的模样经过 ascii 编码,可以通过脚本之家的工具 ascii 转中文查看。他改的大概都是一些体育,迷彩之类的词,这也就解释了为什么网站的搜索词都变了,因为没有跳转收录也就变少了。

2. JavaScript 部分

        Js 主要是下面那一长串数字,是 unicode 编码了。我一个数字一个数字转完之后,发现原来是一个 Js 脚本引入,最后 ducument.write 就是每次进入都引入脚本,脚本如下。

原来是给他的网站做引流,所以我也打开了他网站,就是下面这个。

文件二,PHP 大马:

        这个文件就是他们挂上去的,可能是之前通过留言表单的 bug 提交的,文件名 dama.php,网络上搜索应该就可以了解到,代码如下:

     \x62\x61\x73\x65\x36\x34\x5f\x64\x65\x63\x6f\x64\x65 像这个是十六进制,可以通过 JS 的 console.log 或 alert 显示出来,其实就是 base64_deocde 函数名,而 \nc\n3\nR\ny\nX\n3\nJ\nv\nd\nD\nE\nz\n 同样打印出来是如下一串换行的字母,所以就是 base64_decode () 那串,解码后是一个 str_rot13 () 函数

        所以那一串长长的就是被 ROT13 编码了,可以通过以下方式修改,还原出那一串是些什么东西,也可以把 dama.php 在本地项目里直接运行。

    运行后的样子如下,登陆密码就是他代码里的那个 $password, 其实大概猜的到是 Admin 经过 md5 的,登陆后如下。

        登陆后,就可以看到,自己网站就如同裸奔,他可以任意的提交,修改,删除文件,还可以对目录或文件提权,扫描,执行命令等等功能。最后通过我修改后,近几日网站没有再出现之前的问题了。以上文件仅作提示,所以关于如何修改和那个大马如何使用就不做介绍了。

学习交流:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ThreadLocal 是 Java 中的一个类,它提供了一种线程局部变量的机制。线程局部变量是指每个线程都有自己的变量副本,每个线程对该变量的访问都是独立的,互不影响。 ThreadLocal 主要用于解决多线程并发访问共享变量时的线程安全问题。在多线程环境下,如果多个线程共同访问同一个变量,可能会出现竞争条件,导致数据不一致或者出现线程安全问题。通过使用 ThreadLocal,可以为每个线程提供独立的副本,从而避免了线程安全问题。 ThreadLocal 的工作原理是,每个 Thread 对象内部都维护了一个 ThreadLocalMap 对象,ThreadLocalMap 是一个 key-value 结构,其中 key 是 ThreadLocal 对象,value 是该线程对应的变量副本。当访问 ThreadLocal 的 get() 方法时,会根据当前线程获取到对应的 ThreadLocalMap 对象,并从中查找到与 ThreadLocal 对象对应的值。如果当前线程尚未设置该 ThreadLocal 对象的值,则会通过 initialValue() 方法初始化一个值,并将其存入 ThreadLocalMap 中。当访问 ThreadLocal 的 set() 方法时,会将指定的值存入当前线程对应的 ThreadLocalMap 中。 需要注意的是,ThreadLocal 并不能解决共享资源的并发访问问题,它只是提供了一种线程内部的隔离机制。在使用 ThreadLocal 时,需要注意合理地使用,避免出现内存泄漏或者数据不一致的情况。另外,由于 ThreadLocal 使用了线程的 ThreadLocalMap,因此在使用完 ThreadLocal 后,需要手动调用 remove() 方法清理对应的变量副本,以防止内存泄漏。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值