pentex 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,2 @@
1
+ = PentEx aka Pentest Extensions =
2
+ Tool collection for various kind of trans-formation/-coding often necessary during a pentest/audit/fun ...
@@ -0,0 +1,38 @@
1
+ #
2
+ # I R B - Limit Return Values
3
+ # http://www.ruby-forum.com/topic/107929
4
+ # Note: This solution is more complicated than just using conf.return_format but the output is nicer,
5
+ # because you know if it has been truncated or not.
6
+
7
+ #:nodoc:
8
+
9
+ IRB.conf[:PROMPT_MODE] = :SIMPLE
10
+ IRB.conf[:MAX_OUTPUT_SIZE] = 100
11
+
12
+ class IRB::Context
13
+ attr_accessor :max_output_size
14
+
15
+ alias initialize_before_max_output_size initialize
16
+ def initialize(*args)
17
+ initialize_before_max_output_size(*args)
18
+ @max_output_size = (IRB.conf[:MAX_OUTPUT_SIZE] ? IRB.conf[:MAX_OUTPUT_SIZE] : 500)
19
+ end
20
+ end
21
+
22
+ #:nodoc:
23
+ class IRB::Irb
24
+ def output_value
25
+ text =
26
+ if @context.inspect?
27
+ sprintf @context.return_format, @context.last_value.inspect
28
+ else
29
+ sprintf @context.return_format, @context.last_value
30
+ end
31
+ max = @context.max_output_size
32
+ if text.size < max
33
+ puts text
34
+ else
35
+ puts text[0..@context.max_output_size-1] + " ..." + text[-2..-1]
36
+ end
37
+ end
38
+ end
@@ -0,0 +1 @@
1
+ require 'pentex/core'
@@ -0,0 +1,221 @@
1
+ # :title: IRB Hacking Extensions
2
+ # Author:: Andreas Schmidt
3
+
4
+ # Version: 0.3
5
+ # Date:
6
+ #
7
+ # * added decode_hex
8
+ # - - -
9
+ # Version: 0.2
10
+ # Date:
11
+ #
12
+ # * added to_hex
13
+ # - - -
14
+ # Version: 0.1 (First Shot)
15
+ # Date: 29.02.2012
16
+
17
+
18
+
19
+ puts "== HACKING EXTENSIONS =="
20
+ puts ">> loading additional libs "
21
+ [ 'irb/completion', 'yaml', 'base64', 'digest/md5', 'digest/sha1', 'zlib', 'cgi', 'uri', 'awesome_print' ].each do |lib|
22
+ begin
23
+ require lib
24
+ print "."
25
+ rescue LoadError => bang
26
+ puts "Could not load #{lib}, you may fix it by installing the gem."
27
+ end
28
+ end
29
+
30
+ puts
31
+ puts ">> monkey patching ..."
32
+
33
+ # ==Hacking Extensions For The String Class
34
+ class String
35
+ def to_md5(format = :hex)
36
+ Digest::MD5.hexdigest(self)
37
+ end
38
+
39
+ def to_sha1(format = :hex)
40
+ Digest::SHA1.hexdigest(self)
41
+ end
42
+
43
+ def decode_b64
44
+ Base64.decode64(self)
45
+ end
46
+
47
+ def encode_b64
48
+ Base64.encode64(self)
49
+ end
50
+
51
+ def decode_url
52
+ CGI.unescape(self)
53
+ end
54
+
55
+ def encode_url
56
+ CGI.escape(self)
57
+ end
58
+
59
+ def encode_uri
60
+ URI.escape(self)
61
+ end
62
+
63
+ def decode_uri
64
+ URI.unescape(self)
65
+ end
66
+
67
+ def decode_hex
68
+ # first normalize hex-string
69
+ s = self.gsub(/\\x/,'')
70
+ s.gsub!(/0x/,'')
71
+ s.gsub!(/\W/,'')
72
+ r = ''
73
+ 0.step(s.length-1,2) do |x|
74
+ r << s.slice(x,2).hex.chr
75
+ end
76
+ r
77
+ end
78
+
79
+ # converts string to hex format
80
+ # <br>
81
+ # style: let's you choose between different formats
82
+ # :plain (default) -> "61624358"
83
+ # :c (c++ style) -> "\\x61\\x62\\x43\\x58"
84
+ # :r (ruby style) -> "\\x61\\x62\\x43\\x58"
85
+ # <br><br>
86
+ # Example:
87
+ # >> "abCX".to_hex :c
88
+ # => "\\x61\\x62\\x43\\x58"
89
+
90
+ def to_hex( style = :plain )
91
+ x = self.unpack("H*")[0]
92
+ h = case style.to_s
93
+ when /plain/i
94
+ x
95
+ when /^c/i
96
+ x.gsub(/(..)/,'\x\1')
97
+ when /^r/i
98
+ x.gsub(/(..)/,'\x\1')
99
+ end
100
+ h
101
+ end
102
+
103
+ # decodes cisco 7 passwords which can be found in IOS/CatOS configs.
104
+ # <br>
105
+ # e.g., password 7 07362E590E1B1C041B1E124C0A2F2E206832752E1A01134D
106
+ def decode_cisco7
107
+
108
+ xlat = %w( 64 73 66 64 3b 6b 66 6f 41 2c 2e 69 79 65 77 72 6b 6c 64 4a 4b 44 48 53 55 42 73 67 76 63 )
109
+
110
+ ep = self.strip
111
+ # sample: "07362E590E1B1C041B1E124C0A2F2E206832752E1A01134D" # -> "You really need a life."
112
+ dp = ""
113
+ if ep =~ /^(..)(.*)/o
114
+ s = $1.to_i
115
+ e = $2
116
+ i = 0
117
+ 0.step(e.length-1, 2) do |x|
118
+ dp += ( e.slice(x,2).hex ^ xlat[s].hex ).chr;
119
+ s+=1
120
+ break if s >= xlat.length
121
+ end
122
+
123
+ end
124
+ dp
125
+ end
126
+
127
+ # shows (binary) string in a readable format.
128
+ # <br>
129
+ # <b>Options:</b>
130
+ # :bytes => 16; the maximum number of bytes per line
131
+ # :offset => 0; not supported yet
132
+ # :max_bytes => 0; the max number of bytes to be processed
133
+ # :chunksize => 8; splitted by "-"
134
+ # :range => nil; use this to define the range to be displayes, e.g. "(10..20)" must be a Range-Object!
135
+ # :format => :simple; this is the only format supported yet
136
+ # :max_lines => 40; number of lines before stopping output
137
+ # <br><br>
138
+ # <b>Example 1:</b>
139
+ # >> "\x02:this is a string with some binary data\xff".hexdump
140
+ # 000000: 02 3A 74 68 69 73 20 69 - 73 20 61 20 73 74 72 69 :.:this is a stri
141
+ # 000010: 6E 67 20 77 69 74 68 20 - 73 6F 6D 65 20 62 69 6E :ng with some bin
142
+ # 000020: 61 72 79 20 64 61 74 61 - FF :ary data.
143
+ # => true
144
+ # <br><br>
145
+ # <b>Example 2:</b> giving a range with int and hex value calculation
146
+ # "\x02:this is a string with some binary data\xff".hexdump :range => (16...0x10+0x10)
147
+ # 000010: 6E 67 20 77 69 74 68 20 - 73 6F 6D 65 20 62 69 :ng with some bi
148
+ # => true
149
+
150
+ def hexdump( opts = {} )
151
+ copts = {
152
+ :bytes => 16,
153
+ :offset => 0,
154
+ :max_bytes => 0,
155
+ :chunksize => 8,
156
+ :range => nil,
157
+ :format => :simple,
158
+ :max_lines => 40
159
+ }
160
+ # lame kind of implementing a command help, anyway better than opening source file ;)
161
+ unless opts.is_a? Hash
162
+ puts "[options]"
163
+ puts copts.to_yaml
164
+ puts
165
+ puts "[example]\n>>'this is a string'.hexdump :max_bytes => 8"
166
+ puts
167
+ return true
168
+ end
169
+
170
+ copts.update opts
171
+
172
+ dump = ""
173
+ offset = 0
174
+ linecount = 0
175
+ max_bytes = copts[:max_bytes] > 0 ? copts[:max_bytes] : self.length
176
+ if copts[:range].is_a? Range
177
+ offset = copts[:range].min
178
+ max_bytes = copts[:range].max
179
+ end
180
+
181
+ counter = offset
182
+
183
+ while counter < max_bytes
184
+
185
+ pos = sprintf("%06X", counter)
186
+
187
+ linelen = (counter < max_bytes - copts[:bytes] ) ? copts[:bytes] : (max_bytes - counter)
188
+ bytes = ""
189
+ linelen.times do |i|
190
+ bytes << "%02X" % self[counter + i].ord
191
+ bytes << " " unless (i+1) % copts[:bytes] == 0
192
+ bytes << "- " if ( i+1) % copts[:chunksize] == 0 && (i+1) < linelen
193
+ end
194
+
195
+ maxlen = ( copts[:bytes] * 2 + copts[:bytes] - 1 + copts[:bytes] / copts[:chunksize] )
196
+ bytes << " " * (maxlen - bytes.length) if maxlen > bytes.length
197
+ ascii = self[counter, linelen].printable
198
+ line = "#{pos}: #{bytes} :#{ascii}\n"
199
+ puts line
200
+ linecount += 1
201
+ if linecount >= copts[:max_lines]
202
+ puts "<Enter>, [qQ]uit"
203
+ c = gets
204
+ return false if c =~ /^q/i
205
+ linecount = 0
206
+ end
207
+ dump << line
208
+ counter += copts[:bytes]
209
+ end
210
+
211
+ return dump unless copts[:format] == :simple
212
+
213
+ return true
214
+ end
215
+
216
+ def printable( non_print_char = "." )
217
+ x = self.gsub(/[^[:print:]]/, non_print_char )
218
+ end
219
+
220
+ end
221
+
metadata ADDED
@@ -0,0 +1,59 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: pentex
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.2
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Andreas Schmidt
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-04-02 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: awesome_print
16
+ requirement: &28640940 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *28640940
25
+ description: blablabla
26
+ email: watobo@siberas.de
27
+ executables: []
28
+ extensions: []
29
+ extra_rdoc_files: []
30
+ files:
31
+ - lib/irb/irbrc.rb
32
+ - lib/pentex/core.rb
33
+ - lib/pentex.rb
34
+ - lib/README.txt
35
+ homepage: http://www.siberas.de
36
+ licenses: []
37
+ post_install_message:
38
+ rdoc_options: []
39
+ require_paths:
40
+ - lib
41
+ required_ruby_version: !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ! '>='
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ required_rubygems_version: !ruby/object:Gem::Requirement
48
+ none: false
49
+ requirements:
50
+ - - ! '>='
51
+ - !ruby/object:Gem::Version
52
+ version: '0'
53
+ requirements: []
54
+ rubyforge_project:
55
+ rubygems_version: 1.7.2
56
+ signing_key:
57
+ specification_version: 3
58
+ summary: PENTEX - Pentesting Extensions
59
+ test_files: []