本系列导航http://www.cnblogs.com/xuanhun/archive/2008/10/25/1319523.html
安全技术区http://space.cnblogs.com/group/group_detail.aspx?gid=100566
前言
(作者:玄魂)
接着上一篇的用户名枚举的话题接下来简单的探讨一下常见的密码探测。
园友Hunts.C昨天留言谈到了校内网,他说"就是个用户ID和邮箱,实际上这里的用户ID就是用户名的作用啊。 只不过它的登录是使用邮箱登录",其实校内网支持的登录方式为用户名登录和邮箱登陆两种方式,另外对每个用户都分配了唯一的ID。Hunts.C说的对,ID和用户名的作用是相同的,但是对于用户名枚举来说,ID是对用户名的隐藏,因为用ID是不能登陆的。
这一次要 说的内容比较少。
正文
12.1自动化密码探测
所谓自动化密码探测就是利用探测软件不断的向目标发出请求,根据响应来判断探测成功与否。
自动化探测一般有两种方式。 一是对同一用户名尝试不同的密码,二是对不同的用户尝试相同的密码。第二种方法更能有效的防止账户锁定。
对于用户名和密码生成有两种方式,一是使用既存的字典,二是程序根据使用者给定的用户名或密码组合规则不断生成。
对于自动化密码探测最大的障碍是验证码和人机区分测试(简单的问题)。
12.2社会工程学
"社会工程学"这个词我不知道是怎么产生的,一开始觉得叫行为心理学似乎更合适。后来才知道社会工程学其实就是间谍活动。
(1)推测法。根据相关信息,常见的如生日,姓名,电话号码,常用的数字组合(1213456等),字母组合,邮箱,父母的名字等等。
(2)欺骗。你可以根据他给你的QQ等信息,通过聊天逐步得到他的相关信息。
(3)利用客服。比如你可以冒充邮箱用户本人给客服打电话说密码丢失。以前听说QQ可以,前天园友告诉我yahoo的信箱也可以,真是不可思议。
(4)"社会工程"允许你以接近目标本人或他的家人,朋友的方式来获得你想要的信息,当然这个web攻击本身关系不紧密,但是却是黑客攻击的手段之一。
12.3 Post用户名,密码
目前也有很多现成的软件可供选择,用来破解web登录密码。关于工具的使用不是我们要讨论的重点,我们看一下它的工作原理。
下面是我登录校内网的时候一段POST数据(实际分析过程中应是全过程数据分析,这只是局部):
POST /Login.do HTTP/1.1
Host: login.xiaonei.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-cn,zh;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: gb2312,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://www.xiaonei.com/SysHome.do
Cookie: syshomeforreg=1; isnewreg=1; XNESSESSIONID=abc_7S1cRa2rw8aernG6r; ick=abc_7S1cRa2rw8aernG6rheifer.xiaonei.com; __utma=204579609.1392121359.1231048483.1231048483.1231048483.1; __utmb=204579609; __utmc=204579609; __utmz=204579609.1231048483.1.1.utmccn=(direct)|utmcsr=(direct)|utmcmd=(none); _de=8EAD38BFFD04FDBE; userid=201573034; univid=5426; gender=1; univyear=2005; hostid=201573034; BIGipServerpool_profile=3737916938.20480.0000; xn_app_histo_201573034=6-35-17954-4-8-16555-12012-3-2-13496-19; mop_uniq_ckid=123.189.16.137_1231047874_1991448146
Content-Type: application/x-www-form-urlencoded
Content-Length: 83
email=xuanhun&password=xuanhun521&origURL=http%3A%2F%2Fwww.xiaonei.com%2FSysHome.do
这是一个常规的Post请求数据段,最后的部分传送的是用户名和密码,这些数据在网络上传输的时候应该是被加密的,因为采用了https连接。暴力探测也就是不断的向目标服务器发送类似的请求,根据响应来判断是否成功。
12.4关于程序设计
具体的暴力破解程序的设计不是几句话就能说清楚的,希望有机会把具体的程序展示出来。
下面是一段自动登录的代码,展示了暴力破解的一个横断面。具体可参HttpWebRequest和HttpWebResponse的相关介绍。
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(targetURL);
request.Method = "POST"; //post
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = data.Length;
request.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; SV1; .NET CLR 2.0.1124)";
Stream newStream = request.GetRequestStream();
newStream.Write(data, 0, data.Length);
newStream.Close();
request.CookieContainer = cc;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
cc.Add(response.Cookies);
Stream stream = response.GetResponseStream();
string result = new StreamReader(stream, System.Text.Encoding.Default).ReadToEnd();
return result;
如果你理解了如何发送登录信息,那么再结合多线程和字典攻击就可以写出自己的web密码探测工具了。
当然我们没处理验证码的情形,如果它的验证码存储在cookie中或者隐藏字段中那是十分可笑的事情,我们可以直接用程序读取。验证码一般存储在服务器端,一般我们可以将随机生成的验证码的内容放入Session中,用户提交的时候将提交的内容与Session中的验证码进行比较判断。关于验证码的具体内容我想在后面的绕过验证一节中继续讨论。