ctf-party 1.1.0 → 1.3.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/LICENSE.txt +2 -1
- data/lib/ctf_party.rb +2 -0
- data/lib/ctf_party/base64.rb +4 -3
- data/lib/ctf_party/case.rb +35 -0
- data/lib/ctf_party/cgi.rb +58 -0
- data/lib/ctf_party/flag.rb +0 -4
- data/lib/ctf_party/hex.rb +81 -3
- data/lib/ctf_party/version.rb +1 -1
- metadata +14 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 43e5c5fba11ab29415687644876bc3185a7b220adcc0da51bf36bac65b970600
|
4
|
+
data.tar.gz: 6dc55b3100a380a0ff2c11e61eda9f67fd7a7a1ae5fc9effae3bae870cf701df
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 36b8f7a716e66fcfb1aed39b71f586d5ad73e9c099a11651c7dfd29093e09f60b15e278036f7e4e7d74150ceca1c374308864634f8f58b8e4078ca261f60a389
|
7
|
+
data.tar.gz: 17618c1a863ed02b9f838bae87e2135e108d50350658c639494d9d9d2a7751319720a022f801a10a79a0bf0a03417d5262d043c137313d7a004dd08a81b5ab61
|
data/LICENSE.txt
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
The MIT License (MIT)
|
2
2
|
|
3
|
-
Copyright (c)
|
3
|
+
Copyright (c) 2020-2020 Alexandre ZANNI
|
4
|
+
Copyright (c) 2019-2020 Alexandre ZANNI at Orange Cyberdefense
|
4
5
|
|
5
6
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
7
|
of this software and associated documentation files (the "Software"), to deal
|
data/lib/ctf_party.rb
CHANGED
data/lib/ctf_party/base64.rb
CHANGED
@@ -74,14 +74,15 @@ class String
|
|
74
74
|
(?:[a-zA-Z0-9+/]{2}==)|(?:[a-zA-Z0-9+/]{1}===))\Z}xn
|
75
75
|
reg3 = /\A(?:[a-zA-Z0-9\-_]{4})*(?:|(?:[a-zA-Z0-9\-_]{3}=)|
|
76
76
|
(?:[a-zA-Z0-9\-_]{2}==)|(?:[a-zA-Z0-9\-_]{1}===))\Z/xn
|
77
|
-
|
77
|
+
case opts[:mode]
|
78
|
+
when :strict, :rfc4648
|
78
79
|
b64 = true if reg1.match?(self)
|
79
|
-
|
80
|
+
when :rfc2045
|
80
81
|
b64 = true
|
81
82
|
split("\n").each do |s|
|
82
83
|
b64 = false unless reg1.match?(s)
|
83
84
|
end
|
84
|
-
|
85
|
+
when :urlsafe
|
85
86
|
b64 = true if reg3.match?(self)
|
86
87
|
else
|
87
88
|
raise ArgumentError 'Wrong mode'
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class String
|
4
|
+
# Change the case of characters randomly
|
5
|
+
# @return [String] the case modified string
|
6
|
+
# @example
|
7
|
+
# 'SELECT * FROM'.randomcase # => "SElECt * frOm"
|
8
|
+
# 'SELECT * FROM'.randomcase # => "selECT * FROm"
|
9
|
+
def randomcase
|
10
|
+
chars.map { |c| rand(0..1).zero? ? c.downcase : c.upcase }.join
|
11
|
+
end
|
12
|
+
|
13
|
+
# Change the case of characters randomly in place as described for
|
14
|
+
# {String#randomcase}.
|
15
|
+
def randomcase!
|
16
|
+
replace(randomcase)
|
17
|
+
end
|
18
|
+
|
19
|
+
# Change one characte on two upcase and the other downcase
|
20
|
+
# @param shift [Integer] 0: 1st character will be downcase, 1: 1st character
|
21
|
+
# will be upcase
|
22
|
+
# @return [String] the case modified string
|
23
|
+
# @example
|
24
|
+
# 'SELECT * FROM'.alternatecase # => "sElEcT * FrOm"
|
25
|
+
# 'SELECT * FROM'.alternatecase(1) # => "SeLeCt * fRoM"
|
26
|
+
def alternatecase(shift = 0)
|
27
|
+
chars.each_with_index.map { |c, i| (i + shift).even? ? c.downcase : c.upcase }.join
|
28
|
+
end
|
29
|
+
|
30
|
+
# Change one characte on two upcase and the other downcase in place as
|
31
|
+
# described for {String#alternatecase}.
|
32
|
+
def alternatecase!(shift = 0)
|
33
|
+
replace(alternatecase(shift))
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Ruby standard library
|
4
|
+
require 'cgi'
|
5
|
+
|
6
|
+
class String
|
7
|
+
# URL-encode the string
|
8
|
+
# @return [String] the URL-encoded string
|
9
|
+
# @example
|
10
|
+
# "'Stop!' said Fred".urlencode # => "%27Stop%21%27+said+Fred"
|
11
|
+
def urlencode
|
12
|
+
CGI.escape self
|
13
|
+
end
|
14
|
+
|
15
|
+
# URL-encode the string in place as described for {String#urlencode}.
|
16
|
+
def urlencode!
|
17
|
+
replace(urlencode)
|
18
|
+
end
|
19
|
+
|
20
|
+
# URL-decode the string
|
21
|
+
# @return [String] the URL-decoded string
|
22
|
+
# @example
|
23
|
+
# "%27Stop%21%27+said+Fred".urldecode # => "'Stop!' said Fred"
|
24
|
+
def urldecode
|
25
|
+
CGI.unescape self
|
26
|
+
end
|
27
|
+
|
28
|
+
# URL-decode the string in place as described for {String#urldecode}.
|
29
|
+
def urldecode!
|
30
|
+
replace(urldecode)
|
31
|
+
end
|
32
|
+
|
33
|
+
# HTML escape the string
|
34
|
+
# @return [String] the HTML escaped string
|
35
|
+
# @example
|
36
|
+
# 'Usage: foo "bar" <baz>'.htmlescape # => "Usage: foo "bar" <baz>"
|
37
|
+
def htmlescape
|
38
|
+
CGI.escapeHTML self
|
39
|
+
end
|
40
|
+
|
41
|
+
# HTML escape the string in place as described for {String#htmlescape}.
|
42
|
+
def htmlescape!
|
43
|
+
replace(htmlescape)
|
44
|
+
end
|
45
|
+
|
46
|
+
# HTML unescape the string
|
47
|
+
# @return [String] the HTML unescaped string
|
48
|
+
# @example
|
49
|
+
# "Usage: foo "bar" <baz>".htmlunescape # => "Usage: foo \"bar\" <baz>"
|
50
|
+
def htmlunescape
|
51
|
+
CGI.unescapeHTML self
|
52
|
+
end
|
53
|
+
|
54
|
+
# HTML unescape the string in place as described for {String#htmlunescape}.
|
55
|
+
def htmlunescape!
|
56
|
+
replace(htmlunescape)
|
57
|
+
end
|
58
|
+
end
|
data/lib/ctf_party/flag.rb
CHANGED
@@ -16,8 +16,6 @@ class String
|
|
16
16
|
@@flag
|
17
17
|
end
|
18
18
|
|
19
|
-
# rubocop:disable Metrics/LineLength
|
20
|
-
|
21
19
|
# Update the flag configuration.
|
22
20
|
# @param hash [Hash] flag configuration
|
23
21
|
# @option hash [String] :prefix prefix of the flag. Default: none.
|
@@ -40,8 +38,6 @@ class String
|
|
40
38
|
@@flag.merge!(hash)
|
41
39
|
end
|
42
40
|
|
43
|
-
# rubocop:enable Metrics/LineLength
|
44
|
-
|
45
41
|
# Format the current string into the configured flag format. See {.flag=}
|
46
42
|
# example.
|
47
43
|
# @return [String] the format flag.
|
data/lib/ctf_party/hex.rb
CHANGED
@@ -22,7 +22,7 @@ class String
|
|
22
22
|
# @example
|
23
23
|
# a = 'ff'
|
24
24
|
# a.hex2dec!
|
25
|
-
# a # =>
|
25
|
+
# a # => "255"
|
26
26
|
def hex2dec!(opts = {})
|
27
27
|
replace(hex2dec(opts))
|
28
28
|
end
|
@@ -78,9 +78,10 @@ class String
|
|
78
78
|
opts[:nibble] ||= :high
|
79
79
|
# convert
|
80
80
|
out = ''
|
81
|
-
|
81
|
+
case opts[:nibble]
|
82
|
+
when :high
|
82
83
|
out = unpack1('H*')
|
83
|
-
|
84
|
+
when :low
|
84
85
|
out = unpack1('h*')
|
85
86
|
end
|
86
87
|
# char case management
|
@@ -89,6 +90,11 @@ class String
|
|
89
90
|
return opts[:prefix] + out
|
90
91
|
end
|
91
92
|
|
93
|
+
# Alias for {String#to_hex}.
|
94
|
+
def str2hex(opts = {})
|
95
|
+
to_hex(opts)
|
96
|
+
end
|
97
|
+
|
92
98
|
# Encode a string into hexadecimal in place as described
|
93
99
|
# for {String#to_hex}.
|
94
100
|
# @example
|
@@ -99,6 +105,11 @@ class String
|
|
99
105
|
replace(to_hex(opts))
|
100
106
|
end
|
101
107
|
|
108
|
+
# Alias for {String#to_hex!}.
|
109
|
+
def str2hex!(opts = {})
|
110
|
+
to_hex!(opts)
|
111
|
+
end
|
112
|
+
|
102
113
|
# Decode a hexadecimal string
|
103
114
|
# @param opts [Hash] optional parameters
|
104
115
|
# @option opts [String] :prefix Prefix of the input. Default value is a void
|
@@ -122,6 +133,11 @@ class String
|
|
122
133
|
raise ArgumentError ':nibble expects :high or :low'
|
123
134
|
end
|
124
135
|
|
136
|
+
# Alias for {String#from_hex}.
|
137
|
+
def hex2str(opts = {})
|
138
|
+
from_hex(opts)
|
139
|
+
end
|
140
|
+
|
125
141
|
# Decode a hexadecimal string in place as described
|
126
142
|
# for {String#from_hex}.
|
127
143
|
# @example
|
@@ -131,4 +147,66 @@ class String
|
|
131
147
|
def from_hex!(opts = {})
|
132
148
|
replace(from_hex(opts))
|
133
149
|
end
|
150
|
+
|
151
|
+
# Alias for {String#from_hex!}.
|
152
|
+
def hex2str!(opts = {})
|
153
|
+
from_hex!(opts)
|
154
|
+
end
|
155
|
+
|
156
|
+
# Encode an hexadecimal string to a binary string
|
157
|
+
# @param opts [Hash] optional parameters
|
158
|
+
# @option opts [String] :prefix Prefix of the input. Default value is a void
|
159
|
+
# string. Example of values: +0x+, +\x+.
|
160
|
+
# @return [String] the binary encoded string
|
161
|
+
# @example
|
162
|
+
# 'ab'.hex2bin # => "10101011"
|
163
|
+
# '\xf3'.hex2bin(prefix: '\x') # => "11110011"
|
164
|
+
def hex2bin(opts = {})
|
165
|
+
opts[:prefix] ||= ''
|
166
|
+
# remove prefix
|
167
|
+
out = sub(opts[:prefix], '')
|
168
|
+
# convert
|
169
|
+
return out.to_i(16).to_s(2)
|
170
|
+
end
|
171
|
+
|
172
|
+
# Encode an hexadecimal string to a binary string in place as described
|
173
|
+
# for {String#hex2bin}.
|
174
|
+
# @example
|
175
|
+
# a = 'ff'
|
176
|
+
# a.hex2bin!
|
177
|
+
# a # => => "11111111"
|
178
|
+
def hex2bin!(opts = {})
|
179
|
+
replace(hex2bin(opts))
|
180
|
+
end
|
181
|
+
|
182
|
+
# Encode an binary string to a hexadecimal string
|
183
|
+
# @param opts [Hash] optional parameters
|
184
|
+
# @option opts [String] :prefix Prefix of the output. Default value is a void
|
185
|
+
# string. Example of values: +0x+, +\x+.
|
186
|
+
# @option opts [Symbol] :case Char case of the ouput. Default value +:lower+.
|
187
|
+
# Other valid value +:upper+.
|
188
|
+
# @return [String] the hexadecimal encoded string
|
189
|
+
# @example
|
190
|
+
# '11110011'.bin2hex # => "f3"
|
191
|
+
# '11110011'.bin2hex({prefix: '0x', case: :upper}) # => "0xF3"
|
192
|
+
def bin2hex(opts = {})
|
193
|
+
opts[:prefix] ||= ''
|
194
|
+
opts[:case] ||= :lower
|
195
|
+
# convert
|
196
|
+
out = to_i(2).to_s(16)
|
197
|
+
# char case management
|
198
|
+
out = out.upcase if opts[:case] == :upper
|
199
|
+
# adding prefix must be done after case change
|
200
|
+
return opts[:prefix] + out
|
201
|
+
end
|
202
|
+
|
203
|
+
# Encode an binary string to a hexadecimal string in place as described
|
204
|
+
# for {String#bin2hex}.
|
205
|
+
# @example
|
206
|
+
# a = '11110011'
|
207
|
+
# a.bin2hex!
|
208
|
+
# a # => "f3"
|
209
|
+
def bin2hex!(opts = {})
|
210
|
+
replace(bin2hex(opts))
|
211
|
+
end
|
134
212
|
end
|
data/lib/ctf_party/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ctf-party
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alexandre ZANNI
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-07-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -135,22 +135,24 @@ files:
|
|
135
135
|
- bin/ctf_party_console
|
136
136
|
- lib/ctf_party.rb
|
137
137
|
- lib/ctf_party/base64.rb
|
138
|
+
- lib/ctf_party/case.rb
|
139
|
+
- lib/ctf_party/cgi.rb
|
138
140
|
- lib/ctf_party/digest.rb
|
139
141
|
- lib/ctf_party/flag.rb
|
140
142
|
- lib/ctf_party/hex.rb
|
141
143
|
- lib/ctf_party/rot.rb
|
142
144
|
- lib/ctf_party/version.rb
|
143
|
-
homepage: https://
|
145
|
+
homepage: https://noraj.github.io/ctf-party/
|
144
146
|
licenses:
|
145
147
|
- MIT
|
146
148
|
metadata:
|
147
149
|
yard.run: yard
|
148
|
-
bug_tracker_uri: https://github.com/
|
149
|
-
changelog_uri: https://github.com/
|
150
|
-
documentation_uri: https://
|
151
|
-
homepage_uri: https://
|
152
|
-
source_code_uri: https://github.com/
|
153
|
-
post_install_message:
|
150
|
+
bug_tracker_uri: https://github.com/noraj/ctf-party/issues
|
151
|
+
changelog_uri: https://github.com/noraj/ctf-party/blob/master/docs/CHANGELOG.md
|
152
|
+
documentation_uri: https://noraj.github.io/ctf-party/
|
153
|
+
homepage_uri: https://noraj.github.io/ctf-party/
|
154
|
+
source_code_uri: https://github.com/noraj/ctf-party/
|
155
|
+
post_install_message:
|
154
156
|
rdoc_options: []
|
155
157
|
require_paths:
|
156
158
|
- lib
|
@@ -158,7 +160,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
158
160
|
requirements:
|
159
161
|
- - "~>"
|
160
162
|
- !ruby/object:Gem::Version
|
161
|
-
version: '2.
|
163
|
+
version: '2.7'
|
162
164
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
163
165
|
requirements:
|
164
166
|
- - ">="
|
@@ -166,7 +168,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
166
168
|
version: '0'
|
167
169
|
requirements: []
|
168
170
|
rubygems_version: 3.1.2
|
169
|
-
signing_key:
|
171
|
+
signing_key:
|
170
172
|
specification_version: 4
|
171
173
|
summary: A library to enhance and speed up script/exploit writing for CTF players
|
172
174
|
test_files: []
|