当前位置:首页 >> 网络通讯 >> 网络安全 >> 内容

关于登录防嗅探

时间:2013/4/19 12:09:00 作者:平凡之路 来源:xuhantao.com 浏览:

关于登录防嗅探(之前的想法代码实现)
 
Matt  
之前听xsser提的绑定验证码 实现了一下,觉得挺可行的。。
 
不会js,代码没技术含量,勿喷。。
 
打包下载。。
 

 
login.html
 
<!--STATUS OK-->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<script type="text/javascript" src="md5.js"></script>
<script>
 
function login()
{
var u = document.getElementById("username").value;
var p = document.getElementById("password").value;
var k = document.getElementById("key").value;
var pass=hex_md5(p);
pass=hex_md5(pass+k);
window.open("login.php?u="+u+"&p="+pass)
}
</script>
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>登录</title>
 </head>
<body>
username:
<input id="username" name="username" type="text" /> <br>
password:
<input id="password" name="oassword" type="text" />  <br>
key:
<input id="key" name="key" type="text" />
<img src=key.php?action=verifycode> <br>
<button type="button" onclick="login()">Apply</button><br>
</form>
</body>
</html>login.php
 
<?php
include('key.php');
login_check();
$u=$_GET['u'];
$p=$_GET['p'];
if($u=='matt')
{
 
  $pass=md5('matt123');
  $key=$_SESSION['login_check_num'];
  if($p==md5($pass.$key))
  {
 
    echo "login ok";
    $keys=$_SERVER[HTTP_USER_AGENT].$_SERVER[REMOTE_ADDR];
    $_SESSION['login_check_num']="";
    $_SESSION["login"]=md5($keys);
    exit();
  }
  else
  {
    echo "login error";
    exit();
  }
}
 
?>key.php
 
<?php
session_start();
error_reporting(0);
function login_check()
{
    if($_SESSION[login]==md5($_SERVER[HTTP_USER_AGENT].$_SERVER[REMOTE_ADDR]) and $_SESSION['login_check_num']=="" )
     {
        $_SESSION['login_check_num']="";
        echo "you is login..";
        exit();
    }
}
//调用此页面,如果下面的式子成立,则生成验证码图片
if($_GET["action"]=="verifycode")
{
    rand_create();
}
//验证码图片生成
function rand_create()
{
    //通知浏览器将要输出PNG图片
    Header("Content-type: image/PNG");
    //准备好随机数发生器种子  
    srand((double)microtime()*1000000);
    //准备图片的相关参数  
    $im = imagecreate(62,20);
    $black = ImageColorAllocate($im, 0,0,0);  //RGB黑色标识符
    $white = ImageColorAllocate($im, 255,255,255); //RGB白色标识符
    $gray = ImageColorAllocate($im, 200,200,200); //RGB灰色标识符
    //开始作图    
    imagefill($im,0,0,$gray);
    while(($randval=rand()%100000)<10000);{
        $_SESSION["login_check_num"] = $randval;
        //将四位整数验证码绘入图片  
        imagestring($im, 5, 10, 3, $randval, $black);
    }
    //加入干扰象素    
    for($i=0;$i<200;$i++){
        $randcolor = ImageColorallocate($im,rand(0,255),rand(0,255),rand(0,255));
         imagesetpixel($im, rand()%70 , rand()%30 , $randcolor);
    }
    //输出验证图片
    ImagePNG($im);
    //销毁图像标识符
    ImageDestroy($im);
}
 
?>
--------------------------------------------------------------------------------
 
kEvin1986  
sniff情况下, 知道了hash也知道了key...然后呢? c<->m<->s 我充当m, 不管哪一块我都是先手....
 
我觉得这还是个问题
 
另外: echo "you is login.."; .........啊?
 
 
 
蟋蟀哥哥(<-帅得一塌糊涂)  
登陆js加密,你可以参考Oschina.Net
 
使用了客户端JS加密和SSL
 
 
 
kEvin1986 (rm -rf / is what im diser) | 2012-06-29 21:53
 
呃.再看的时候貌似我自己胡乱脑补了...防嗅探还是可以. 劫持就没招了
 
 
 
Matt | 2012-06-29 22:25
 
@kEvin1986 劫持确实没招啊 就像之前那个脚本 ,吧Https都改成http了 没办法的。。只能勉强防嗅探^_^
 
 
 
Matt | 2012-06-29 23:10
 
@kEvin1986 echo you is login只是用来判断是否登录了 验证了ip和AGENT,防止重放。。
 
 
 
beastk | 2012-06-30 01:29
 
试试flash呢,上次看到naver用这个了
 
 
 
kEvin1986 (rm -rf / is what im diser) | 2012-06-30 01:59
 
@Matt .... I am, You are, (S)He/it is....容许我吐槽下语法哈...... - -
 
 
 
核攻击(统治全球,奴役全人类!毁灭任何胆敢阻拦的有机生物!) | 2012-06-30 08:53
 
用简单的“挑战、响应”模式就可以反嗅探了。
 
要好一点的话,可以将发送的信息用随机密匙再加密一下。
 
 
 
核攻击(统治全球,奴役全人类!毁灭任何胆敢阻拦的有机生物!) | 2012-06-30 09:02
 
假定A服务器要认证B的身份:
 
1)B向A说“我是B,请认证我!”
 
2)A随机产生一个字串,返回给B
 
3)B用自己的密钥加密收到的字串,然后再传送给A
 
4)A用本地保存的B的密钥加密刚刚产生的随机字串,并通B传送过来的比较,如果相同,则证明了B的身份
 
征询-应答(Challenge-response):要求对于不可预测的征询计算出正确的应答的认证过程。
 
由于此种认证方式不在网络中传送口令,所以可以防止口令截获和数据包重演等冒充攻击形式。
 
特性:不在网络中传递原始密匙,每次产生的密匙都是一次性的。
 
效果:反嗅探,反重放,无法获取原始密匙
 
 
 
核攻击(统治全球,奴役全人类!毁灭任何胆敢阻拦的有机生物!) | 2012-06-30 09:07
 
哈哈哈,对了,再给大家看一段Nuclear-Blog v6.0 后台登陆验证方式。
 
首先,涛涛电脑知识网,登录模式是基于“挑战、响应”模式,然后又很变态的给升级了一下。
 
贴一小段代码……
 
<script type="text/javascript" src="js/md5.js"></script>
<script language="javascript">
    function SubmitForm() {
        var username = document.getElementById("verrgfxesigepgdx").value;
        var password = document.getElementById("ssqftwligjkczecb").value;
        for (i=1; i<=2012; i++) {
             username = hex_md5(username + i);
             password = hex_md5(password + i);
        }
        document.getElementById("verrgfxesigepgdx").value = hex_md5(username + "gjeuuipyjavvmtqm");
        document.getElementById("ssqftwligjkczecb").value = hex_md5(password + "gjeuuipyjavvmtqm");
        document.form1.submit();
    }
</script>表单的名字和密匙每次都是随机产生,长度不小于15字节的随机字符串……
 
 
 
Matt | 2012-06-30 10:30
 
@核攻击 挑战相应不行的吧,如果你服务端发送客户端一个key 然后客户端加密后返回 然后服务端验证,,但是这里在客户端有加密啊。。客户端只能通过js之类的加密(暂且不说浏览器插件) 这样攻击者很容易看到加密方式。。so.
 
 
 
核攻击(统治全球,奴役全人类!毁灭任何胆敢阻拦的有机生物!) | 2012-06-30 11:40
 
@Matt
 
这是个无意义问题,看到算法有怎样?
 
md5、sha1 算法都是公开的,没有原密匙,你能绕过吗?
 
和加密算法没有直接关系……
 
 
 
px1624 | 2012-06-30 13:40
 
document.getElementById("x") 这种果断还是先定义一下函数吧
 
 
 
Anthr@X | 2012-06-30 14:10
 
@核攻击 这个方式和发送带salt的hash是一样的,challenge就是发个客户端的明文salt,客户端计算密码和salt的hash后发个客户端,在被嗅探的情况下如果密码比较弱的话还是可以离线暴力破出来的。
 
在被中间人攻击的情况下,中间人可以完全替换你的加密js,涛涛电脑知识网,改成明文发送然后发给对方……
 
 
 
Matt | 2012-06-30 15:25
 
@核攻击 那这个挑战响应有意义么。。随便弄个软件不都能回复的么。。
 
 
 
核攻击(统治全球,奴役全人类!毁灭任何胆敢阻拦的有机生物!) | 2012-06-30 16:13
 
既然都扯到中间人篡改数据包了,那么任何Http 原生的数据提交方案都无效。
 
 
 
_Evil (性趣是最好的老师.) | 2012-07-01 20:39
 
@Matt @核攻击 这个脚本是ok的。 如果说到猜解的话,那么php的api接口破解就是个典型例子了。。。80vul有个pdf 和本文相比,能逆向出key神马都是浮云。。
 
 
 
摘自:

相关文章
  • 没有相关文章
  • 徐汉涛(www.xuhantao.com) © 2024 版权所有 All Rights Reserved.
  • 部分内容来自网络,如有侵权请联系站长尽快处理 站长QQ:965898558(广告及站内业务受理) 网站备案号:蒙ICP备15000590号-1