我这快一年没打理的wordpress个人小站竟然被黑了。访问时主页样式明显不对,打开主页后5秒左右网站被重定向到top.worldctraffic.com等俄文网站。通过查看阿里云的日志警告我发现有Hacker利用我放在网站根目录下的adminer.php做了SQL注入(这应该是adminer.php的一个漏洞),抓取到了wordpress网站的wp_config.php文件,进而获得了db的用户名和密码。再通过adminer.php对网站db进行了篡改。(此时只想问候这个Hacker的族谱。)
通过分析,我确定了入侵者的具体行为并找到了修复网站的办法。
入侵者的具体行为是:
这两个js脚本会将网站重定向到top.worldctraffic.com、1.startrafficc.com等俄文网站页面。
【修复方案】编写python程序将黑客插入的重定向字符串删除,代码如下:
#!/usr/bin/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&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
/** prevent html in post from executing*/
define('DISALLOW_UNFILTERED_HTML', true);
重启nginx生效。
最后,别忘记修改db密码,删除adminer.php,断绝黑客再次入侵的途径。