SVN弱密码扫描(Python)
寂寞如雪的用脑过度,所以来写个博客分享一下。#虽然上一篇博客我还没写完
SVN的弱密码,看起来很复杂,但实际上很简单啊= =虽然不像pymssql/mymssql这种,Python提供了很好用的包,但如果了解其中的原理就很简单了~~
0x00 基本认知
首先要知道如下图所示的认证方式是什么认证:
这个涉及到HTTP认证方式,具体可以参考 http://blog.csdn.net/samlei/article/details/5485305
SVN用了最简单的Basic Auth。Basic Auth的利用非常广泛,比如Phpmyadmin的http认证方式,nodejs express框架里的basic-auth的插件等等。
0x10 判断当前请求是否需要认证
如果当前请求要求认证,在浏览器中,会弹出如上图所示的窗口,那如果在脚本中,如何判断?可以通过HTTP Response的头来验证:
import requests res = requests.get('https://test.com/myspace', verify=False) print res.headers
可以看到头部中包含了下面这个字段:
'www-authenticate': 'Basic realm=" Subversion"'
0x20 如何认证
针对basic-auth有两种方法:
1. 在HTTP头中添加Authorization
Authorization: "Basic 用户名和密码的base64加密字符串"
2. url中添加用户名和密码
http://user:password@test.com
0x30 python Requests中的认证模块
在写这篇博客,查资料的过程,发现了神器requests竟然包含了认证模块。#虽然0x20中提到的认证方式也很简单。
import requests from requests.auth import HTTPBasicAuth r = requests.get('https://httpbin.org/hidden-basic-auth/user/passwd', auth=HTTPBasicAuth('user', 'passwd')) # r = requests.get('https://httpbin.org/hidden-basic-auth/user/passwd', auth=('user', 'passwd')) # 简写 print(r.json())
0x40 最终代码
def svn_busrt(self, url, user, password): try: res = requests.get('https://'+user+':'+password+'@'+url, verify=False, timeout=30) except Exception, e: print Fore.RED + "Connection Error" self.count += 1 return if res.status_code == 200: print Fore.GREEN + "[+] Success! %s\t%s:%s" % (url, user, password) result_list.append([user, password])
test22222222222222