ctf-party 2.1.0 → 2.2.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1a891b890cdf81188caac863846fef9ddd4492126a34645de0bb9c09d4e4ab44
4
- data.tar.gz: bcce5f84823d802900e4d1ff7750eb1a58c370d26f1895603091a237a62e7f2b
3
+ metadata.gz: b19410e0b443bc237d10f61d2f85caff731309e95142c66d5d74897b3b296319
4
+ data.tar.gz: b446182ee4883bddcabb9cfa108d62712d74ab004fe9b1f4180db7ae42e4dcd9
5
5
  SHA512:
6
- metadata.gz: ce15b05e7b38dfe927a6c7035d07fe843f2106b3897d716f685f7b98c3b1a851b09337657d8ee46916c2e7f36aa9ff1a48462b23c989357ad8be59f701e26c9e
7
- data.tar.gz: f76df14283f2002dec8896e1b21ecf0bfb1cf4b778340a000074406a03558c483f262aa026912876cdca34c8353a5a949e8873b4e4fc537640d1e2aa65975e8d
6
+ metadata.gz: e38e7605cd1bf2bd7d9bcef501c93d6c5e1789a8488a6a150380e364822f24c981f265e319654527e0e804f6bcb7f3c6e2337d39abc54d081c602de43aca6056
7
+ data.tar.gz: 4cb5c641ec6cbdc40e35387068c8befc1b658d586bae0a52a8c13cdf5cd93068c05e250d48274810e2f276bb61681bf7be0b862da0699d672b857f47a66c50cc
data/bin/ctf-party CHANGED
@@ -3,6 +3,7 @@
3
3
 
4
4
  # Ruby internal
5
5
  require 'pp'
6
+ require 'shellwords' # for shellescape cmd
6
7
  # Project internal
7
8
  require 'ctf_party'
8
9
  require 'ctf_party/version'
@@ -10,6 +11,7 @@ require 'ctf_party/version'
10
11
  require 'docopt'
11
12
 
12
13
  cmd_whitelist = {
14
+ # ctf-party commands
13
15
  alternatecase: 'Change one characte on two upcase and the other downcase',
14
16
  bin2hex: 'Encode an binary string to a hexadecimal string',
15
17
  bin2str: 'Alias for from_bin',
@@ -45,27 +47,62 @@ cmd_whitelist = {
45
47
  to_hex: 'Encode a string into hexadecimal',
46
48
  to_hexip: 'Encode a dotted decimal IP into a hexadecimal one',
47
49
  urldecode: 'URL-decode the string',
48
- urlencode: 'URL-encode the string'
50
+ urldecode_component: 'URL-decode the URL component string',
51
+ urlencode: 'URL-encode the string',
52
+ urlencode_component: 'URL-encode the URL component string',
53
+ # native string commands
54
+ bytesize: 'https://rubyapi.org/3.1/o/string#method-i-bytesize',
55
+ capitalize: 'https://rubyapi.org/3.1/o/string#method-i-capitalize',
56
+ chomp: 'https://rubyapi.org/3.1/o/string#method-i-chomp',
57
+ chop: 'https://rubyapi.org/3.1/o/string#method-i-chop',
58
+ downcase: 'https://rubyapi.org/3.1/o/string#method-i-downcase',
59
+ dump: 'https://rubyapi.org/3.1/o/string#method-i-dump',
60
+ hex: 'https://rubyapi.org/3.1/o/string#method-i-hex',
61
+ inspect: 'https://rubyapi.org/3.1/o/string#method-i-inspect',
62
+ length: 'https://rubyapi.org/3.1/o/string#method-i-length',
63
+ lstrip: 'https://rubyapi.org/3.1/o/string#method-i-lstrip',
64
+ reverse: 'https://rubyapi.org/3.1/o/string#method-i-reverse',
65
+ rstrip: 'https://rubyapi.org/3.1/o/string#method-i-rstrip',
66
+ scrub: 'https://rubyapi.org/3.1/o/string#method-i-scrub',
67
+ shellescape: 'https://rubyapi.org/3.1/o/string#method-i-shellescape',
68
+ size: 'https://rubyapi.org/3.1/o/string#method-i-size',
69
+ squeeze: 'https://rubyapi.org/3.1/o/string#method-i-squeeze',
70
+ strip: 'https://rubyapi.org/3.1/o/string#method-i-strip',
71
+ succ: 'https://rubyapi.org/3.1/o/string#method-i-succ',
72
+ swapcase: 'https://rubyapi.org/3.1/o/string#method-i-swapcase',
73
+ undump: 'https://rubyapi.org/3.1/o/string#method-i-undump',
74
+ unicode_normalize: 'https://rubyapi.org/3.1/o/string#method-i-unicode_normalize',
75
+ upcase: 'https://rubyapi.org/3.1/o/string#method-i-upcase'
49
76
  }
50
77
 
51
78
  doc = <<~DOCOPT
52
- ctf-party by noraj
79
+ ctf-party v#{Version::VERSION} by noraj
53
80
 
54
81
  Usage:
55
- ctf-party <string> <cmd>... [--debug]
82
+ ctf-party <string> <cmd>... [--row --file] [--debug]
56
83
  ctf-party --list-commands [--debug]
57
84
  ctf-party -h | --help
58
85
  ctf-party --version
59
86
 
87
+ Parameters:
88
+ <string> The string to manipulate, read from STDIN if equal to "-"
89
+ <cmd> Command to apply to the string, cf. --list-commands
90
+
60
91
  Options:
61
92
  -l, --list-commands List available commands (see https://noraj.github.io/ctf-party/yard/String.html)
93
+ -r, --row Apply the transformation to each row
94
+ -f, --file Interpret the string as a filename, if file doesn't exist it will still be treated as a string
62
95
  --debug Display arguments
63
96
  -h, --help Show this screen
64
97
  --version Show version
65
98
 
66
99
  Examples:
67
100
  ctf-party 'security' to_hex
68
- ctf-party 'NzQ2Zjc0NmY=' from_b64 hex2str str2bin
101
+ ctf-party 'NzQ2Zjc0NmY=' from_b64 hex2bin
102
+ curl -s https://example.org | ctf-party - htmlescape
103
+ seq 1 10 | ctf-party - dec2hex hex2bin --row
104
+ cut -d : -f 1 /etc/passwd | ctf-party - randomcase --row
105
+ ctf-party /etc/passwd str2hex --row --file
69
106
  DOCOPT
70
107
 
71
108
  begin
@@ -73,11 +110,24 @@ begin
73
110
  # use case 1, using the tool
74
111
  pp args if args['--debug']
75
112
  if args['<string>']
113
+ args['<string>'] = $stdin.read.chomp if args['<string>'] == '-'
114
+ args['<string>'] = File.read(args['<string>']) if args['--file'] && File.exist?(args['<string>'])
76
115
  wrong_cmd = args['<cmd>'] - cmd_whitelist.keys.map(&:to_s)
77
116
  if wrong_cmd.empty?
78
- output = args['<string>']
79
- args['<cmd>'].each do |cmd|
80
- output = output.public_send(cmd)
117
+ if args['--row']
118
+ output = ''
119
+ args['<string>'].each_line(chomp: true) do |line|
120
+ output_line = line
121
+ args['<cmd>'].each do |cmd|
122
+ output_line = output_line.public_send(cmd)
123
+ end
124
+ output += "#{output_line}\n"
125
+ end
126
+ else
127
+ output = args['<string>']
128
+ args['<cmd>'].each do |cmd|
129
+ output = output.public_send(cmd)
130
+ end
81
131
  end
82
132
  puts output
83
133
  else
@@ -85,7 +135,7 @@ begin
85
135
  end
86
136
  elsif args['--list-commands']
87
137
  cmd_whitelist.each do |k, v|
88
- puts "#{k.to_s.ljust(15)}#{v}"
138
+ puts "#{k.to_s.ljust(25)}#{v}"
89
139
  end
90
140
  end
91
141
  # use case 2, help: already handled by docopt
data/lib/ctf_party/cgi.rb CHANGED
@@ -2,6 +2,7 @@
2
2
 
3
3
  # Ruby standard library
4
4
  require 'cgi'
5
+ require 'uri'
5
6
 
6
7
  class String
7
8
  # URL-encode the URL string (RFC2396)
data/lib/ctf_party/hex.rb CHANGED
@@ -59,8 +59,10 @@ class String
59
59
  out = ('0' * (opts[:padding] - out.size)) + out if out.size < opts[:padding]
60
60
  # char case management
61
61
  out = out.upcase if opts[:case] == :upper
62
- # adding prefix must be done after case change
63
- out = out.scan(/.{2}/).map { |x| opts[:prefixall] + x }.join
62
+ # adding prefix must be done after case change, complex conditional to avoid cropping when odd byte lenght
63
+ out = (out.size.odd? ? [out[0]] + out[1..].scan(/.{1,2}/) : out.scan(/.{2}/)).map do |x|
64
+ opts[:prefixall] + x
65
+ end.join
64
66
  return opts[:prefix] + out
65
67
  end
66
68
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Version
4
- VERSION = '2.1.0'
4
+ VERSION = '2.2.0'
5
5
  end
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: 2.1.0
4
+ version: 2.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexandre ZANNI
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-01-31 00:00:00.000000000 Z
11
+ date: 2022-07-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: docopt