mirror of https://github.com/fail2ban/fail2ban
pull/287/head
parent
5cfe108186
commit
0fb04cb2f0
@ -0,0 +1,99 @@
|
|||||||
|
#!/bin/env python
|
||||||
|
import requests
|
||||||
|
import md5
|
||||||
|
|
||||||
|
|
||||||
|
def auth(v):
|
||||||
|
|
||||||
|
ha1 = md5.new(username + ':' + realm + ':' + password).hexdigest()
|
||||||
|
ha2 = md5.new("GET:" + url).hexdigest()
|
||||||
|
|
||||||
|
#response = md5.new(ha1 + ':' + v['nonce'][1:-1] + ':' + v['nc'] + ':' + v['cnonce'][1:-1]
|
||||||
|
# + ':' + v['qop'][1:-1] + ':' + ha2).hexdigest()
|
||||||
|
|
||||||
|
nonce = v['nonce'][1:-1]
|
||||||
|
nc=v.get('nc') or ''
|
||||||
|
cnonce = v.get('cnonce') or ''
|
||||||
|
qop = v['qop'][1:-1]
|
||||||
|
algorithm = v['algorithm']
|
||||||
|
response = md5.new(ha1 + ':' + nonce + ':' + nc + ':' + cnonce + ':' + qop + ':' + ha2).hexdigest()
|
||||||
|
|
||||||
|
p = requests.Request('GET', host + url).prepare()
|
||||||
|
#p.headers['Authentication-Info'] = response
|
||||||
|
p.headers['Authorization'] = """
|
||||||
|
Digest username="%s",
|
||||||
|
algorithm="%s",
|
||||||
|
realm="%s",
|
||||||
|
uri="%s",
|
||||||
|
nonce="%s",
|
||||||
|
cnonce="",
|
||||||
|
nc="",
|
||||||
|
qop=%s,
|
||||||
|
response="%s"
|
||||||
|
""" % ( username, algorithm, realm, url, nonce, qop, response )
|
||||||
|
|
||||||
|
s = requests.Session()
|
||||||
|
return s.send(p)
|
||||||
|
|
||||||
|
def preauth():
|
||||||
|
r = requests.get(host + url)
|
||||||
|
r.headers['www-authenticate'].split(', ')
|
||||||
|
return dict([ a.split('=',1) for a in r.headers['www-authenticate'].split(', ') ])
|
||||||
|
|
||||||
|
|
||||||
|
url='/digest/'
|
||||||
|
host = 'http://localhost:801'
|
||||||
|
|
||||||
|
v = preauth()
|
||||||
|
|
||||||
|
#print v
|
||||||
|
username="username"
|
||||||
|
password = "password"
|
||||||
|
|
||||||
|
realm = 'so far away'
|
||||||
|
r = auth(v)
|
||||||
|
|
||||||
|
realm = v['Digest realm'][1:-1]
|
||||||
|
|
||||||
|
# [Sun Jul 28 21:27:56.549667 2013] [auth_digest:error] [pid 24835:tid 139895297222400] [client 127.0.0.1:57052] AH01788: realm mismatch - got `so far away' but expected `digest private area'
|
||||||
|
|
||||||
|
|
||||||
|
algorithm = v['algorithm']
|
||||||
|
v['algorithm'] = 'super funky chicken'
|
||||||
|
r = auth(v)
|
||||||
|
|
||||||
|
# [Sun Jul 28 21:41:20 2013] [error] [client 127.0.0.1] Digest: unknown algorithm `super funky chicken' received: /digest/
|
||||||
|
|
||||||
|
print r.status_code,r.headers, r.text
|
||||||
|
v['algorithm'] = algorithm
|
||||||
|
|
||||||
|
|
||||||
|
r = auth(v)
|
||||||
|
print r.status_code,r.headers, r.text
|
||||||
|
|
||||||
|
nonce = v['nonce']
|
||||||
|
v['nonce']=v['nonce'][5:-5]
|
||||||
|
|
||||||
|
r = auth(v)
|
||||||
|
print r.status_code,r.headers, r.text
|
||||||
|
|
||||||
|
# [Sun Jul 28 21:05:31.178340 2013] [auth_digest:error] [pid 24224:tid 139895539455744] [client 127.0.0.1:56906] AH01793: invalid qop `auth' received: /digest/qop_none/
|
||||||
|
|
||||||
|
|
||||||
|
v['nonce']=nonce[0:11] + 'ZZZ' + nonce[14:]
|
||||||
|
|
||||||
|
r = auth(v)
|
||||||
|
print r.status_code,r.headers, r.text
|
||||||
|
|
||||||
|
#[Sun Jul 28 21:18:11.769228 2013] [auth_digest:error] [pid 24752:tid 139895505884928] [client 127.0.0.1:56964] AH01776: invalid nonce b9YAiJDiBAZZZ1b1abe02d20063ea3b16b544ea1b0d981c1bafe received - hash is not d42d824dee7aaf50c3ba0a7c6290bd453e3dd35b
|
||||||
|
|
||||||
|
|
||||||
|
url='/digest_time/'
|
||||||
|
v=preauth()
|
||||||
|
|
||||||
|
import time
|
||||||
|
time.sleep(1)
|
||||||
|
|
||||||
|
r = auth(v)
|
||||||
|
print r.status_code,r.headers, r.text
|
||||||
|
|
@ -0,0 +1,7 @@
|
|||||||
|
AuthType Digest
|
||||||
|
AuthName "digest private area"
|
||||||
|
AuthDigestDomain /digest_time/
|
||||||
|
AuthBasicProvider file
|
||||||
|
AuthUserFile /var/www/html/digest_time/.htpasswd
|
||||||
|
AuthDigestNonceLifetime 1
|
||||||
|
Require valid-user
|
Binary file not shown.
@ -0,0 +1 @@
|
|||||||
|
username:digest private area:fad48d3a7c63f61b5b3567a4105bbb04
|
Loading…
Reference in new issue