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])

 

posted @ 2015-07-27 16:53  阔爱的贝贝  阅读(1050)  评论(0编辑  收藏  举报