在滲透測試過程中,我們經常收集到很多使用者的歷史密碼,部分使用者的密碼習慣是使用若干個相同的字元加上一些其他的字元,比如:
user01_history0:passw0rd0
user01_history1:password1
user01_history2:password2
user01_history3:passw0rd3
user02_history0:00p@ssw0rd
user02_history1:01p@ssw0rd
user02_history2:02p@ssw0rd
user02_history3:03p@ssw0rd
user02_history4:04p@ssw0rd
```python
def common_string(password1, password2):
# 動態規劃演算法,計算2個密碼的最大相同長度
x = len(password1)
y = len(password2)
longest_common = 0
result =
# 使用字典作為矩陣
lcs_matrix = {}
# 演算法複雜度o(n*m)
for i in range(x):
for j in range(y):
# 處理字元相同情況
if password1[i] == password2[j]:
if i == 0 or j == 0:
lcs_matrix[i,j] = 1
# lcs_matrix[i,j]的值等於矩陣座標 i,j 左上角的值加1
# 0 | 0 0 | 0
# 0 | 0 0 | 1
else:
lcs_matrix[i,j] = lcs_matrix[i - 1,j - 1] + 1
# 提取相同的字元
if lcs_matrix[i,j] > longest_common:
longest_common = lcs_matrix[i,j]
result = [password1[i - lcs_matrix[i,j] + 1:i + 1]]
elif lcs_matrix == longest_common:
result = result + [password1[i - lcs_matrix[i,j] + 1:i + 1]]
else:
# 正常的演算法應該是:
# lcs_matrix[i,j] = max(lcs_matrix[i-1,j],lcs_matrix[i,j-1])
lcs_matrix[i,j] = 0
if len(result) > 0:
return result[0]
else:
return ''
接著讀取密碼檔案,用正則匹配使用者名稱和歷史密碼,並存入python字典:
```python
f = open(filename, 'r')
username_dict = {}
# 獲取使用者名稱密碼正則
re_passwd = re.compile(r'^([^:]+):(.+)$')
# 獲取歷史密碼正則
re_his = re.compile(r'^(.+)_history\d+$')
for line in f.readlines():
results = re_passwd.match(line)
if history != none:
username = history.groups()[0]
else:
username = results.groups()[0]
if not username in username_dict:
username_dict[username] =
f.close()
為了批量處理使用者的密碼,我們需要建立1個函式遍歷使用者的密碼列表:
```python
# 小於3的字串不記錄
def compare_passwords(passwords, min_len=3):
commons = {}
for i in range(0, len(passwords) - 1):
for j in range(i + 1, len(passwords)):
common = common_string(passwords[i], passwords[j])
if len(common) >= min_len:
if common not in commons:
commons[common] = 0
commons[common] += 1
return commons
最後處理剛才記錄使用者名稱、密碼的python字典
```python
for username, passwords in sorted(username_dict.items()):
commons_password = sorted(
[(value, key) for key, value in compare_passwords(passwords, 3).items()])
if len(commons_password) > 0:
print(":".format(username=username,password=commons_password[-1][1]))
else:
print("not found!")
輸出結果
user01:passw
user02:p@ssw0rd
滲透測試 利用Burp爆破使用者名稱與密碼
burp 全稱 burp suite,是用於攻擊web 應用程式的整合平台。它包含了許多任務具,可以抓包可以爆破也可以掃瞄漏洞。主要元件如下 proxy 是乙個攔截http s的 伺服器,作為乙個在瀏覽器和目標應用程式之間的中間人,允許你攔截,檢視,修改在兩個方向上的原始資料流。spider 是乙個...
儲存的使用者名稱和密碼
在windows xp pro裡,經常需要訪問 儲存使用者名稱和密碼 對話方塊,例如增加遠端計算機的訪問憑據,或者刪除microsoft passport的登入資訊。但是這個元件隱藏的比較深,可以借助以下兩種方式 1.在控制面板裡開啟 使用者帳戶 選擇當前登入帳戶,然後單擊左上方的 管理我的網路密碼...
tomcat的使用者名稱和密碼
在tomcat使用startup 啟動之後,訪問本機8080埠會自動進入tomcat的管理介面,其中 下面這三個功能需要使用者名稱和密碼,才能訪問,否則就會出現403許可權不夠的情況,那tomcat的使用者名稱和密碼在哪儲存呢?1 通過訪問失敗的這段英語我們可以很清晰的看到 在conf 下有乙個to...