首页
社区
课程
招聘
[求助]网站登录问题
发表于: 2013-3-14 20:13 7356

[求助]网站登录问题

2013-3-14 20:13
7356
最近对网站自动登录感兴趣,拿5173下手,
登录网址:
https://passport.5173.com/?returnUrl=http%3a%2f%2fuser.5173.com%2fdefault.aspx
登录提交的POST数据如下:
"userName=hihihi123&password=bc3383ae9488e0291bc4deaf202f2f49&passpod=&captcha=&category=&__validationToken__=9261bcd5f5dc451098f9b8b68e6cfe0a&__validationDna__=".
要做自动登录就必须知道password和__validationToken__的来源,这两个很诡异,通过抓包,并未发现一样的文本.而且password是每次不一样.
用IE8+自带的开发人员工具调试脚本,如下:
1.查找到ajax POST的代码, 对提交前的代码进行分析,能找到password变量,但无法跟踪赋值这个变量的代码.这个能像OD一样对这个变量修改时进行下断点吗?
或者有没有什么调试技巧,还望指教?
2.__validationToken__ 这个变量更加没有思路,只发现在主页面的html代码中发现其是个隐藏的input

<script type="text/javascript">
	$(function() { 
		var submitting = false;
		var _tips = $("#loginTips");
		var errMsg = '';
		if(errMsg) {
			_tips.html(errMsg).show();
			$(".tips-ask").show();
		}
		if($.cookie("resultDescription")!=null) {
			_tips.html($.cookie("resultDescription")).show();
			$("#txtName").val($.cookie("userName"));
		    $.cookie("resultDescription", null);
		    $.cookie("userName", null);
			$(".tips-username").show();//显示忘记用户名
			$(".tips-ask").show();
		}
		if(!$.fost || !$.fost.security) {
			_tips.html("网速缓慢,请刷新页面").show();
			return;
		}
		var _form = $("#loginForm");
		var _submit = $("#btnSubmit");
		var _asp = $("#asp");
		var _agreement = $("#agreement");
		function showTips(msg, loginEnabled) {
			_tips.html(msg).show();
			if(loginEnabled) {
				_submit.attr("disabled", "");
				_asp.attr("class", "btnlink_b_small");
				$("#asp_text").html("登 录");
				$("#asp_ico").hide();
				submitting = false;
			}
		}
		
[COLOR="Red"]		/////每次刷新登录页面会进入到这里,但这个下断点后,不会进入某个函数,看上去是变量,
		/////但感觉应该是这里产生的password,而且每次stoken/ekey/vkey/pkey值不一样[/COLOR]
		var _securityObject = {
			passwordControlId: "txtPass",
			passwordHash: true, passwordFill: false,
			width:268,height:34,
			stoken: "4a14f096742e4015ad3d2507288ceeff",
            ekey: "emmh4u",
            vkey: "jccv6l",
            pkey: "570r0e",
[COLOR="red"]			onsubmit: function(tpm, password) { //////点击登录后,会断到这里,但此时password的值已经有了[/COLOR]
				if(submitting) {
					return false;
				}
				var _userName = $("#txtName");
				if(!_userName.val()) {
					_tips.html("请输入用户名").show();
					_userName.focus();
					return false;
				}
				$.cookie("userName",$("#txtName").val());
			[COLOR="red"]	var _password = $("#txtPass"); ////这个是密码框的ID,_password取到的就是输入的密码[/COLOR]
				if(!password) {
					_tips.html("请输入密码").show();
					_password.focus();
					return false;
				}
				if(!_agreement.attr("checked")) {
					_tips.html("很抱歉,请阅读并同意5173用户服务协议。").show();
					_agreement.focus();
					return false;
				}
				var _pospod = $("#pospod");
				if(!_pospod.is(":hidden")) {
					var _podPaw = $("#txtPodPaw");
					if(!_podPaw.val()) {
						_tips.html("请输入密宝").show();
						_podPaw.focus();
						return false;
					}
				}
				 var capchaResult = $.Capcha.validateCapchaClient();
                if (capchaResult!="") {
                    _tips.html(capchaResult).show();
                    return false;
					}
				_tips.html("").hide();
			[COLOR="red"]	_password.val(password); ////提交的时候,这个password是加密的,从何而来???[/COLOR]
				_submit.attr("disabled", "disabled");
				_asp.attr("class", "btnlink_g_small unhover c9");
				$("#asp_text").html("加载中");
				$("#asp_ico").show();
				submitting = true;
			[COLOR="red"]	$.ajax({ type: 'POST', url: _form.action, data: _form.serialize(), /////POST数据[/COLOR]
					success: function(data) {
						if(!data) {
							showTips("有未知错误发生(1)。", true);
							return;
						}
						if(data.charAt(0) == "{" && data.charAt(data.length-1) == "}") {
							eval("var result = " + data);
							if(result.ResultNo != 0) {							
								if(result.ResultData && result.ResultData.SecurityResultNo == -99 && _captcha.length == 0) {
									window.location.href = window.location.href;
									return;
								}
								$.cookie("resultDescription", result.ResultDescription);

								window.location.href = "?returnUrl=http%3a%2f%2fuser.5173.com%2fdefault.aspx";
                                if ($.Capcha.needCapcha) {
                                    $.Capcha.updateCapcha();
                                }
								$(".tips-ask").show();
								return;
							}
							showTips("有未知错误发生(2)。", true);
							return;
						}						
						$("#ajaxDisplayer").html(data).show();
					},
					timeout: 60000,
					error: function(xhr, status) {
						if (status == "timeout")
							showTips("服务器响应超时,请刷新页面重试。", true);
						else
							showTips("服务器内部错误,请重试。(" + status + ")", true);
					}
				});
				return false;
			}
		};
		$.fost.security.showBroker(_securityObject);
		_submit.attr("disabled", "");
		_asp.attr("class", "btnlink_b_small");
		_asp.click(function() {
			_submit.parents("form").submit();
		});
	});
	function MonitorLogin(monitorType) {
	    try {
			__utmTrackEvent(encodeURIComponent("用户登录"),encodeURIComponent("登录页"),encodeURIComponent(monitorType));
	    } catch (e) { }
	}
</script>

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 142
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
password估计是用js生成的,把那个js文件找出来,再把函数扣出来,直接调用js代码就可以了
validationToken既然在网页源码里,每次提交前下载一次源码,分离出来就是了
2013-3-14 23:54
0
雪    币:
活跃值: (28)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
关注结果~~
2013-3-15 09:44
0
雪    币: 297
活跃值: (265)
能力值: ( LV4,RANK:55 )
在线值:
发帖
回帖
粉丝
4
p=hex_md5(hex_md5(p).substr(8,16)+seed)
;return p

楼主我测试的时候亮瞎了

我随便输入一个账号
随便输入一个密码
结果就登录进去了
wocao....!!!
2013-3-15 10:29
0
雪    币: 126
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
楼上按照你的运气方法试了把,确实很运气,可以获得正确的加密后的password
还望高人再指点下,getPassword方法是什么时候注册的,如何对他下断点.

    var _securityObject = {
      passwordControlId: "txtPass",
      passwordHash: true, passwordFill: false,
      width:268,height:34,
      stoken: "4a14f096742e4015ad3d2507288ceeff",
            ekey: "emmh4u",
            vkey: "jccv6l",
            pkey: "570r0e",
[COLOR="Red"]      onsubmit: function(tpm, password) { //////点击登录后,会断到这里,但此时password的值已经有了[/COLOR]
        if(submitting) {
          return false;
        }
2013-3-15 15:35
0
雪    币: 54
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
__validationToken__ 这个变量更加没有思路,只发现在主页面的html代码中发现其是个隐藏的input

validationToken是用来防止请求伪造的,生成函数在服务端,提交时与服务端的的匹配,一致则通过,否则判断为非法请求。

而password加密则是https协议的要求,包括淘宝也是通过本地js加密,确保密码传输前已经加密,避免端口监听等共计
2013-3-18 16:04
0
雪    币: 126
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
恩 谢谢 各位
2013-3-20 15:59
0
游客
登录 | 注册 方可回帖
返回
//