2013-04-02 112 views
0

我发现一个奇怪的事情,当我编码一个网蜘蛛到一个特定的网站。网络服务器如何检测重播登录尝试?

我使用提琴手和铬(以及其他网络浏览器)登录一个网站(HTTP,不是https),并获取发送和接收的所有包(以及cookie):( first package '获取'请求登录页面和cookie,然后使用收到的cookie请求验证码和一些其他图片,然后用用户名,密码和验证码向服务器和服务器发送具有正确信息的登录请求)

然后我注销并清除所有缓存和Cookie,并使用Fiddler中继(模拟)整个过程(因为我知道我应该发送所有包的格式):请求登录页面获取cookie,使用该cookie请求所有图片(包括验证码图片),然后使用cookie和授权码r equest登录(用户名和密码正确)...但失败。

我敢肯定,失败不是由无效的userid或密码或auth代码引起的,我相信在前端没有什么特别的(html,脚本被选中),但它让我困惑很多可以服务器告诉我使用浏览器或不在后端 ..

我不是要求任何人解决具体问题。我只是想知道是否有人有我描述的类似问题?

具体的网站并不重要,我必须说整个练习是完全无害的!我没有做任何黑客攻击,相反它会帮助一些人。

============================================== ======== 我终于明白了原因:登录页面有一个隐藏的input(),我不小心忽略了它,因为它的值每次看起来都差不多。如果我们模拟了所有必要的HTTP请求包,Web服务器无法检测到重播的登录尝试。 谢谢各位〜

+0

您是否比较了通过浏览器登录时以及重新运行Fiddler中的步骤时得到的回复?什么导致你认为问题是网站检测到你没有使用浏览器? –

+1

判断客户端是否是浏览器的最常用(也相当愚蠢)的方法是评估User-Agent头 - 您是否发送了一个与您的Fiddler请求匹配的实际浏览器? – CBroe

+0

@Bartdude,谢谢你的回答。是的,我比较了浏览器的反应和重播提琴手的反应。除登录步骤以外的所有响应都是相同的。由于请求仅由html页面组成,所以jquery-1.3和query-base64编码(我已经检查过脚本没有改变)。和5个图片(一个是授权码,另外一个是页面元素)。我发现没有什么特别的前端(HTML,脚本),我重新运行所有的请求基于以前的格式与cookie我得到(cookie不会改变在以前的轨迹与浏览器的整个过程中)..所以我不知道该网站如何分辨 – Caunion

回答

1

服务器不能神奇地告诉他们是否与提琴手对话。

如果Fiddler和您的客户端发送完全相同的请求,这意味着相关服务器在其登录表单中使用“一次性令牌”(有时称为随机数)。如果服务器再次看到相同的标记,它会拒绝登录。有时,nonce不是直接发送,而是用于计算“质询 - 响应”,如NTLM等身份验证协议中所发生的那样。在其他情况下,随机数是CAPTCHA,这有助于防止您使用机器人自动登录到这样的网站。

除非您可以共享目标站点的更多详细信息(或登录过程的SAZ文件),否则人们不太可能帮助您。

+0

感谢您的详细解答和阐述!因为saz文件包含我朋友的私人信息(密码)。我可以在这里粘贴网站。它的http://bksjw.hust.edu.cn/这是一个学校的网站,学生可以看到他们的成绩和课程。再次,我的做法是无害的。我正在为斯图的一个应用程序来更快地检查他们的成绩和课程以及其他内容。 – Caunion

+0

本页的登录表单包含验证码;服务器可能将CAPTCHA的“答案”绑定到后端会话变量,这意味着将后续请求的原始答案重播将保证失败。 (CAPTCHA通常用于完全像这样的目的 - 防止僵尸使用网络表单)。 – EricLaw

+0

对不起,我迟到了,谢谢你的回答〜真的,我知道后端的会话绑定到验证码(我在原始描述中称为'验证码'),所以我在之前获得验证码新的cookie)并替换登录请求的数据(uid,psw,CAPTCHA)并发送给服务器,但是我失败了。这就是让我感到困惑的原因。我想我仍然有我做实验的.saz文件。如果您想提供帮助,我可以通过电子邮件发送给您(如果您不会太费心的话)。 – Caunion