librex 0.0.68 → 0.0.70

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 (528) hide show
  1. checksums.yaml +15 -0
  2. data/README.markdown +1 -1
  3. data/Rakefile +18 -16
  4. data/lib/rex.rb +14 -10
  5. data/lib/rex/LICENSE +2 -2
  6. data/lib/rex/arch.rb +76 -76
  7. data/lib/rex/arch/sparc.rb +57 -58
  8. data/lib/rex/arch/x86.rb +506 -496
  9. data/lib/rex/assembly/nasm.rb +83 -84
  10. data/lib/rex/compat.rb +228 -173
  11. data/lib/rex/constants.rb +47 -37
  12. data/lib/rex/elfparsey.rb +0 -3
  13. data/lib/rex/elfparsey/elf.rb +107 -110
  14. data/lib/rex/elfparsey/elfbase.rb +244 -247
  15. data/lib/rex/elfparsey/exceptions.rb +0 -3
  16. data/lib/rex/elfscan.rb +0 -3
  17. data/lib/rex/elfscan/scanner.rb +184 -166
  18. data/lib/rex/elfscan/search.rb +35 -38
  19. data/lib/rex/encoder/alpha2.rb +1 -2
  20. data/lib/rex/encoder/alpha2/alpha_mixed.rb +52 -53
  21. data/lib/rex/encoder/alpha2/alpha_upper.rb +62 -63
  22. data/lib/rex/encoder/alpha2/generic.rb +77 -78
  23. data/lib/rex/encoder/alpha2/unicode_mixed.rb +101 -97
  24. data/lib/rex/encoder/alpha2/unicode_upper.rb +106 -107
  25. data/lib/rex/encoder/bloxor/bloxor.rb +326 -0
  26. data/lib/rex/encoder/ndr.rb +68 -68
  27. data/lib/rex/encoder/nonalpha.rb +50 -51
  28. data/lib/rex/encoder/nonupper.rb +50 -51
  29. data/lib/rex/encoder/xdr.rb +78 -78
  30. data/lib/rex/encoder/xor.rb +52 -53
  31. data/lib/rex/encoder/xor/dword.rb +1 -2
  32. data/lib/rex/encoder/xor/dword_additive.rb +1 -2
  33. data/lib/rex/encoders/xor_dword.rb +17 -18
  34. data/lib/rex/encoders/xor_dword_additive.rb +35 -36
  35. data/lib/rex/encoding/xor.rb +0 -1
  36. data/lib/rex/encoding/xor/byte.rb +3 -4
  37. data/lib/rex/encoding/xor/dword.rb +3 -4
  38. data/lib/rex/encoding/xor/dword_additive.rb +72 -73
  39. data/lib/rex/encoding/xor/exceptions.rb +2 -3
  40. data/lib/rex/encoding/xor/generic.rb +129 -130
  41. data/lib/rex/encoding/xor/qword.rb +3 -4
  42. data/lib/rex/encoding/xor/word.rb +3 -4
  43. data/lib/rex/exceptions.rb +100 -101
  44. data/lib/rex/exploitation/cmdstager.rb +3 -3
  45. data/lib/rex/exploitation/cmdstager/base.rb +170 -156
  46. data/lib/rex/exploitation/cmdstager/bourne.rb +105 -0
  47. data/lib/rex/exploitation/cmdstager/debug_asm.rb +110 -113
  48. data/lib/rex/exploitation/cmdstager/debug_write.rb +106 -109
  49. data/lib/rex/exploitation/cmdstager/echo.rb +164 -0
  50. data/lib/rex/exploitation/cmdstager/printf.rb +122 -0
  51. data/lib/rex/exploitation/cmdstager/tftp.rb +34 -27
  52. data/lib/rex/exploitation/cmdstager/vbs.rb +95 -98
  53. data/lib/rex/exploitation/egghunter.rb +359 -346
  54. data/lib/rex/exploitation/encryptjs.rb +60 -60
  55. data/lib/rex/exploitation/heaplib.rb +76 -76
  56. data/lib/rex/exploitation/js.rb +6 -0
  57. data/lib/rex/exploitation/js/detect.rb +69 -0
  58. data/lib/rex/exploitation/js/memory.rb +81 -0
  59. data/lib/rex/exploitation/js/network.rb +84 -0
  60. data/lib/rex/exploitation/js/utils.rb +33 -0
  61. data/lib/rex/exploitation/jsobfu.rb +448 -424
  62. data/lib/rex/exploitation/obfuscatejs.rb +301 -301
  63. data/lib/rex/exploitation/omelet.rb +257 -257
  64. data/lib/rex/exploitation/opcodedb.rb +699 -699
  65. data/lib/rex/exploitation/ropdb.rb +189 -0
  66. data/lib/rex/exploitation/seh.rb +68 -68
  67. data/lib/rex/file.rb +96 -49
  68. data/lib/rex/image_source.rb +0 -3
  69. data/lib/rex/image_source/disk.rb +45 -48
  70. data/lib/rex/image_source/image_source.rb +33 -36
  71. data/lib/rex/image_source/memory.rb +17 -20
  72. data/lib/rex/io/bidirectional_pipe.rb +118 -115
  73. data/lib/rex/io/datagram_abstraction.rb +13 -14
  74. data/lib/rex/io/ring_buffer.rb +273 -273
  75. data/lib/rex/io/stream.rb +284 -284
  76. data/lib/rex/io/stream_abstraction.rb +183 -181
  77. data/lib/rex/io/stream_server.rb +193 -193
  78. data/lib/rex/job_container.rb +167 -167
  79. data/lib/rex/logging.rb +0 -1
  80. data/lib/rex/logging/log_dispatcher.rb +113 -113
  81. data/lib/rex/logging/log_sink.rb +17 -17
  82. data/lib/rex/logging/sinks/flatfile.rb +36 -36
  83. data/lib/rex/logging/sinks/stderr.rb +27 -27
  84. data/lib/rex/mac_oui.rb +16572 -16571
  85. data/lib/rex/machparsey.rb +0 -1
  86. data/lib/rex/machparsey/exceptions.rb +0 -1
  87. data/lib/rex/machparsey/mach.rb +160 -161
  88. data/lib/rex/machparsey/machbase.rb +367 -368
  89. data/lib/rex/machscan.rb +0 -1
  90. data/lib/rex/machscan/scanner.rb +175 -176
  91. data/lib/rex/mime/encoding.rb +17 -0
  92. data/lib/rex/mime/header.rb +58 -58
  93. data/lib/rex/mime/message.rb +140 -137
  94. data/lib/rex/mime/part.rb +41 -12
  95. data/lib/rex/nop/opty2.rb +90 -90
  96. data/lib/rex/nop/opty2_tables.rb +273 -273
  97. data/lib/rex/ole.rb +0 -4
  98. data/lib/rex/ole/clsid.rb +26 -30
  99. data/lib/rex/ole/difat.rb +121 -125
  100. data/lib/rex/ole/directory.rb +205 -209
  101. data/lib/rex/ole/direntry.rb +217 -221
  102. data/lib/rex/ole/fat.rb +79 -83
  103. data/lib/rex/ole/header.rb +178 -182
  104. data/lib/rex/ole/minifat.rb +49 -53
  105. data/lib/rex/ole/propset.rb +113 -117
  106. data/lib/rex/ole/samples/create_ole.rb +8 -9
  107. data/lib/rex/ole/samples/dir.rb +10 -11
  108. data/lib/rex/ole/samples/dump_stream.rb +14 -15
  109. data/lib/rex/ole/samples/ole_info.rb +5 -6
  110. data/lib/rex/ole/storage.rb +372 -376
  111. data/lib/rex/ole/stream.rb +33 -37
  112. data/lib/rex/ole/substorage.rb +20 -24
  113. data/lib/rex/ole/util.rb +137 -141
  114. data/lib/rex/parser/acunetix_nokogiri.rb +398 -398
  115. data/lib/rex/parser/apple_backup_manifestdb.rb +116 -116
  116. data/lib/rex/parser/appscan_nokogiri.rb +359 -359
  117. data/lib/rex/parser/arguments.rb +88 -88
  118. data/lib/rex/parser/burp_session_nokogiri.rb +258 -258
  119. data/lib/rex/parser/ci_nokogiri.rb +184 -184
  120. data/lib/rex/parser/foundstone_nokogiri.rb +334 -333
  121. data/lib/rex/parser/fusionvm_nokogiri.rb +94 -94
  122. data/lib/rex/parser/ini.rb +167 -167
  123. data/lib/rex/parser/ip360_aspl_xml.rb +84 -84
  124. data/lib/rex/parser/ip360_xml.rb +77 -77
  125. data/lib/rex/parser/mbsa_nokogiri.rb +224 -224
  126. data/lib/rex/parser/nessus_xml.rb +100 -100
  127. data/lib/rex/parser/netsparker_xml.rb +89 -75
  128. data/lib/rex/parser/nexpose_raw_nokogiri.rb +677 -677
  129. data/lib/rex/parser/nexpose_simple_nokogiri.rb +322 -322
  130. data/lib/rex/parser/nexpose_xml.rb +105 -105
  131. data/lib/rex/parser/nmap_nokogiri.rb +386 -386
  132. data/lib/rex/parser/nmap_xml.rb +116 -116
  133. data/lib/rex/parser/nokogiri_doc_mixin.rb +223 -221
  134. data/lib/rex/parser/openvas_nokogiri.rb +162 -162
  135. data/lib/rex/parser/outpost24_nokogiri.rb +239 -0
  136. data/lib/rex/parser/retina_xml.rb +90 -90
  137. data/lib/rex/parser/unattend.rb +171 -0
  138. data/lib/rex/parser/wapiti_nokogiri.rb +89 -89
  139. data/lib/rex/payloads/win32/common.rb +14 -14
  140. data/lib/rex/payloads/win32/kernel.rb +36 -36
  141. data/lib/rex/payloads/win32/kernel/common.rb +32 -32
  142. data/lib/rex/payloads/win32/kernel/recovery.rb +27 -27
  143. data/lib/rex/payloads/win32/kernel/stager.rb +170 -170
  144. data/lib/rex/peparsey.rb +0 -3
  145. data/lib/rex/peparsey/exceptions.rb +0 -3
  146. data/lib/rex/peparsey/pe.rb +196 -199
  147. data/lib/rex/peparsey/pe_memdump.rb +35 -38
  148. data/lib/rex/peparsey/pebase.rb +1633 -1652
  149. data/lib/rex/peparsey/section.rb +115 -124
  150. data/lib/rex/pescan.rb +0 -3
  151. data/lib/rex/pescan/analyze.rb +351 -351
  152. data/lib/rex/pescan/scanner.rb +182 -182
  153. data/lib/rex/pescan/search.rb +59 -59
  154. data/lib/rex/platforms/windows.rb +37 -37
  155. data/lib/rex/poly.rb +111 -110
  156. data/lib/rex/poly/block.rb +419 -417
  157. data/lib/rex/poly/machine.rb +12 -0
  158. data/lib/rex/poly/machine/machine.rb +829 -0
  159. data/lib/rex/poly/machine/x86.rb +508 -0
  160. data/lib/rex/poly/register.rb +70 -70
  161. data/lib/rex/poly/register/x86.rb +22 -22
  162. data/lib/rex/post.rb +0 -1
  163. data/lib/rex/post/dir.rb +35 -36
  164. data/lib/rex/post/file.rb +140 -141
  165. data/lib/rex/post/file_stat.rb +198 -199
  166. data/lib/rex/post/io.rb +167 -168
  167. data/lib/rex/post/meterpreter.rb +1 -1
  168. data/lib/rex/post/meterpreter/channel.rb +389 -390
  169. data/lib/rex/post/meterpreter/channel_container.rb +33 -34
  170. data/lib/rex/post/meterpreter/channels/pool.rb +129 -130
  171. data/lib/rex/post/meterpreter/channels/pools/file.rb +35 -36
  172. data/lib/rex/post/meterpreter/channels/pools/stream_pool.rb +72 -73
  173. data/lib/rex/post/meterpreter/channels/stream.rb +62 -63
  174. data/lib/rex/post/meterpreter/client.rb +442 -436
  175. data/lib/rex/post/meterpreter/client_core.rb +326 -310
  176. data/lib/rex/post/meterpreter/dependencies.rb +0 -1
  177. data/lib/rex/post/meterpreter/extension.rb +12 -13
  178. data/lib/rex/post/meterpreter/extensions/espia/espia.rb +35 -36
  179. data/lib/rex/post/meterpreter/extensions/extapi/adsi/adsi.rb +71 -0
  180. data/lib/rex/post/meterpreter/extensions/extapi/clipboard/clipboard.rb +169 -0
  181. data/lib/rex/post/meterpreter/extensions/extapi/extapi.rb +45 -0
  182. data/lib/rex/post/meterpreter/extensions/extapi/service/service.rb +104 -0
  183. data/lib/rex/post/meterpreter/extensions/extapi/tlv.rb +77 -0
  184. data/lib/rex/post/meterpreter/extensions/extapi/window/window.rb +56 -0
  185. data/lib/rex/post/meterpreter/extensions/extapi/wmi/wmi.rb +75 -0
  186. data/lib/rex/post/meterpreter/extensions/incognito/incognito.rb +70 -71
  187. data/lib/rex/post/meterpreter/extensions/kiwi/kiwi.rb +361 -0
  188. data/lib/rex/post/meterpreter/extensions/kiwi/tlv.rb +76 -0
  189. data/lib/rex/post/meterpreter/extensions/lanattacks/dhcp/dhcp.rb +78 -0
  190. data/lib/rex/post/meterpreter/extensions/lanattacks/lanattacks.rb +22 -78
  191. data/lib/rex/post/meterpreter/extensions/lanattacks/tftp/tftp.rb +49 -0
  192. data/lib/rex/post/meterpreter/extensions/lanattacks/tlv.rb +4 -4
  193. data/lib/rex/post/meterpreter/extensions/mimikatz/mimikatz.rb +128 -0
  194. data/lib/rex/post/meterpreter/extensions/mimikatz/tlv.rb +16 -0
  195. data/lib/rex/post/meterpreter/extensions/networkpug/networkpug.rb +38 -39
  196. data/lib/rex/post/meterpreter/extensions/networkpug/tlv.rb +1 -1
  197. data/lib/rex/post/meterpreter/extensions/priv/fs.rb +95 -96
  198. data/lib/rex/post/meterpreter/extensions/priv/passwd.rb +39 -40
  199. data/lib/rex/post/meterpreter/extensions/priv/priv.rb +80 -85
  200. data/lib/rex/post/meterpreter/extensions/sniffer/sniffer.rb +94 -95
  201. data/lib/rex/post/meterpreter/extensions/stdapi/constants.rb +207 -147
  202. data/lib/rex/post/meterpreter/extensions/stdapi/fs/dir.rb +258 -259
  203. data/lib/rex/post/meterpreter/extensions/stdapi/fs/file.rb +366 -301
  204. data/lib/rex/post/meterpreter/extensions/stdapi/fs/file_stat.rb +72 -73
  205. data/lib/rex/post/meterpreter/extensions/stdapi/fs/io.rb +24 -25
  206. data/lib/rex/post/meterpreter/extensions/stdapi/net/arp.rb +59 -0
  207. data/lib/rex/post/meterpreter/extensions/stdapi/net/config.rb +227 -149
  208. data/lib/rex/post/meterpreter/extensions/stdapi/net/interface.rb +107 -108
  209. data/lib/rex/post/meterpreter/extensions/stdapi/net/netstat.rb +97 -0
  210. data/lib/rex/post/meterpreter/extensions/stdapi/net/resolve.rb +106 -0
  211. data/lib/rex/post/meterpreter/extensions/stdapi/net/route.rb +41 -42
  212. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket.rb +102 -101
  213. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/tcp_client_channel.rb +151 -152
  214. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/tcp_server_channel.rb +142 -142
  215. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/udp_channel.rb +185 -185
  216. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/api_constants.rb +38118 -38117
  217. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/buffer_item.rb +7 -7
  218. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_advapi32.rb +2086 -2084
  219. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_crypt32.rb +15 -15
  220. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_iphlpapi.rb +80 -80
  221. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_kernel32.rb +3835 -3833
  222. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_netapi32.rb +84 -28
  223. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_ntdll.rb +151 -137
  224. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_shell32.rb +15 -6
  225. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_user32.rb +3155 -3155
  226. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_version.rb +41 -0
  227. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_wlanapi.rb +70 -70
  228. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_wldap32.rb +128 -0
  229. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_ws2_32.rb +596 -596
  230. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll.rb +310 -301
  231. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_function.rb +71 -61
  232. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_helper.rb +100 -100
  233. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_wrapper.rb +14 -14
  234. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/mock_magic.rb +488 -488
  235. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/multicall.rb +273 -264
  236. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/platform_util.rb +5 -5
  237. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/railgun.rb +240 -238
  238. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/tlv.rb +17 -15
  239. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/type/pointer_util.rb +61 -61
  240. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/util.rb +654 -635
  241. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/win_const_manager.rb +49 -49
  242. data/lib/rex/post/meterpreter/extensions/stdapi/stdapi.rb +103 -102
  243. data/lib/rex/post/meterpreter/extensions/stdapi/sys/config.rb +98 -68
  244. data/lib/rex/post/meterpreter/extensions/stdapi/sys/event_log.rb +165 -166
  245. data/lib/rex/post/meterpreter/extensions/stdapi/sys/event_log_subsystem/event_record.rb +16 -17
  246. data/lib/rex/post/meterpreter/extensions/stdapi/sys/power.rb +34 -36
  247. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process.rb +363 -364
  248. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/image.rb +102 -103
  249. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/io.rb +28 -29
  250. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/memory.rb +303 -304
  251. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/thread.rb +113 -114
  252. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry.rb +260 -261
  253. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_key.rb +165 -166
  254. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_value.rb +69 -70
  255. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/remote_registry_key.rb +160 -161
  256. data/lib/rex/post/meterpreter/extensions/stdapi/sys/thread.rb +143 -144
  257. data/lib/rex/post/meterpreter/extensions/stdapi/tlv.rb +29 -12
  258. data/lib/rex/post/meterpreter/extensions/stdapi/ui.rb +230 -231
  259. data/lib/rex/post/meterpreter/extensions/stdapi/webcam/webcam.rb +181 -44
  260. data/lib/rex/post/meterpreter/inbound_packet_handler.rb +12 -13
  261. data/lib/rex/post/meterpreter/object_aliases.rb +56 -57
  262. data/lib/rex/post/meterpreter/packet.rb +591 -592
  263. data/lib/rex/post/meterpreter/packet_dispatcher.rb +506 -496
  264. data/lib/rex/post/meterpreter/packet_parser.rb +72 -73
  265. data/lib/rex/post/meterpreter/packet_response_waiter.rb +56 -57
  266. data/lib/rex/post/meterpreter/ui/console.rb +112 -112
  267. data/lib/rex/post/meterpreter/ui/console/command_dispatcher.rb +53 -53
  268. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/core.rb +911 -854
  269. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/espia.rb +86 -86
  270. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/extapi.rb +65 -0
  271. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/extapi/adsi.rb +198 -0
  272. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/extapi/clipboard.rb +444 -0
  273. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/extapi/service.rb +199 -0
  274. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/extapi/window.rb +118 -0
  275. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/extapi/wmi.rb +108 -0
  276. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/incognito.rb +220 -220
  277. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/kiwi.rb +509 -0
  278. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/lanattacks.rb +60 -0
  279. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/lanattacks/dhcp.rb +254 -0
  280. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/lanattacks/tftp.rb +159 -0
  281. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/mimikatz.rb +182 -0
  282. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/networkpug.rb +173 -173
  283. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv.rb +40 -40
  284. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/elevate.rb +75 -77
  285. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/passwd.rb +30 -30
  286. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/timestomp.rb +105 -105
  287. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/sniffer.rb +182 -182
  288. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi.rb +37 -37
  289. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/fs.rb +504 -482
  290. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/net.rb +401 -330
  291. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/sys.rb +883 -581
  292. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/ui.rb +296 -299
  293. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/webcam.rb +320 -153
  294. data/lib/rex/post/meterpreter/ui/console/interactive_channel.rb +78 -78
  295. data/lib/rex/post/permission.rb +0 -1
  296. data/lib/rex/post/process.rb +39 -40
  297. data/lib/rex/post/thread.rb +41 -42
  298. data/lib/rex/post/ui.rb +35 -36
  299. data/lib/rex/proto/addp.rb +218 -0
  300. data/lib/rex/proto/dcerpc/client.rb +344 -344
  301. data/lib/rex/proto/dcerpc/exceptions.rb +128 -128
  302. data/lib/rex/proto/dcerpc/handle.rb +32 -32
  303. data/lib/rex/proto/dcerpc/ndr.rb +56 -56
  304. data/lib/rex/proto/dcerpc/packet.rb +249 -245
  305. data/lib/rex/proto/dcerpc/response.rb +170 -170
  306. data/lib/rex/proto/dcerpc/uuid.rb +65 -65
  307. data/lib/rex/proto/dcerpc/wdscp.rb +3 -0
  308. data/lib/rex/proto/dcerpc/wdscp/constants.rb +89 -0
  309. data/lib/rex/proto/dcerpc/wdscp/packet.rb +94 -0
  310. data/lib/rex/proto/dhcp.rb +0 -1
  311. data/lib/rex/proto/dhcp/constants.rb +0 -1
  312. data/lib/rex/proto/dhcp/server.rb +303 -304
  313. data/lib/rex/proto/drda/constants.rb +1 -1
  314. data/lib/rex/proto/drda/packet.rb +186 -186
  315. data/lib/rex/proto/drda/utils.rb +104 -104
  316. data/lib/rex/proto/http.rb +1 -0
  317. data/lib/rex/proto/http/client.rb +692 -820
  318. data/lib/rex/proto/http/client_request.rb +472 -0
  319. data/lib/rex/proto/http/handler.rb +25 -25
  320. data/lib/rex/proto/http/handler/erb.rb +104 -104
  321. data/lib/rex/proto/http/handler/proc.rb +37 -37
  322. data/lib/rex/proto/http/header.rb +149 -149
  323. data/lib/rex/proto/http/packet.rb +388 -382
  324. data/lib/rex/proto/http/request.rb +332 -335
  325. data/lib/rex/proto/http/response.rb +132 -72
  326. data/lib/rex/proto/http/server.rb +348 -338
  327. data/lib/rex/proto/iax2/call.rb +310 -310
  328. data/lib/rex/proto/iax2/client.rb +197 -197
  329. data/lib/rex/proto/iax2/codecs/alaw.rb +4 -4
  330. data/lib/rex/proto/iax2/codecs/mulaw.rb +4 -4
  331. data/lib/rex/proto/ipmi.rb +57 -0
  332. data/lib/rex/proto/ipmi/channel_auth_reply.rb +88 -0
  333. data/lib/rex/proto/ipmi/open_session_reply.rb +35 -0
  334. data/lib/rex/proto/ipmi/rakp2.rb +35 -0
  335. data/lib/rex/proto/ipmi/utils.rb +125 -0
  336. data/lib/rex/proto/natpmp.rb +1 -5
  337. data/lib/rex/proto/natpmp/constants.rb +4 -4
  338. data/lib/rex/proto/natpmp/packet.rb +25 -25
  339. data/lib/rex/proto/ntlm/base.rb +271 -271
  340. data/lib/rex/proto/ntlm/constants.rb +61 -61
  341. data/lib/rex/proto/ntlm/crypt.rb +348 -352
  342. data/lib/rex/proto/ntlm/exceptions.rb +3 -3
  343. data/lib/rex/proto/ntlm/message.rb +468 -471
  344. data/lib/rex/proto/ntlm/utils.rb +746 -746
  345. data/lib/rex/proto/pjl.rb +30 -0
  346. data/lib/rex/proto/pjl/client.rb +162 -0
  347. data/lib/rex/proto/proxy/socks4a.rb +440 -440
  348. data/lib/rex/proto/rfb.rb +1 -8
  349. data/lib/rex/proto/rfb/cipher.rb +46 -49
  350. data/lib/rex/proto/rfb/client.rb +179 -182
  351. data/lib/rex/proto/rfb/constants.rb +18 -21
  352. data/lib/rex/proto/smb/client.rb +1954 -1843
  353. data/lib/rex/proto/smb/constants.rb +533 -516
  354. data/lib/rex/proto/smb/crypt.rb +21 -21
  355. data/lib/rex/proto/smb/evasions.rb +43 -43
  356. data/lib/rex/proto/smb/exceptions.rb +791 -791
  357. data/lib/rex/proto/smb/simpleclient.rb +142 -286
  358. data/lib/rex/proto/smb/simpleclient/open_file.rb +106 -0
  359. data/lib/rex/proto/smb/simpleclient/open_pipe.rb +57 -0
  360. data/lib/rex/proto/smb/utils.rb +81 -81
  361. data/lib/rex/proto/sunrpc/client.rb +158 -158
  362. data/lib/rex/proto/tftp.rb +0 -1
  363. data/lib/rex/proto/tftp/client.rb +289 -289
  364. data/lib/rex/proto/tftp/constants.rb +9 -10
  365. data/lib/rex/proto/tftp/server.rb +466 -467
  366. data/lib/rex/random_identifier_generator.rb +176 -0
  367. data/lib/rex/registry.rb +1 -1
  368. data/lib/rex/registry/hive.rb +88 -88
  369. data/lib/rex/registry/lfkey.rb +25 -25
  370. data/lib/rex/registry/nodekey.rb +30 -30
  371. data/lib/rex/registry/regf.rb +10 -10
  372. data/lib/rex/registry/valuekey.rb +43 -43
  373. data/lib/rex/registry/valuelist.rb +13 -13
  374. data/lib/rex/ropbuilder/rop.rb +254 -253
  375. data/lib/rex/script.rb +21 -22
  376. data/lib/rex/script/base.rb +51 -50
  377. data/lib/rex/script/meterpreter.rb +2 -2
  378. data/lib/rex/service.rb +24 -24
  379. data/lib/rex/service_manager.rb +132 -132
  380. data/lib/rex/services/local_relay.rb +398 -398
  381. data/lib/rex/socket.rb +758 -763
  382. data/lib/rex/socket/comm.rb +95 -95
  383. data/lib/rex/socket/comm/local.rb +507 -440
  384. data/lib/rex/socket/ip.rb +118 -118
  385. data/lib/rex/socket/parameters.rb +351 -350
  386. data/lib/rex/socket/range_walker.rb +445 -368
  387. data/lib/rex/socket/ssl_tcp.rb +323 -317
  388. data/lib/rex/socket/ssl_tcp_server.rb +173 -158
  389. data/lib/rex/socket/subnet_walker.rb +48 -48
  390. data/lib/rex/socket/switch_board.rb +259 -259
  391. data/lib/rex/socket/tcp.rb +58 -56
  392. data/lib/rex/socket/tcp_server.rb +42 -42
  393. data/lib/rex/socket/udp.rb +152 -152
  394. data/lib/rex/sslscan/result.rb +200 -0
  395. data/lib/rex/sslscan/scanner.rb +205 -0
  396. data/lib/rex/struct2.rb +0 -1
  397. data/lib/rex/struct2/c_struct.rb +162 -163
  398. data/lib/rex/struct2/c_struct_template.rb +21 -22
  399. data/lib/rex/struct2/constant.rb +6 -7
  400. data/lib/rex/struct2/element.rb +30 -31
  401. data/lib/rex/struct2/generic.rb +60 -61
  402. data/lib/rex/struct2/restraint.rb +40 -41
  403. data/lib/rex/struct2/s_string.rb +60 -61
  404. data/lib/rex/struct2/s_struct.rb +97 -98
  405. data/lib/rex/sync.rb +0 -1
  406. data/lib/rex/sync/event.rb +62 -72
  407. data/lib/rex/sync/read_write_lock.rb +149 -149
  408. data/lib/rex/sync/ref.rb +42 -42
  409. data/lib/rex/sync/thread_safe.rb +59 -59
  410. data/lib/rex/text.rb +1803 -1315
  411. data/lib/rex/thread_factory.rb +25 -25
  412. data/lib/rex/time.rb +44 -44
  413. data/lib/rex/transformer.rb +91 -91
  414. data/lib/rex/ui/interactive.rb +265 -265
  415. data/lib/rex/ui/output.rb +66 -60
  416. data/lib/rex/ui/progress_tracker.rb +79 -79
  417. data/lib/rex/ui/subscriber.rb +144 -134
  418. data/lib/rex/ui/text/color.rb +76 -76
  419. data/lib/rex/ui/text/dispatcher_shell.rb +512 -505
  420. data/lib/rex/ui/text/input.rb +96 -96
  421. data/lib/rex/ui/text/input/buffer.rb +58 -58
  422. data/lib/rex/ui/text/input/readline.rb +114 -114
  423. data/lib/rex/ui/text/input/socket.rb +77 -77
  424. data/lib/rex/ui/text/input/stdio.rb +24 -24
  425. data/lib/rex/ui/text/irb_shell.rb +45 -41
  426. data/lib/rex/ui/text/output.rb +64 -60
  427. data/lib/rex/ui/text/output/buffer.rb +42 -42
  428. data/lib/rex/ui/text/output/buffer/stdout.rb +25 -0
  429. data/lib/rex/ui/text/output/file.rb +24 -24
  430. data/lib/rex/ui/text/output/socket.rb +24 -24
  431. data/lib/rex/ui/text/output/stdio.rb +29 -29
  432. data/lib/rex/ui/text/output/tee.rb +36 -36
  433. data/lib/rex/ui/text/progress_tracker.rb +37 -37
  434. data/lib/rex/ui/text/shell.rb +371 -361
  435. data/lib/rex/ui/text/table.rb +320 -284
  436. data/lib/rex/zip.rb +0 -1
  437. data/lib/rex/zip/archive.rb +115 -94
  438. data/lib/rex/zip/blocks.rb +101 -100
  439. data/lib/rex/zip/entry.rb +108 -99
  440. data/lib/rex/zip/jar.rb +261 -206
  441. data/lib/rex/zip/samples/comment.rb +1 -2
  442. data/lib/rex/zip/samples/mkwar.rb +12 -13
  443. data/lib/rex/zip/samples/mkzip.rb +1 -2
  444. data/lib/rex/zip/samples/recursive.rb +29 -30
  445. metadata +424 -446
  446. data/lib/rex/arch/sparc.rb.ut.rb +0 -19
  447. data/lib/rex/arch/x86.rb.ut.rb +0 -94
  448. data/lib/rex/assembly/nasm.rb.ut.rb +0 -23
  449. data/lib/rex/encoder/ndr.rb.ut.rb +0 -45
  450. data/lib/rex/encoder/xdr.rb.ut.rb +0 -30
  451. data/lib/rex/encoders/xor_dword_additive.rb.ut.rb +0 -13
  452. data/lib/rex/encoding/xor.rb.ts.rb +0 -15
  453. data/lib/rex/encoding/xor/byte.rb.ut.rb +0 -22
  454. data/lib/rex/encoding/xor/dword.rb.ut.rb +0 -16
  455. data/lib/rex/encoding/xor/dword_additive.rb.ut.rb +0 -16
  456. data/lib/rex/encoding/xor/generic.rb.ut.rb +0 -121
  457. data/lib/rex/encoding/xor/word.rb.ut.rb +0 -14
  458. data/lib/rex/exceptions.rb.ut.rb +0 -45
  459. data/lib/rex/exploitation/egghunter.rb.ut.rb +0 -28
  460. data/lib/rex/exploitation/javascriptosdetect.js +0 -1014
  461. data/lib/rex/exploitation/javascriptosdetect.rb +0 -43
  462. data/lib/rex/exploitation/omelet.rb.ut.rb +0 -27
  463. data/lib/rex/exploitation/opcodedb.rb.ut.rb +0 -280
  464. data/lib/rex/exploitation/seh.rb.ut.rb +0 -20
  465. data/lib/rex/file.rb.ut.rb +0 -17
  466. data/lib/rex/io/ring_buffer.rb.ut.rb +0 -135
  467. data/lib/rex/nop/opty2.rb.ut.rb +0 -24
  468. data/lib/rex/parser/arguments.rb.ut.rb +0 -68
  469. data/lib/rex/parser/ini.rb.ut.rb +0 -30
  470. data/lib/rex/post/meterpreter/extensions/stdapi/railgun.rb.ts.rb +0 -18
  471. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/api_constants.rb.ut.rb +0 -39
  472. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/buffer_item.rb.ut.rb +0 -37
  473. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll.rb.ut.rb +0 -52
  474. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_function.rb.ut.rb +0 -43
  475. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_helper.rb.ut.rb +0 -128
  476. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_wrapper.rb.ut.rb +0 -64
  477. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/platform_util.rb.ut.rb +0 -29
  478. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/railgun.rb.ut.rb +0 -155
  479. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/type/pointer_util.rb.ut.rb +0 -128
  480. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/win_const_manager.rb.ut.rb +0 -124
  481. data/lib/rex/proto.rb.ts.rb +0 -9
  482. data/lib/rex/proto/dcerpc.rb.ts.rb +0 -10
  483. data/lib/rex/proto/dcerpc/client.rb.ut.rb +0 -492
  484. data/lib/rex/proto/dcerpc/handle.rb.ut.rb +0 -86
  485. data/lib/rex/proto/dcerpc/ndr.rb.ut.rb +0 -42
  486. data/lib/rex/proto/dcerpc/packet.rb.ut.rb +0 -57
  487. data/lib/rex/proto/dcerpc/response.rb.ut.rb +0 -16
  488. data/lib/rex/proto/dcerpc/uuid.rb.ut.rb +0 -47
  489. data/lib/rex/proto/drda.rb.ts.rb +0 -18
  490. data/lib/rex/proto/drda/constants.rb.ut.rb +0 -24
  491. data/lib/rex/proto/drda/packet.rb.ut.rb +0 -110
  492. data/lib/rex/proto/drda/utils.rb.ut.rb +0 -85
  493. data/lib/rex/proto/http.rb.ts.rb +0 -13
  494. data/lib/rex/proto/http/client.rb.ut.rb +0 -96
  495. data/lib/rex/proto/http/handler/erb.rb.ut.rb +0 -22
  496. data/lib/rex/proto/http/handler/erb.rb.ut.rb.rhtml +0 -1
  497. data/lib/rex/proto/http/handler/proc.rb.ut.rb +0 -25
  498. data/lib/rex/proto/http/header.rb.ut.rb +0 -47
  499. data/lib/rex/proto/http/packet.rb.ut.rb +0 -166
  500. data/lib/rex/proto/http/request.rb.ut.rb +0 -215
  501. data/lib/rex/proto/http/response.rb.ut.rb +0 -150
  502. data/lib/rex/proto/http/server.rb.ut.rb +0 -80
  503. data/lib/rex/proto/ntlm.rb.ut.rb +0 -181
  504. data/lib/rex/proto/rfb.rb.ut.rb +0 -40
  505. data/lib/rex/proto/smb.rb.ts.rb +0 -9
  506. data/lib/rex/proto/smb/client.rb.ut.rb +0 -224
  507. data/lib/rex/proto/smb/constants.rb.ut.rb +0 -19
  508. data/lib/rex/proto/smb/simpleclient.rb.ut.rb +0 -129
  509. data/lib/rex/proto/smb/utils.rb.ut.rb +0 -21
  510. data/lib/rex/proto/tftp/server.rb.ut.rb +0 -29
  511. data/lib/rex/service_manager.rb.ut.rb +0 -33
  512. data/lib/rex/socket.rb.ut.rb +0 -108
  513. data/lib/rex/socket/comm/local.rb.ut.rb +0 -76
  514. data/lib/rex/socket/parameters.rb.ut.rb +0 -52
  515. data/lib/rex/socket/range_walker.rb.ut.rb +0 -56
  516. data/lib/rex/socket/ssl_tcp.rb.ut.rb +0 -40
  517. data/lib/rex/socket/ssl_tcp_server.rb.ut.rb +0 -62
  518. data/lib/rex/socket/subnet_walker.rb.ut.rb +0 -29
  519. data/lib/rex/socket/switch_board.rb.ut.rb +0 -53
  520. data/lib/rex/socket/tcp.rb.ut.rb +0 -65
  521. data/lib/rex/socket/tcp_server.rb.ut.rb +0 -45
  522. data/lib/rex/socket/udp.rb.ut.rb +0 -45
  523. data/lib/rex/test.rb +0 -36
  524. data/lib/rex/text.rb.ut.rb +0 -193
  525. data/lib/rex/transformer.rb.ut.rb +0 -39
  526. data/lib/rex/ui/text/color.rb.ut.rb +0 -19
  527. data/lib/rex/ui/text/progress_tracker.rb.ut.rb +0 -35
  528. data/lib/rex/ui/text/table.rb.ut.rb +0 -56
@@ -41,7 +41,7 @@ SECCHKCD = 0x11a4 # Security Check Code
41
41
  ACCRDBRM = 0x2201 # Access to RDB Completed
42
42
 
43
43
  def self.const_values
44
- self.constants.map {|x| self.const_get x}
44
+ self.constants.map {|x| self.const_get x}
45
45
  end
46
46
 
47
47
  end
@@ -11,72 +11,72 @@ class RespError < Error; end
11
11
  # See:
12
12
  # http://publib.boulder.ibm.com/infocenter/dzichelp/v2r2/index.jsp?topic=/com.ibm.db29.doc.drda/db2z_excsat.htm
13
13
  class MGRLVLLS_PARAM < Struct.new(:length, :codepoint, :payload)
14
- def initialize(args={})
15
- self[:codepoint] = Constants::MGRLVLLS
16
- self[:payload] = "\x14\x03\x00\x0a\x24\x07\x00\x0a" +
17
- "\x14\x74\x00\x05\x24\x0f\x00\x08" +
18
- "\x14\x40\x00\x09\x1c\x08\x04\xb8"
19
- self[:length] = self[:payload].to_s.size+4
20
- end
21
- def to_s
22
- self.to_a.pack("nna*")
23
- end
14
+ def initialize(args={})
15
+ self[:codepoint] = Constants::MGRLVLLS
16
+ self[:payload] = "\x14\x03\x00\x0a\x24\x07\x00\x0a" +
17
+ "\x14\x74\x00\x05\x24\x0f\x00\x08" +
18
+ "\x14\x40\x00\x09\x1c\x08\x04\xb8"
19
+ self[:length] = self[:payload].to_s.size+4
20
+ end
21
+ def to_s
22
+ self.to_a.pack("nna*")
23
+ end
24
24
  end
25
25
 
26
26
  # Currently, only takes a MGRLVLLS param. Extend the struct
27
27
  # when more parameters are defined.
28
28
  class EXCSAT_DDM < Struct.new(:length, :magic, :format, :correlid, :length2,
29
- :codepoint, :mgrlvlls)
30
-
31
- def initialize(args={})
32
- self[:magic] = 0xd0
33
- self[:format] = 0x41
34
- self[:correlid] = 1
35
- self[:codepoint] = Constants::EXCSAT
36
- self[:mgrlvlls] = args[:mgrlvlls] || MGRLVLLS_PARAM.new.to_s
37
- self[:length] = (10 + self[:mgrlvlls].to_s.size)
38
- self[:length2] = self[:length]-6
39
- end
40
-
41
- def to_s
42
- packstr = "nCCnnn"
43
- packstr += "a*" # Pack smarter as more params are added.
44
- self.to_a.pack(packstr)
45
- end
29
+ :codepoint, :mgrlvlls)
30
+
31
+ def initialize(args={})
32
+ self[:magic] = 0xd0
33
+ self[:format] = 0x41
34
+ self[:correlid] = 1
35
+ self[:codepoint] = Constants::EXCSAT
36
+ self[:mgrlvlls] = args[:mgrlvlls] || MGRLVLLS_PARAM.new.to_s
37
+ self[:length] = (10 + self[:mgrlvlls].to_s.size)
38
+ self[:length2] = self[:length]-6
39
+ end
40
+
41
+ def to_s
42
+ packstr = "nCCnnn"
43
+ packstr += "a*" # Pack smarter as more params are added.
44
+ self.to_a.pack(packstr)
45
+ end
46
46
  end
47
47
 
48
48
  # See http://publib.boulder.ibm.com/infocenter/dzichelp/v2r2/index.jsp?topic=/com.ibm.db29.doc.drda/db2z_accsec.htm
49
49
  # for all sorts of info about SECMEC.
50
50
  class SECMEC_PARAM < Struct.new(:length, :codepoint, :payload)
51
- def initialize(args={})
52
- self[:length] = 6
53
- self[:codepoint] = Constants::SECMEC
54
- self[:payload] = 3 # Plaintext username and password.
55
- end
56
- def to_s
57
- self.to_a.pack("nnn")
58
- end
51
+ def initialize(args={})
52
+ self[:length] = 6
53
+ self[:codepoint] = Constants::SECMEC
54
+ self[:payload] = 3 # Plaintext username and password.
55
+ end
56
+ def to_s
57
+ self.to_a.pack("nnn")
58
+ end
59
59
  end
60
60
 
61
61
  # Relational Database name parameter.
62
62
  class RDBNAM_PARAM < Struct.new(:length, :codepoint, :payload)
63
- def initialize(args={})
64
- self[:length] = 22 # Since the database name is padded out.
65
- self[:codepoint] = Constants::RDBNAM
66
- self[:payload] = encode(args[:payload].to_s)
67
- end
63
+ def initialize(args={})
64
+ self[:length] = 22 # Since the database name is padded out.
65
+ self[:codepoint] = Constants::RDBNAM
66
+ self[:payload] = encode(args[:payload].to_s)
67
+ end
68
68
 
69
- def encode(str)
70
- Rex::Text.to_ebcdic([str].pack("A18"))
71
- end
69
+ def encode(str)
70
+ Rex::Text.to_ebcdic([str].pack("A18"))
71
+ end
72
72
 
73
- def payload=(str)
74
- self[:payload] = encode(str.to_s)
75
- end
73
+ def payload=(str)
74
+ self[:payload] = encode(str.to_s)
75
+ end
76
76
 
77
- def to_s
78
- self.to_a.pack("nna18")
79
- end
77
+ def to_s
78
+ self.to_a.pack("nna18")
79
+ end
80
80
 
81
81
  end
82
82
 
@@ -85,166 +85,166 @@ end
85
85
  # also sets the relational database name (RDBNAM), if specified. You need
86
86
  # one to login, but not to probe.
87
87
  class ACCSEC_DDM < Struct.new(:length, :magic, :format, :correlid, :length2,
88
- :codepoint, :secmec, :rdbnam)
89
- def initialize(args={})
90
- self[:magic] = 0xd0
91
- self[:format] = args[:format] || 0x01
92
- self[:correlid] = 2
93
- self[:codepoint] = Constants::ACCSEC
94
- self[:secmec] = SECMEC_PARAM.new.to_s
95
- if args[:dbname] # Include a database name if we're given one.
96
- self[:rdbnam] = RDBNAM_PARAM.new(:payload => args[:dbname]).to_s
97
- end
98
- self[:length] = 10 + self[:secmec].to_s.size + self[:rdbnam].to_s.size
99
- self[:length2] = self[:length]-6
100
- end
101
- def dbname=(str)
102
- self[:rdbnam] = RDBNAM_PARAM.new(:payload => args[:dbname]).to_s
103
- end
104
- def to_s
105
- packstr = "nCCnnna6"
106
- packstr += "a22" if self[:rdbnam]
107
- self.to_a.pack(packstr)
108
- end
88
+ :codepoint, :secmec, :rdbnam)
89
+ def initialize(args={})
90
+ self[:magic] = 0xd0
91
+ self[:format] = args[:format] || 0x01
92
+ self[:correlid] = 2
93
+ self[:codepoint] = Constants::ACCSEC
94
+ self[:secmec] = SECMEC_PARAM.new.to_s
95
+ if args[:dbname] # Include a database name if we're given one.
96
+ self[:rdbnam] = RDBNAM_PARAM.new(:payload => args[:dbname]).to_s
97
+ end
98
+ self[:length] = 10 + self[:secmec].to_s.size + self[:rdbnam].to_s.size
99
+ self[:length2] = self[:length]-6
100
+ end
101
+ def dbname=(str)
102
+ self[:rdbnam] = RDBNAM_PARAM.new(:payload => args[:dbname]).to_s
103
+ end
104
+ def to_s
105
+ packstr = "nCCnnna6"
106
+ packstr += "a22" if self[:rdbnam]
107
+ self.to_a.pack(packstr)
108
+ end
109
109
  end
110
110
 
111
111
  class DDM_PARAM < Struct.new(:length, :codepoint, :payload)
112
112
 
113
- def read(str="")
114
- raise DRDA::Error, "Input isn't a String." if !str.kind_of? String
115
- raise DRDA::RespError, "DDM_PARAM is too short" if str.size < 4
116
- (self[:length], self[:codepoint]) =
117
- str.unpack("nn")
118
- raise DRDA::RespError, "DDM_PARAM Length is too short" if self[:length] < 4
119
- rest = str[4,self[:length]-4] # If it's negative or whatever, it'll end up as "".
120
- self[:payload] = rest.to_s[0,self[:length]-4]
121
- return self
122
- end
123
-
124
- def to_s
125
- self.to_a.pack("nna*")
126
- end
113
+ def read(str="")
114
+ raise DRDA::Error, "Input isn't a String." if !str.kind_of? String
115
+ raise DRDA::RespError, "DDM_PARAM is too short" if str.size < 4
116
+ (self[:length], self[:codepoint]) =
117
+ str.unpack("nn")
118
+ raise DRDA::RespError, "DDM_PARAM Length is too short" if self[:length] < 4
119
+ rest = str[4,self[:length]-4] # If it's negative or whatever, it'll end up as "".
120
+ self[:payload] = rest.to_s[0,self[:length]-4]
121
+ return self
122
+ end
123
+
124
+ def to_s
125
+ self.to_a.pack("nna*")
126
+ end
127
127
 
128
128
  end
129
129
 
130
130
  class BASIC_DDM < Struct.new(:length, :magic, :format, :correlid,
131
- :length2, :codepoint, :payload)
132
- def initialize
133
- self[:payload] = []
134
- end
135
-
136
- def read(str="")
137
- self[:payload].clear
138
- raise DRDA::Error, "Input isn't a String." if !str.kind_of? String
139
- raise DRDA::RespError, "Response is too short." if str.size < 10
140
- (self[:length],self[:magic],self[:format],
141
- self[:correlid],self[:length2],self[:codepoint]) =
142
- str.unpack("nCCnnn")
143
- sanity_check
144
- rest = str[10,self[:length2]-4]
145
- i = 0
146
- while (i < rest.size)
147
- if self[:codepoint] == Constants::SQLCARD # These aren't DDM's.
148
- this_param = rest[i,self[:length]-10]
149
- else
150
- this_param = DDM_PARAM.new.read(rest[i,rest.size])
151
- end
152
- self[:payload] << this_param
153
- i += this_param.to_s.size
154
- end
155
- return self
156
- end
157
-
158
- # Just a quick test.
159
- def sanity_check
160
- if self[:length] < 10
161
- raise DRDA::RespError, "DDM Length is too short."
162
- elsif self[:length2] < 4
163
- raise DRDA::RespError, "DDM Length2 is too short."
164
- elsif self[:length]-6 != self[:length2]
165
- raise DRDA::RespError, "Codepoint: 0x#{self[:codepoint].to_s(16)} DDM Length2 (0x#{self[:length2].to_s(16)}) isn't six less than Length (0x#{self[:length].to_s(16)})"
166
- end
167
- end
168
-
169
- def to_s
170
- self.to_a.pack("nCCnnn") + self[:payload].map {|x| x.to_s}.join
171
- end
131
+ :length2, :codepoint, :payload)
132
+ def initialize
133
+ self[:payload] = []
134
+ end
135
+
136
+ def read(str="")
137
+ self[:payload].clear
138
+ raise DRDA::Error, "Input isn't a String." if !str.kind_of? String
139
+ raise DRDA::RespError, "Response is too short." if str.size < 10
140
+ (self[:length],self[:magic],self[:format],
141
+ self[:correlid],self[:length2],self[:codepoint]) =
142
+ str.unpack("nCCnnn")
143
+ sanity_check
144
+ rest = str[10,self[:length2]-4]
145
+ i = 0
146
+ while (i < rest.size)
147
+ if self[:codepoint] == Constants::SQLCARD # These aren't DDM's.
148
+ this_param = rest[i,self[:length]-10]
149
+ else
150
+ this_param = DDM_PARAM.new.read(rest[i,rest.size])
151
+ end
152
+ self[:payload] << this_param
153
+ i += this_param.to_s.size
154
+ end
155
+ return self
156
+ end
157
+
158
+ # Just a quick test.
159
+ def sanity_check
160
+ if self[:length] < 10
161
+ raise DRDA::RespError, "DDM Length is too short."
162
+ elsif self[:length2] < 4
163
+ raise DRDA::RespError, "DDM Length2 is too short."
164
+ elsif self[:length]-6 != self[:length2]
165
+ raise DRDA::RespError, "Codepoint: 0x#{self[:codepoint].to_s(16)} DDM Length2 (0x#{self[:length2].to_s(16)}) isn't six less than Length (0x#{self[:length].to_s(16)})"
166
+ end
167
+ end
168
+
169
+ def to_s
170
+ self.to_a.pack("nCCnnn") + self[:payload].map {|x| x.to_s}.join
171
+ end
172
172
 
173
173
  end
174
174
 
175
175
  class SERVER_PACKET < Array
176
176
 
177
- def read(str="")
178
- raise DRDA::Error, "Input isn't a String." if !str.kind_of? String
179
- self.clear
180
- i = 0
181
- while(i < str.size)
182
- this_ddm = BASIC_DDM.new.read(str[i,str.size])
183
- self << this_ddm
184
- i += this_ddm.to_s.size
185
- end
186
- return self
187
- end
188
-
189
- def to_s; self.join; end
190
- def sz; self.to_s.size; end
177
+ def read(str="")
178
+ raise DRDA::Error, "Input isn't a String." if !str.kind_of? String
179
+ self.clear
180
+ i = 0
181
+ while(i < str.size)
182
+ this_ddm = BASIC_DDM.new.read(str[i,str.size])
183
+ self << this_ddm
184
+ i += this_ddm.to_s.size
185
+ end
186
+ return self
187
+ end
188
+
189
+ def to_s; self.join; end
190
+ def sz; self.to_s.size; end
191
191
 
192
192
  end
193
193
 
194
194
  class PASSWORD_PARAM < Struct.new(:length, :codepoint, :payload)
195
- def initialize(args={})
196
- self[:codepoint] = Constants::PASSWORD
197
- self[:payload] = Rex::Text.to_ebcdic(args[:payload].to_s)
198
- self[:length] = self[:payload].size + 4
199
- end
200
- def encode(str)
201
- Rex::Text.to_ebcdic(str)
202
- end
203
- def to_s
204
- self.to_a.pack("nna*")
205
- end
195
+ def initialize(args={})
196
+ self[:codepoint] = Constants::PASSWORD
197
+ self[:payload] = Rex::Text.to_ebcdic(args[:payload].to_s)
198
+ self[:length] = self[:payload].size + 4
199
+ end
200
+ def encode(str)
201
+ Rex::Text.to_ebcdic(str)
202
+ end
203
+ def to_s
204
+ self.to_a.pack("nna*")
205
+ end
206
206
  end
207
207
 
208
208
  class USERID_PARAM < Struct.new(:length, :codepoint, :payload)
209
- def initialize(args={})
210
- self[:codepoint] = Constants::USERID
211
- self[:payload] = Rex::Text.to_ebcdic(args[:payload].to_s)
212
- self[:length] = self[:payload].size + 4
213
- end
214
- def encode(str)
215
- Rex::Text.to_ebcdic(str)
216
- end
217
- def to_s
218
- self.to_a.pack("nna*")
219
- end
209
+ def initialize(args={})
210
+ self[:codepoint] = Constants::USERID
211
+ self[:payload] = Rex::Text.to_ebcdic(args[:payload].to_s)
212
+ self[:length] = self[:payload].size + 4
213
+ end
214
+ def encode(str)
215
+ Rex::Text.to_ebcdic(str)
216
+ end
217
+ def to_s
218
+ self.to_a.pack("nna*")
219
+ end
220
220
  end
221
221
 
222
222
  class SECCHK_DDM < Struct.new(:length, :magic, :format, :correlid, :length2,
223
- :codepoint, :secmec, :rdbnam, :password, :userid)
224
- def initialize(args={}) # Takes :dbname, :dbpass, :dbuser
225
- self[:magic] = 0xd0
226
- self[:format] = 0x01
227
- self[:correlid] = 2
228
- self[:codepoint] = Constants::SECCHK
229
- self[:secmec] = SECMEC_PARAM.new.to_s
230
- if args[:dbname] # Include a database name if we're given one.
231
- self[:rdbnam] = RDBNAM_PARAM.new(:payload => args[:dbname]).to_s
232
- end
233
- self[:password] = PASSWORD_PARAM.new(:payload => args[:dbpass]).to_s
234
- self[:userid] = USERID_PARAM.new(:payload => args[:dbuser]).to_s
235
- self[:length] = ( 10 + self[:secmec].to_s.size + self[:rdbnam].to_s.size +
236
- self[:password].to_s.size + self[:userid].to_s.size )
237
- self[:length2] = self[:length]-6
238
- end
239
- def dbname=(str)
240
- self[:rdbnam] = RDBNAM_PARAM.new(:payload => args[:dbname]).to_s
241
- end
242
- def to_s
243
- packstr = "nCCnnna6"
244
- packstr += "a22" if self[:rdbnam]
245
- packstr += "a*a*" # username and password
246
- self.to_a.pack(packstr)
247
- end
223
+ :codepoint, :secmec, :rdbnam, :password, :userid)
224
+ def initialize(args={}) # Takes :dbname, :dbpass, :dbuser
225
+ self[:magic] = 0xd0
226
+ self[:format] = 0x01
227
+ self[:correlid] = 2
228
+ self[:codepoint] = Constants::SECCHK
229
+ self[:secmec] = SECMEC_PARAM.new.to_s
230
+ if args[:dbname] # Include a database name if we're given one.
231
+ self[:rdbnam] = RDBNAM_PARAM.new(:payload => args[:dbname]).to_s
232
+ end
233
+ self[:password] = PASSWORD_PARAM.new(:payload => args[:dbpass]).to_s
234
+ self[:userid] = USERID_PARAM.new(:payload => args[:dbuser]).to_s
235
+ self[:length] = ( 10 + self[:secmec].to_s.size + self[:rdbnam].to_s.size +
236
+ self[:password].to_s.size + self[:userid].to_s.size )
237
+ self[:length2] = self[:length]-6
238
+ end
239
+ def dbname=(str)
240
+ self[:rdbnam] = RDBNAM_PARAM.new(:payload => args[:dbname]).to_s
241
+ end
242
+ def to_s
243
+ packstr = "nCCnnna6"
244
+ packstr += "a22" if self[:rdbnam]
245
+ packstr += "a*a*" # username and password
246
+ self.to_a.pack(packstr)
247
+ end
248
248
  end
249
249
 
250
250
  end
@@ -6,116 +6,116 @@ module Proto
6
6
  module DRDA
7
7
  class Utils
8
8
 
9
- # Creates a packet with EXCSAT_DDM and an ACCSEC_DDM. This will elicit
10
- # a reponse from the target server.
11
- def self.client_probe(dbname=nil)
12
- pkt = [
13
- EXCSAT_DDM.new,
14
- ACCSEC_DDM.new(:dbname => dbname)
15
- ]
16
- pkt.map {|x| x.to_s}.join
17
- end
9
+ # Creates a packet with EXCSAT_DDM and an ACCSEC_DDM. This will elicit
10
+ # a reponse from the target server.
11
+ def self.client_probe(dbname=nil)
12
+ pkt = [
13
+ EXCSAT_DDM.new,
14
+ ACCSEC_DDM.new(:dbname => dbname)
15
+ ]
16
+ pkt.map {|x| x.to_s}.join
17
+ end
18
18
 
19
- # Creates a packet with EXCSAT_DDM and an SECCHK_DDM.
20
- # In order to ever succeed, you do need a successful probe first.
21
- def self.client_auth(args={})
22
- dbname = args[:dbname]
23
- dbuser = args[:dbuser]
24
- dbpass = args[:dbpass]
25
- pkt = [
26
- ACCSEC_DDM.new(:format => 0x41),
27
- SECCHK_DDM.new(:dbname => dbname, :dbuser => dbuser, :dbpass => dbpass)
28
- ]
29
- pkt.map {|x| x.to_s}.join
30
- end
19
+ # Creates a packet with EXCSAT_DDM and an SECCHK_DDM.
20
+ # In order to ever succeed, you do need a successful probe first.
21
+ def self.client_auth(args={})
22
+ dbname = args[:dbname]
23
+ dbuser = args[:dbuser]
24
+ dbpass = args[:dbpass]
25
+ pkt = [
26
+ ACCSEC_DDM.new(:format => 0x41),
27
+ SECCHK_DDM.new(:dbname => dbname, :dbuser => dbuser, :dbpass => dbpass)
28
+ ]
29
+ pkt.map {|x| x.to_s}.join
30
+ end
31
31
 
32
- def self.server_packet_info(obj)
33
- info_hash = {}
34
- return info_hash unless obj.kind_of? Rex::Proto::DRDA::SERVER_PACKET
35
- obj.each do |ddm|
36
- case ddm.codepoint
37
- when Constants::EXCSATRD
38
- info_hash.merge!(_info_excsatrd(ddm))
39
- when Constants::ACCSECRD
40
- info_hash.merge!(_info_accsecrd(ddm))
41
- when Constants::RDBNFNRM
42
- info_hash.merge!(_info_rdbnfnrm(ddm))
43
- when Constants::SECCHKRM
44
- info_hash.merge!(_info_secchkrm(ddm))
45
- else
46
- next
47
- end
48
- end
49
- return info_hash
50
- end
32
+ def self.server_packet_info(obj)
33
+ info_hash = {}
34
+ return info_hash unless obj.kind_of? Rex::Proto::DRDA::SERVER_PACKET
35
+ obj.each do |ddm|
36
+ case ddm.codepoint
37
+ when Constants::EXCSATRD
38
+ info_hash.merge!(_info_excsatrd(ddm))
39
+ when Constants::ACCSECRD
40
+ info_hash.merge!(_info_accsecrd(ddm))
41
+ when Constants::RDBNFNRM
42
+ info_hash.merge!(_info_rdbnfnrm(ddm))
43
+ when Constants::SECCHKRM
44
+ info_hash.merge!(_info_secchkrm(ddm))
45
+ else
46
+ next
47
+ end
48
+ end
49
+ return info_hash
50
+ end
51
51
 
52
- def self._info_excsatrd(ddm)
53
- info_hash = {:excsatrd => true}
54
- ddm.payload.each do |param|
55
- case param.codepoint
56
- when Constants::SRVNAM
57
- info_hash[:instance_name] = Rex::Text.from_ebcdic(param.payload)
58
- when Constants::SRVCLSNM
59
- info_hash[:platform] = Rex::Text.from_ebcdic(param.payload)
60
- when Constants::SRVRLSLV
61
- info_hash[:version] = Rex::Text.from_ebcdic(param.payload)
62
- else
63
- next
64
- end
65
- end
66
- return info_hash
67
- end
52
+ def self._info_excsatrd(ddm)
53
+ info_hash = {:excsatrd => true}
54
+ ddm.payload.each do |param|
55
+ case param.codepoint
56
+ when Constants::SRVNAM
57
+ info_hash[:instance_name] = Rex::Text.from_ebcdic(param.payload)
58
+ when Constants::SRVCLSNM
59
+ info_hash[:platform] = Rex::Text.from_ebcdic(param.payload)
60
+ when Constants::SRVRLSLV
61
+ info_hash[:version] = Rex::Text.from_ebcdic(param.payload)
62
+ else
63
+ next
64
+ end
65
+ end
66
+ return info_hash
67
+ end
68
68
 
69
- def self._info_accsecrd(ddm)
70
- info_hash = {:accsecrd => true}
71
- ddm.payload.each do |param|
72
- case param.codepoint
73
- when Constants::SECMEC
74
- info_hash[:plaintext_auth] = true if param.payload =~ /\x00\x03/
75
- when Constants::SECCHKCD
76
- info_hash[:security_check_code] = param.payload.unpack("C").first
77
- # A little spurious? This is always nonzero when there's no SECCHKRM DDM.
78
- info_hash[:db_login_success] = false unless info_hash[:security_check_code].zero?
79
- else
80
- next
81
- end
82
- end
83
- return info_hash
84
- end
69
+ def self._info_accsecrd(ddm)
70
+ info_hash = {:accsecrd => true}
71
+ ddm.payload.each do |param|
72
+ case param.codepoint
73
+ when Constants::SECMEC
74
+ info_hash[:plaintext_auth] = true if param.payload =~ /\x00\x03/n
75
+ when Constants::SECCHKCD
76
+ info_hash[:security_check_code] = param.payload.unpack("C").first
77
+ # A little spurious? This is always nonzero when there's no SECCHKRM DDM.
78
+ info_hash[:db_login_success] = false unless info_hash[:security_check_code].zero?
79
+ else
80
+ next
81
+ end
82
+ end
83
+ return info_hash
84
+ end
85
85
 
86
- def self._info_rdbnfnrm(ddm)
87
- info_hash = {:rdbnfnrm => true}
88
- info_hash[:database_found] = false
89
- ddm.payload.each do |param|
90
- case param.codepoint
91
- when Constants::RDBNAM
92
- info_hash[:db_name] = Rex::Text.from_ebcdic(param.payload).unpack("A*").first
93
- when Constants::SRVDGN
94
- info_hash[:error_message] = Rex::Text.from_ebcdic(param.payload)
95
- else
96
- next
97
- end
98
- end
99
- return info_hash
100
- end
86
+ def self._info_rdbnfnrm(ddm)
87
+ info_hash = {:rdbnfnrm => true}
88
+ info_hash[:database_found] = false
89
+ ddm.payload.each do |param|
90
+ case param.codepoint
91
+ when Constants::RDBNAM
92
+ info_hash[:db_name] = Rex::Text.from_ebcdic(param.payload).unpack("A*").first
93
+ when Constants::SRVDGN
94
+ info_hash[:error_message] = Rex::Text.from_ebcdic(param.payload)
95
+ else
96
+ next
97
+ end
98
+ end
99
+ return info_hash
100
+ end
101
101
 
102
- def self._info_secchkrm(ddm)
103
- info_hash = {:secchkrm => true}
104
- ddm.payload.each do |param|
105
- case param.codepoint
106
- when Constants::SRVCOD
107
- info_hash[:severity_code] = param.payload.unpack("n").first
108
- when Constants::SECCHKCD
109
- info_hash[:security_check_code] = param.payload.unpack("C").first
110
- else
111
- next
112
- end
113
- end
114
- if info_hash[:serverity].to_i.zero? and info_hash[:security_check_code].to_i.zero?
115
- info_hash[:db_login_success] = true
116
- end
117
- return info_hash
118
- end
102
+ def self._info_secchkrm(ddm)
103
+ info_hash = {:secchkrm => true}
104
+ ddm.payload.each do |param|
105
+ case param.codepoint
106
+ when Constants::SRVCOD
107
+ info_hash[:severity_code] = param.payload.unpack("n").first
108
+ when Constants::SECCHKCD
109
+ info_hash[:security_check_code] = param.payload.unpack("C").first
110
+ else
111
+ next
112
+ end
113
+ end
114
+ if info_hash[:serverity].to_i.zero? and info_hash[:security_check_code].to_i.zero?
115
+ info_hash[:db_login_success] = true
116
+ end
117
+ return info_hash
118
+ end
119
119
 
120
120
  end
121
121