Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
beefproject
GitHub Repository: beefproject/beef
Path: blob/master/extensions/admin_ui/media/javascript/ui/panel/PanelViewer.js
1154 views
1
//
2
// Copyright (c) 2006-2025 Wade Alcorn - [email protected]
3
// Browser Exploitation Framework (BeEF) - https://beefproject.com
4
// See the file 'doc/COPYING' for copying permission
5
//
6
7
PanelViewer = {};
8
var mainPanel, zombiesTreeLists, zombieTabs, zombiesManager;
9
10
Ext.onReady(function() {
11
12
Ext.QuickTips.init();
13
14
zombiesTreeLists = {
15
'basic' : new zombiesTreeList('basic'),
16
'requester' : new zombiesTreeList('requester')
17
};
18
19
zombieTabs = new ZombieTabs(zombiesTreeLists);
20
zombiesManager = new ZombiesMgr(zombiesTreeLists);
21
mainPanel = new MainPanel();
22
23
var viewport = new Ext.Viewport({
24
layout:'border',
25
items:[
26
new Ext.BoxComponent({
27
region:'north',
28
el: 'header',
29
height: 32
30
}),
31
zombieTabs,
32
mainPanel
33
]
34
});
35
setTimeout("locationHashChanged()", 1000);
36
37
new DoLogout();
38
});
39
40
/*
41
* Panel Events Updater
42
*
43
* This event updater retrieves zombie updates every periodically.
44
* The poll timer is specified in befe.extension.admin_ui.panel_update_interval
45
* These updates are then pushed to various managers (i.e. the zombie manager).
46
*/
47
var lastpoll = new Date().getTime();
48
49
Ext.TaskMgr.start({
50
run: function() {
51
Ext.Ajax.request({
52
url: '/api/hooks/?token=' + beefwui.get_rest_token(),
53
method: 'GET',
54
success: function(response) {
55
var updates;
56
try {
57
updates = Ext.util.JSON.decode(response.responseText);
58
} catch (e) {
59
//The framework has probably been reset and you're actually logged out
60
var hr = document.getElementById("header-right");
61
hr.innerHTML = "You appear to be logged out. <a href='<%= @base_path %>/panel/'>Login</a>";
62
}
63
var hooked_browsers = (updates['hooked-browsers']) ? updates['hooked-browsers'] : null;
64
65
if(zombiesManager && hooked_browsers) {
66
zombiesManager.updateZombies(hooked_browsers);
67
}
68
lastpoll = new Date().getTime();
69
var hr = document.getElementById("header-right");
70
hr.innerHTML = "";
71
},
72
failure: function(response) {
73
var timenow = new Date().getTime();
74
75
if ((timenow - lastpoll) > 60000) {
76
var hr = document.getElementById("header-right");
77
hr.innerHTML = "Framework is down";
78
}
79
}
80
});
81
},
82
83
interval: <%= (BeEF::Core::Configuration.instance.get("beef.extension.admin_ui.panel_update_interval") || 10).to_i * 1_000 %>
84
});
85
86
/*
87
* Allow selecting a browser with #id=<session> in the /ui/panel URL
88
*/
89
function locationHashChanged() {
90
var id = location_hash('id');
91
92
if (id === null) return;
93
94
var zombie = Object.values(beefwui.hooked_browsers).find(hb => hb.session === id);
95
96
id = id.replace(/[^a-z0-9]/gi, '');
97
console.log("Loading hooked browser with ID: " + id);
98
mainPanel.remove(mainPanel.getComponent('current-browser'));
99
if(!mainPanel.getComponent('current-browser')) {
100
mainPanel.add(new ZombieTab(zombie));
101
}
102
103
mainPanel.activate(mainPanel.getComponent('current-browser'));
104
//removeHash();
105
}
106
107
function location_hash(key) {
108
var matches = location.hash.match(new RegExp(key+'=([^&]*)'));
109
return matches ? matches[1] : null;
110
}
111
112
function removeHash () {
113
history.pushState("", document.title, window.location.pathname + window.location.search);
114
}
115
116
window.onhashchange = locationHashChanged;
117
118
119