Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
beefproject
GitHub Repository: beefproject/beef
Path: blob/master/extensions/etag/etag.rb
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
module BeEF
7
module Extension
8
module ETag
9
require 'sinatra/base'
10
require 'singleton'
11
12
class ETagMessages
13
include Singleton
14
attr_accessor :messages
15
16
def initialize
17
@messages = {}
18
end
19
end
20
21
class ETagWebServer < Sinatra::Base
22
def create_ET_header
23
inode = File.stat(__FILE__).ino
24
size = 3
25
mtime = (Time.now.to_f * 1_000_000).to_i
26
"#{inode.to_s(16)}L-#{size.to_s(16)}L-#{mtime.to_s(16)}L"
27
end
28
29
get '/:id/start' do
30
data = ETagMessages.instance.messages[params[:id].to_i]
31
32
$etag_server_state = {} unless defined?($etag_server_state)
33
$etag_server_state[params[:id]] = {}
34
$etag_server_state[params[:id]][:cur_bit] = -1
35
$etag_server_state[params[:id]][:last_header] = create_ET_header
36
$etag_server_state[params[:id]][:message] = data
37
38
headers 'ETag' => $etag_server_state[params[:id]][:last_header]
39
body 'Message start'
40
end
41
42
get '/:id' do
43
return 'Not started yet' if !defined?($etag_server_state) || $etag_server_state[params[:id]].nil?
44
45
if $etag_server_state[params[:id]][:cur_bit] < $etag_server_state[params[:id]][:message].length - 1
46
$etag_server_state[params[:id]][:cur_bit] += 1
47
else
48
$etag_server_state.delete(params[:id])
49
status 404
50
return 'Bing'
51
end
52
53
$etag_server_state[params[:id]][:last_header] = create_ET_header if $etag_server_state[params[:id]][:message][$etag_server_state[params[:id]][:cur_bit]] == '1'
54
55
headers 'ETag' => $etag_server_state[params[:id]][:last_header]
56
body 'Bit'
57
end
58
end
59
end
60
end
61
end
62
63