admin 发表于 2016-8-5 07:51:00

批量替换消除论坛被注入广告,两种方法MYsq技术

老方法:DZ论坛贴子被大量植入广告批量执行SQL删除的办法
          1、首先打开服务器上\config\config_global.php这个文件
               查找:$_config['admincp']['runquery'] = 0; 把值改成1
         2、 然后进入论坛后台,在 站长——数据库——升级
UPDATE pre_forum_post SET message=REPLACE(message,'要删除的代码','替换后的内容或者直接留空删除');



新方法:非正则表达式方式

进后台常规管理,突然看到回收站里有几千贴.....几千贴,啥情况?赶快查下后台,原来是贴子被其中一名管理员编辑了,这种情况应该是使用简单密码被暴力穷举了,想起之前几天才让他改了密码来,估计怕自己忘掉使用了比较简单的密码,打电话告知事件后把他的密码改成稍复杂一些的。

      贴子怎么办呢?第一反应就是使用正则表达式来解决,通过查询,把正则表达式写出来了才发现原来update居然不支持正则表达式,没办法,再百度吧。工夫不负有心人啊,终于给我查到类似的语句,下面详细给大家说说步骤供大家参考:

第零步:用编辑贴子功能取出被注入样品,注意这三行都有三个变量

" www.138073.com SO娱乐城:真_人.足球.彩票齐全| 开户送10元.首存送58元.手机可投め注任何游戏顶级信用め提现即时到账SO.CC "
" www.138193.com SO娱乐城:真_人.足球.彩票齐全| 开户送10元.首存送58元.手机可投╳注任何游戏顶级信用╳提现即时到账SO.CC "
" www.138206.com SO娱乐城:真_人.足球.彩票齐全| 开户送10元.首存送58元.手机可投ケ注任何游戏顶级信用ケ提现即时到账SO.CC "


第一步:把前、中、后的确定字符串替换为易判断内容,中间变量留下,目的是减少字符好计算字符量。
使用 UPDATE pre_forum_post SET message=REPLACE(message,'要删除的代码','替换后的内容或者直接留空删除');
其中pre_forum_post是数据库的数据表名称,如果你的不是这个请改为自己的数据表

UPDATE pre_forum_post SET message=REPLACE(message,' www.','wycfl');
UPDATE pre_forum_post SET message=REPLACE(message,'.com SO娱乐城:真_人.足球.彩票齐全| 开户送10元.首存送58元.手机可投','wygcfl');
UPDATE pre_forum_post SET message=REPLACE(message,'提现即时到账SO.CC ','cwfczb');



前面用"wycfl",中间用"wygcfl",后面用"cwfczb",这三个是随意取的不容易重复的词,语句变成:


wycfl109&wygcfl&cwfczb
wycfl206ケwygcflケcwfczb
wycfl206ケwygcflケcwfczb
wycfl9153wygcfl3cwfczb
wycfl076┭wygcfl┭cwfczb



第二步:
如果可以支持正则表达式的话,可以这样写来表示更改过后的内容:"^wycfl{3}.wygcfl.cwfczb$"
可惜update貌似不能支持,只能取头取尾来判断字符了,注意前面个字符长度为5,所以有个“+5”的行为


update pre_forum_post set message = replace(message, substring(message, locate('wycfl', message),locate('cwfczb', message)-locate('wycfl'+5, message)),'') where locate('wycfl', message)>1;


至此,应该一切搞定!其实如果你能把字符数得很清楚的话,你根本不需要第一步,直接写第二步就可以了。
但实际上貌似还漏了一些,我也不知道为什么...只好再来一次:
update pre_forum_post set message = replace(message, substring(message, locate('任何游戏顶级信用', message),locate('cwfczb', message)-locate('任何游戏顶级信用'+8, message)),'') where locate('任何游戏顶级信用', message)>1;

影响了 60395 行。 ( 查询花费 29.9961 秒 )
还没弄完...晕,再来
update pre_forum_post set message = replace(message, substring(message, locate('gcfl', message),locate('cwfczb', message)-locate('gcfl'+7, message)),'') where locate('cwfczb', message)>1;

影响了 33379 行。 ( 查询花费 7.0126 秒 )
看了下,貌似这样差不多了,不知道后面两次是缓存没有清干净还是什么别的原因造成...
页: [1]
查看完整版本: 批量替换消除论坛被注入广告,两种方法MYsq技术