librex 0.0.65 → 0.0.66

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 (482) hide show
  1. data/README.markdown +1 -1
  2. data/lib/rex/arch.rb +1 -0
  3. data/lib/rex/arch/sparc.rb +16 -15
  4. data/lib/rex/arch/sparc.rb.ut.rb +2 -1
  5. data/lib/rex/arch/x86.rb +1 -0
  6. data/lib/rex/arch/x86.rb.ut.rb +2 -1
  7. data/lib/rex/assembly/nasm.rb +1 -0
  8. data/lib/rex/assembly/nasm.rb.ut.rb +2 -1
  9. data/lib/rex/compat.rb +13 -0
  10. data/lib/rex/constants.rb +5 -4
  11. data/lib/rex/elfparsey.rb +3 -2
  12. data/lib/rex/elfparsey/elf.rb +2 -1
  13. data/lib/rex/elfparsey/elfbase.rb +8 -7
  14. data/lib/rex/elfparsey/exceptions.rb +3 -2
  15. data/lib/rex/elfscan.rb +3 -2
  16. data/lib/rex/elfscan/scanner.rb +2 -1
  17. data/lib/rex/elfscan/search.rb +2 -1
  18. data/lib/rex/encoder/alpha2.rb +2 -1
  19. data/lib/rex/encoder/alpha2/alpha_mixed.rb +3 -2
  20. data/lib/rex/encoder/alpha2/alpha_upper.rb +5 -4
  21. data/lib/rex/encoder/alpha2/generic.rb +37 -60
  22. data/lib/rex/encoder/alpha2/unicode_mixed.rb +4 -9
  23. data/lib/rex/encoder/alpha2/unicode_upper.rb +4 -9
  24. data/lib/rex/encoder/ndr.rb +1 -0
  25. data/lib/rex/encoder/ndr.rb.ut.rb +2 -1
  26. data/lib/rex/encoder/nonalpha.rb +1 -0
  27. data/lib/rex/encoder/nonupper.rb +1 -0
  28. data/lib/rex/encoder/xdr.rb +9 -8
  29. data/lib/rex/encoder/xdr.rb.ut.rb +2 -1
  30. data/lib/rex/encoder/xor.rb +1 -0
  31. data/lib/rex/encoder/xor/dword.rb +2 -1
  32. data/lib/rex/encoder/xor/dword_additive.rb +2 -1
  33. data/lib/rex/encoders/xor_dword.rb +1 -0
  34. data/lib/rex/encoders/xor_dword_additive.rb +2 -1
  35. data/lib/rex/encoders/xor_dword_additive.rb.ut.rb +2 -1
  36. data/lib/rex/encoding/xor.rb +2 -1
  37. data/lib/rex/encoding/xor.rb.ts.rb +2 -1
  38. data/lib/rex/encoding/xor/byte.rb +2 -1
  39. data/lib/rex/encoding/xor/byte.rb.ut.rb +2 -1
  40. data/lib/rex/encoding/xor/dword.rb +2 -1
  41. data/lib/rex/encoding/xor/dword.rb.ut.rb +2 -1
  42. data/lib/rex/encoding/xor/dword_additive.rb +1 -0
  43. data/lib/rex/encoding/xor/dword_additive.rb.ut.rb +2 -1
  44. data/lib/rex/encoding/xor/exceptions.rb +1 -0
  45. data/lib/rex/encoding/xor/generic.rb +1 -0
  46. data/lib/rex/encoding/xor/generic.rb.ut.rb +2 -1
  47. data/lib/rex/encoding/xor/qword.rb +2 -1
  48. data/lib/rex/encoding/xor/word.rb +2 -1
  49. data/lib/rex/encoding/xor/word.rb.ut.rb +2 -1
  50. data/lib/rex/exceptions.rb +1 -0
  51. data/lib/rex/exceptions.rb.ut.rb +2 -1
  52. data/lib/rex/exploitation/cmdstager.rb +2 -1
  53. data/lib/rex/exploitation/cmdstager/base.rb +1 -0
  54. data/lib/rex/exploitation/cmdstager/debug_asm.rb +2 -1
  55. data/lib/rex/exploitation/cmdstager/debug_write.rb +2 -1
  56. data/lib/rex/exploitation/cmdstager/tftp.rb +2 -1
  57. data/lib/rex/exploitation/cmdstager/vbs.rb +2 -1
  58. data/lib/rex/exploitation/egghunter.rb +12 -11
  59. data/lib/rex/exploitation/egghunter.rb.ut.rb +2 -1
  60. data/lib/rex/exploitation/encryptjs.rb +1 -0
  61. data/lib/rex/exploitation/heaplib.rb +1 -0
  62. data/lib/rex/exploitation/javascriptosdetect.js +1014 -0
  63. data/lib/rex/exploitation/javascriptosdetect.rb +4 -857
  64. data/lib/rex/exploitation/jsobfu.rb +2 -1
  65. data/lib/rex/exploitation/obfuscatejs.rb +1 -0
  66. data/lib/rex/exploitation/omelet.rb +1 -0
  67. data/lib/rex/exploitation/omelet.rb.ut.rb +1 -0
  68. data/lib/rex/exploitation/opcodedb.rb +12 -11
  69. data/lib/rex/exploitation/opcodedb.rb.ut.rb +2 -1
  70. data/lib/rex/exploitation/seh.rb +3 -2
  71. data/lib/rex/exploitation/seh.rb.ut.rb +2 -1
  72. data/lib/rex/file.rb +4 -3
  73. data/lib/rex/file.rb.ut.rb +2 -1
  74. data/lib/rex/image_source.rb +3 -2
  75. data/lib/rex/image_source/disk.rb +3 -2
  76. data/lib/rex/image_source/image_source.rb +3 -2
  77. data/lib/rex/image_source/memory.rb +3 -2
  78. data/lib/rex/io/bidirectional_pipe.rb +1 -0
  79. data/lib/rex/io/datagram_abstraction.rb +2 -1
  80. data/lib/rex/io/ring_buffer.rb +49 -44
  81. data/lib/rex/io/ring_buffer.rb.ut.rb +4 -3
  82. data/lib/rex/io/stream.rb +1 -0
  83. data/lib/rex/io/stream_abstraction.rb +1 -0
  84. data/lib/rex/io/stream_server.rb +1 -0
  85. data/lib/rex/job_container.rb +1 -0
  86. data/lib/rex/logging.rb +2 -1
  87. data/lib/rex/logging/log_dispatcher.rb +5 -4
  88. data/lib/rex/logging/log_sink.rb +2 -1
  89. data/lib/rex/logging/sinks/flatfile.rb +4 -3
  90. data/lib/rex/logging/sinks/stderr.rb +2 -1
  91. data/lib/rex/machparsey.rb +2 -1
  92. data/lib/rex/machparsey/exceptions.rb +2 -1
  93. data/lib/rex/machparsey/mach.rb +20 -19
  94. data/lib/rex/machparsey/machbase.rb +27 -26
  95. data/lib/rex/machscan.rb +2 -1
  96. data/lib/rex/machscan/scanner.rb +1 -0
  97. data/lib/rex/mime.rb +2 -1
  98. data/lib/rex/mime/header.rb +1 -0
  99. data/lib/rex/mime/message.rb +4 -1
  100. data/lib/rex/mime/part.rb +2 -1
  101. data/lib/rex/nop/opty2.rb +2 -1
  102. data/lib/rex/nop/opty2.rb.ut.rb +2 -1
  103. data/lib/rex/nop/opty2_tables.rb +1 -0
  104. data/lib/rex/ole.rb +3 -2
  105. data/lib/rex/ole/clsid.rb +3 -2
  106. data/lib/rex/ole/difat.rb +3 -2
  107. data/lib/rex/ole/directory.rb +3 -2
  108. data/lib/rex/ole/direntry.rb +3 -2
  109. data/lib/rex/ole/fat.rb +3 -2
  110. data/lib/rex/ole/header.rb +3 -2
  111. data/lib/rex/ole/minifat.rb +3 -2
  112. data/lib/rex/ole/propset.rb +4 -3
  113. data/lib/rex/ole/samples/create_ole.rb +1 -0
  114. data/lib/rex/ole/samples/dir.rb +1 -0
  115. data/lib/rex/ole/samples/dump_stream.rb +1 -0
  116. data/lib/rex/ole/samples/ole_info.rb +1 -0
  117. data/lib/rex/ole/storage.rb +3 -2
  118. data/lib/rex/ole/stream.rb +3 -2
  119. data/lib/rex/ole/substorage.rb +3 -2
  120. data/lib/rex/ole/util.rb +3 -2
  121. data/lib/rex/parser/acunetix_nokogiri.rb +13 -12
  122. data/lib/rex/parser/apple_backup_manifestdb.rb +20 -19
  123. data/lib/rex/parser/appscan_nokogiri.rb +17 -16
  124. data/lib/rex/parser/arguments.rb +2 -1
  125. data/lib/rex/parser/arguments.rb.ut.rb +2 -1
  126. data/lib/rex/parser/burp_session_nokogiri.rb +8 -7
  127. data/lib/rex/parser/ci_nokogiri.rb +4 -3
  128. data/lib/rex/parser/foundstone_nokogiri.rb +18 -17
  129. data/lib/rex/parser/fusionvm_nokogiri.rb +109 -0
  130. data/lib/rex/parser/ini.rb +1 -0
  131. data/lib/rex/parser/ini.rb.ut.rb +2 -1
  132. data/lib/rex/parser/ip360_aspl_xml.rb +1 -0
  133. data/lib/rex/parser/ip360_xml.rb +4 -3
  134. data/lib/rex/parser/mbsa_nokogiri.rb +8 -7
  135. data/lib/rex/parser/nessus_xml.rb +3 -2
  136. data/lib/rex/parser/netsparker_xml.rb +10 -9
  137. data/lib/rex/parser/nexpose_raw_nokogiri.rb +372 -52
  138. data/lib/rex/parser/nexpose_simple_nokogiri.rb +8 -7
  139. data/lib/rex/parser/nexpose_xml.rb +1 -0
  140. data/lib/rex/parser/nmap_nokogiri.rb +63 -33
  141. data/lib/rex/parser/nmap_xml.rb +1 -0
  142. data/lib/rex/parser/nokogiri_doc_mixin.rb +35 -15
  143. data/lib/rex/parser/openvas_nokogiri.rb +172 -0
  144. data/lib/rex/parser/retina_xml.rb +1 -0
  145. data/lib/rex/parser/wapiti_nokogiri.rb +105 -0
  146. data/lib/rex/payloads.rb +2 -1
  147. data/lib/rex/payloads/win32.rb +2 -1
  148. data/lib/rex/payloads/win32/common.rb +2 -1
  149. data/lib/rex/payloads/win32/kernel.rb +2 -1
  150. data/lib/rex/payloads/win32/kernel/common.rb +4 -3
  151. data/lib/rex/payloads/win32/kernel/migration.rb +2 -1
  152. data/lib/rex/payloads/win32/kernel/recovery.rb +2 -1
  153. data/lib/rex/payloads/win32/kernel/stager.rb +21 -20
  154. data/lib/rex/peparsey.rb +3 -2
  155. data/lib/rex/peparsey/exceptions.rb +2 -1
  156. data/lib/rex/peparsey/pe.rb +3 -2
  157. data/lib/rex/peparsey/pe_memdump.rb +2 -1
  158. data/lib/rex/peparsey/pebase.rb +2 -1
  159. data/lib/rex/peparsey/section.rb +2 -1
  160. data/lib/rex/pescan.rb +3 -2
  161. data/lib/rex/pescan/analyze.rb +1 -0
  162. data/lib/rex/pescan/scanner.rb +1 -0
  163. data/lib/rex/pescan/search.rb +1 -0
  164. data/lib/rex/platforms.rb +2 -1
  165. data/lib/rex/platforms/windows.rb +2 -1
  166. data/lib/rex/poly.rb +2 -1
  167. data/lib/rex/poly/block.rb +16 -15
  168. data/lib/rex/poly/register.rb +2 -1
  169. data/lib/rex/poly/register/x86.rb +2 -1
  170. data/lib/rex/post.rb +2 -2
  171. data/lib/rex/post/dir.rb +2 -1
  172. data/lib/rex/post/file.rb +1 -0
  173. data/lib/rex/post/file_stat.rb +1 -0
  174. data/lib/rex/post/io.rb +2 -1
  175. data/lib/rex/post/meterpreter.rb +2 -1
  176. data/lib/rex/post/meterpreter/channel.rb +1 -0
  177. data/lib/rex/post/meterpreter/channel_container.rb +2 -1
  178. data/lib/rex/post/meterpreter/channels/pool.rb +1 -0
  179. data/lib/rex/post/meterpreter/channels/pools/file.rb +1 -0
  180. data/lib/rex/post/meterpreter/channels/pools/stream_pool.rb +3 -2
  181. data/lib/rex/post/meterpreter/channels/stream.rb +1 -0
  182. data/lib/rex/post/meterpreter/client.rb +23 -1
  183. data/lib/rex/post/meterpreter/client_core.rb +10 -5
  184. data/lib/rex/post/meterpreter/dependencies.rb +2 -1
  185. data/lib/rex/post/meterpreter/extension.rb +2 -1
  186. data/lib/rex/post/meterpreter/extensions/espia/espia.rb +7 -6
  187. data/lib/rex/post/meterpreter/extensions/espia/tlv.rb +2 -1
  188. data/lib/rex/post/meterpreter/extensions/incognito/incognito.rb +5 -4
  189. data/lib/rex/post/meterpreter/extensions/incognito/tlv.rb +2 -1
  190. data/lib/rex/post/meterpreter/extensions/lanattacks/lanattacks.rb +1 -0
  191. data/lib/rex/post/meterpreter/extensions/lanattacks/tlv.rb +1 -0
  192. data/lib/rex/post/meterpreter/extensions/networkpug/networkpug.rb +7 -6
  193. data/lib/rex/post/meterpreter/extensions/networkpug/tlv.rb +1 -0
  194. data/lib/rex/post/meterpreter/extensions/priv/fs.rb +2 -1
  195. data/lib/rex/post/meterpreter/extensions/priv/passwd.rb +2 -1
  196. data/lib/rex/post/meterpreter/extensions/priv/priv.rb +1 -0
  197. data/lib/rex/post/meterpreter/extensions/priv/tlv.rb +2 -1
  198. data/lib/rex/post/meterpreter/extensions/sniffer/sniffer.rb +28 -11
  199. data/lib/rex/post/meterpreter/extensions/sniffer/tlv.rb +1 -0
  200. data/lib/rex/post/meterpreter/extensions/stdapi/constants.rb +6 -5
  201. data/lib/rex/post/meterpreter/extensions/stdapi/fs/dir.rb +1 -0
  202. data/lib/rex/post/meterpreter/extensions/stdapi/fs/file.rb +3 -2
  203. data/lib/rex/post/meterpreter/extensions/stdapi/fs/file_stat.rb +1 -0
  204. data/lib/rex/post/meterpreter/extensions/stdapi/fs/io.rb +2 -1
  205. data/lib/rex/post/meterpreter/extensions/stdapi/net/config.rb +39 -5
  206. data/lib/rex/post/meterpreter/extensions/stdapi/net/interface.rb +75 -18
  207. data/lib/rex/post/meterpreter/extensions/stdapi/net/route.rb +18 -6
  208. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket.rb +1 -0
  209. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/tcp_client_channel.rb +1 -0
  210. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/tcp_server_channel.rb +1 -0
  211. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/udp_channel.rb +1 -0
  212. data/lib/rex/post/meterpreter/extensions/stdapi/railgun.rb.ts.rb +4 -1
  213. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/api_constants.rb +1 -0
  214. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/api_constants.rb.ut.rb +1 -0
  215. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/buffer_item.rb +1 -0
  216. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/buffer_item.rb.ut.rb +1 -0
  217. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_advapi32.rb +1 -0
  218. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_crypt32.rb +1 -0
  219. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_iphlpapi.rb +1 -0
  220. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_kernel32.rb +1 -0
  221. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_netapi32.rb +12 -0
  222. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_ntdll.rb +1 -0
  223. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_shell32.rb +1 -0
  224. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_user32.rb +1 -0
  225. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_wlanapi.rb +1 -0
  226. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_ws2_32.rb +7 -0
  227. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll.rb +1 -0
  228. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll.rb.ut.rb +1 -0
  229. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_function.rb +1 -0
  230. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_function.rb.ut.rb +1 -0
  231. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_helper.rb +1 -0
  232. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_helper.rb.ut.rb +1 -0
  233. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_wrapper.rb +1 -0
  234. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_wrapper.rb.ut.rb +1 -0
  235. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/mock_magic.rb +1 -0
  236. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/multicall.rb +1 -0
  237. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/platform_util.rb +23 -0
  238. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/platform_util.rb.ut.rb +29 -0
  239. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/railgun.rb +10 -5
  240. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/railgun.rb.ut.rb +9 -0
  241. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/tlv.rb +1 -0
  242. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/type/pointer_util.rb +106 -0
  243. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/type/pointer_util.rb.ut.rb +128 -0
  244. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/util.rb +1 -0
  245. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/win_const_manager.rb +27 -6
  246. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/win_const_manager.rb.ut.rb +21 -0
  247. data/lib/rex/post/meterpreter/extensions/stdapi/stdapi.rb +1 -0
  248. data/lib/rex/post/meterpreter/extensions/stdapi/sys/config.rb +1 -0
  249. data/lib/rex/post/meterpreter/extensions/stdapi/sys/event_log.rb +1 -0
  250. data/lib/rex/post/meterpreter/extensions/stdapi/sys/event_log_subsystem/event_record.rb +1 -0
  251. data/lib/rex/post/meterpreter/extensions/stdapi/sys/power.rb +2 -1
  252. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process.rb +43 -4
  253. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/image.rb +1 -0
  254. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/io.rb +2 -1
  255. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/memory.rb +1 -0
  256. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/thread.rb +1 -0
  257. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry.rb +1 -0
  258. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_key.rb +1 -0
  259. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_value.rb +1 -0
  260. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/remote_registry_key.rb +1 -0
  261. data/lib/rex/post/meterpreter/extensions/stdapi/sys/thread.rb +1 -0
  262. data/lib/rex/post/meterpreter/extensions/stdapi/tlv.rb +7 -0
  263. data/lib/rex/post/meterpreter/extensions/stdapi/ui.rb +14 -13
  264. data/lib/rex/post/meterpreter/extensions/stdapi/webcam/webcam.rb +1 -0
  265. data/lib/rex/post/meterpreter/inbound_packet_handler.rb +2 -1
  266. data/lib/rex/post/meterpreter/object_aliases.rb +6 -5
  267. data/lib/rex/post/meterpreter/packet.rb +26 -6
  268. data/lib/rex/post/meterpreter/packet_dispatcher.rb +1 -0
  269. data/lib/rex/post/meterpreter/packet_parser.rb +1 -0
  270. data/lib/rex/post/meterpreter/packet_response_waiter.rb +1 -0
  271. data/lib/rex/post/meterpreter/ui/console.rb +1 -0
  272. data/lib/rex/post/meterpreter/ui/console/command_dispatcher.rb +1 -0
  273. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/core.rb +103 -28
  274. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/espia.rb +1 -0
  275. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/incognito.rb +1 -0
  276. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/networkpug.rb +1 -0
  277. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv.rb +3 -2
  278. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/elevate.rb +12 -11
  279. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/passwd.rb +2 -1
  280. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/timestomp.rb +2 -1
  281. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/sniffer.rb +53 -36
  282. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi.rb +3 -2
  283. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/fs.rb +87 -44
  284. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/net.rb +80 -18
  285. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/sys.rb +77 -48
  286. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/ui.rb +72 -41
  287. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/webcam.rb +24 -5
  288. data/lib/rex/post/meterpreter/ui/console/interactive_channel.rb +2 -1
  289. data/lib/rex/post/permission.rb +2 -1
  290. data/lib/rex/post/process.rb +2 -1
  291. data/lib/rex/post/thread.rb +2 -1
  292. data/lib/rex/post/ui.rb +2 -1
  293. data/lib/rex/proto.rb +1 -0
  294. data/lib/rex/proto.rb.ts.rb +2 -1
  295. data/lib/rex/proto/dcerpc.rb +2 -1
  296. data/lib/rex/proto/dcerpc.rb.ts.rb +2 -1
  297. data/lib/rex/proto/dcerpc/client.rb +1 -0
  298. data/lib/rex/proto/dcerpc/client.rb.ut.rb +1 -0
  299. data/lib/rex/proto/dcerpc/exceptions.rb +2 -1
  300. data/lib/rex/proto/dcerpc/handle.rb +1 -0
  301. data/lib/rex/proto/dcerpc/handle.rb.ut.rb +2 -1
  302. data/lib/rex/proto/dcerpc/ndr.rb +2 -1
  303. data/lib/rex/proto/dcerpc/ndr.rb.ut.rb +2 -1
  304. data/lib/rex/proto/dcerpc/packet.rb +52 -45
  305. data/lib/rex/proto/dcerpc/packet.rb.ut.rb +12 -11
  306. data/lib/rex/proto/dcerpc/response.rb +1 -0
  307. data/lib/rex/proto/dcerpc/response.rb.ut.rb +2 -1
  308. data/lib/rex/proto/dcerpc/uuid.rb +13 -12
  309. data/lib/rex/proto/dcerpc/uuid.rb.ut.rb +2 -1
  310. data/lib/rex/proto/dhcp.rb +2 -1
  311. data/lib/rex/proto/dhcp/constants.rb +2 -1
  312. data/lib/rex/proto/dhcp/server.rb +4 -3
  313. data/lib/rex/proto/drda.rb +1 -0
  314. data/lib/rex/proto/drda.rb.ts.rb +1 -0
  315. data/lib/rex/proto/drda/constants.rb +1 -0
  316. data/lib/rex/proto/drda/constants.rb.ut.rb +1 -0
  317. data/lib/rex/proto/drda/packet.rb +11 -10
  318. data/lib/rex/proto/drda/packet.rb.ut.rb +5 -4
  319. data/lib/rex/proto/drda/utils.rb +4 -3
  320. data/lib/rex/proto/drda/utils.rb.ut.rb +3 -2
  321. data/lib/rex/proto/http.rb +2 -1
  322. data/lib/rex/proto/http.rb.ts.rb +2 -1
  323. data/lib/rex/proto/http/client.rb +29 -5
  324. data/lib/rex/proto/http/client.rb.ut.rb +1 -0
  325. data/lib/rex/proto/http/handler.rb +2 -1
  326. data/lib/rex/proto/http/handler/erb.rb +5 -4
  327. data/lib/rex/proto/http/handler/erb.rb.ut.rb +2 -1
  328. data/lib/rex/proto/http/handler/proc.rb +1 -0
  329. data/lib/rex/proto/http/handler/proc.rb.ut.rb +2 -1
  330. data/lib/rex/proto/http/header.rb +3 -3
  331. data/lib/rex/proto/http/header.rb.ut.rb +2 -1
  332. data/lib/rex/proto/http/packet.rb +1 -0
  333. data/lib/rex/proto/http/packet.rb.ut.rb +15 -14
  334. data/lib/rex/proto/http/request.rb +23 -22
  335. data/lib/rex/proto/http/request.rb.ut.rb +2 -1
  336. data/lib/rex/proto/http/response.rb +6 -5
  337. data/lib/rex/proto/http/response.rb.ut.rb +7 -6
  338. data/lib/rex/proto/http/server.rb +1 -0
  339. data/lib/rex/proto/http/server.rb.ut.rb +6 -5
  340. data/lib/rex/proto/iax2.rb +1 -0
  341. data/lib/rex/proto/iax2/call.rb +48 -47
  342. data/lib/rex/proto/iax2/client.rb +23 -22
  343. data/lib/rex/proto/iax2/codecs.rb +1 -0
  344. data/lib/rex/proto/iax2/codecs/alaw.rb +1 -0
  345. data/lib/rex/proto/iax2/codecs/g711.rb +4 -3
  346. data/lib/rex/proto/iax2/codecs/mulaw.rb +1 -0
  347. data/lib/rex/proto/iax2/constants.rb +1 -0
  348. data/lib/rex/proto/natpmp.rb +11 -0
  349. data/lib/rex/proto/natpmp/constants.rb +19 -0
  350. data/lib/rex/proto/natpmp/packet.rb +45 -0
  351. data/lib/rex/proto/ntlm.rb +1 -0
  352. data/lib/rex/proto/ntlm.rb.ut.rb +1 -0
  353. data/lib/rex/proto/ntlm/base.rb +38 -37
  354. data/lib/rex/proto/ntlm/constants.rb +1 -0
  355. data/lib/rex/proto/ntlm/crypt.rb +45 -44
  356. data/lib/rex/proto/ntlm/exceptions.rb +1 -0
  357. data/lib/rex/proto/ntlm/message.rb +30 -29
  358. data/lib/rex/proto/ntlm/utils.rb +116 -115
  359. data/lib/rex/proto/proxy/socks4a.rb +1 -0
  360. data/lib/rex/proto/rfb.rb +1 -0
  361. data/lib/rex/proto/rfb.rb.ut.rb +1 -0
  362. data/lib/rex/proto/rfb/cipher.rb +1 -0
  363. data/lib/rex/proto/rfb/client.rb +1 -0
  364. data/lib/rex/proto/rfb/constants.rb +1 -0
  365. data/lib/rex/proto/smb.rb +2 -1
  366. data/lib/rex/proto/smb.rb.ts.rb +2 -1
  367. data/lib/rex/proto/smb/client.rb +23 -22
  368. data/lib/rex/proto/smb/client.rb.ut.rb +1 -0
  369. data/lib/rex/proto/smb/constants.rb +1 -0
  370. data/lib/rex/proto/smb/constants.rb.ut.rb +2 -1
  371. data/lib/rex/proto/smb/crypt.rb +3 -2
  372. data/lib/rex/proto/smb/evasions.rb +1 -0
  373. data/lib/rex/proto/smb/exceptions.rb +6 -5
  374. data/lib/rex/proto/smb/simpleclient.rb +1 -0
  375. data/lib/rex/proto/smb/simpleclient.rb.ut.rb +1 -0
  376. data/lib/rex/proto/smb/utils.rb +1 -0
  377. data/lib/rex/proto/smb/utils.rb.ut.rb +2 -1
  378. data/lib/rex/proto/sunrpc.rb +1 -0
  379. data/lib/rex/proto/sunrpc/client.rb +1 -0
  380. data/lib/rex/proto/tftp.rb +3 -1
  381. data/lib/rex/proto/tftp/client.rb +344 -0
  382. data/lib/rex/proto/tftp/constants.rb +2 -1
  383. data/lib/rex/proto/tftp/server.rb +2 -1
  384. data/lib/rex/proto/tftp/server.rb.ut.rb +3 -2
  385. data/lib/rex/registry.rb +14 -0
  386. data/lib/rex/registry/hive.rb +132 -0
  387. data/lib/rex/registry/lfkey.rb +51 -0
  388. data/lib/rex/registry/nodekey.rb +54 -0
  389. data/lib/rex/registry/regf.rb +25 -0
  390. data/lib/rex/registry/valuekey.rb +67 -0
  391. data/lib/rex/registry/valuelist.rb +29 -0
  392. data/lib/rex/ropbuilder.rb +2 -1
  393. data/lib/rex/ropbuilder/rop.rb +3 -2
  394. data/lib/rex/script.rb +1 -0
  395. data/lib/rex/script/base.rb +1 -0
  396. data/lib/rex/script/meterpreter.rb +1 -0
  397. data/lib/rex/script/shell.rb +1 -0
  398. data/lib/rex/service.rb +2 -1
  399. data/lib/rex/service_manager.rb +6 -5
  400. data/lib/rex/service_manager.rb.ut.rb +2 -1
  401. data/lib/rex/services/local_relay.rb +1 -0
  402. data/lib/rex/socket.rb +72 -36
  403. data/lib/rex/socket.rb.ut.rb +1 -0
  404. data/lib/rex/socket/comm.rb +1 -0
  405. data/lib/rex/socket/comm/local.rb +60 -13
  406. data/lib/rex/socket/comm/local.rb.ut.rb +2 -1
  407. data/lib/rex/socket/ip.rb +1 -0
  408. data/lib/rex/socket/parameters.rb +15 -14
  409. data/lib/rex/socket/parameters.rb.ut.rb +2 -1
  410. data/lib/rex/socket/range_walker.rb +71 -26
  411. data/lib/rex/socket/range_walker.rb.ut.rb +2 -1
  412. data/lib/rex/socket/ssl_tcp.rb +1 -0
  413. data/lib/rex/socket/ssl_tcp.rb.ut.rb +2 -1
  414. data/lib/rex/socket/ssl_tcp_server.rb +1 -0
  415. data/lib/rex/socket/ssl_tcp_server.rb.ut.rb +1 -0
  416. data/lib/rex/socket/subnet_walker.rb +1 -0
  417. data/lib/rex/socket/subnet_walker.rb.ut.rb +2 -1
  418. data/lib/rex/socket/switch_board.rb +1 -0
  419. data/lib/rex/socket/switch_board.rb.ut.rb +2 -1
  420. data/lib/rex/socket/tcp.rb +4 -3
  421. data/lib/rex/socket/tcp.rb.ut.rb +2 -1
  422. data/lib/rex/socket/tcp_server.rb +1 -0
  423. data/lib/rex/socket/tcp_server.rb.ut.rb +2 -1
  424. data/lib/rex/socket/udp.rb +2 -1
  425. data/lib/rex/socket/udp.rb.ut.rb +2 -1
  426. data/lib/rex/struct2.rb +2 -1
  427. data/lib/rex/struct2/c_struct.rb +2 -1
  428. data/lib/rex/struct2/c_struct_template.rb +2 -1
  429. data/lib/rex/struct2/constant.rb +2 -1
  430. data/lib/rex/struct2/element.rb +2 -1
  431. data/lib/rex/struct2/generic.rb +1 -0
  432. data/lib/rex/struct2/restraint.rb +2 -1
  433. data/lib/rex/struct2/s_string.rb +1 -0
  434. data/lib/rex/struct2/s_struct.rb +1 -0
  435. data/lib/rex/sync.rb +2 -1
  436. data/lib/rex/sync/event.rb +1 -0
  437. data/lib/rex/sync/read_write_lock.rb +1 -0
  438. data/lib/rex/sync/ref.rb +2 -1
  439. data/lib/rex/sync/thread_safe.rb +2 -1
  440. data/lib/rex/test.rb +2 -1
  441. data/lib/rex/text.rb +136 -19
  442. data/lib/rex/text.rb.ut.rb +1 -0
  443. data/lib/rex/thread_factory.rb +5 -4
  444. data/lib/rex/time.rb +2 -1
  445. data/lib/rex/transformer.rb +1 -0
  446. data/lib/rex/transformer.rb.ut.rb +2 -1
  447. data/lib/rex/ui.rb +2 -1
  448. data/lib/rex/ui/interactive.rb +10 -9
  449. data/lib/rex/ui/output.rb +1 -0
  450. data/lib/rex/ui/output/none.rb +2 -1
  451. data/lib/rex/ui/progress_tracker.rb +2 -1
  452. data/lib/rex/ui/subscriber.rb +9 -8
  453. data/lib/rex/ui/text/color.rb +1 -0
  454. data/lib/rex/ui/text/color.rb.ut.rb +1 -0
  455. data/lib/rex/ui/text/dispatcher_shell.rb +63 -23
  456. data/lib/rex/ui/text/input.rb +1 -0
  457. data/lib/rex/ui/text/input/buffer.rb +7 -6
  458. data/lib/rex/ui/text/input/readline.rb +14 -13
  459. data/lib/rex/ui/text/input/socket.rb +1 -0
  460. data/lib/rex/ui/text/input/stdio.rb +2 -1
  461. data/lib/rex/ui/text/irb_shell.rb +1 -0
  462. data/lib/rex/ui/text/output.rb +1 -0
  463. data/lib/rex/ui/text/output/buffer.rb +1 -0
  464. data/lib/rex/ui/text/output/file.rb +1 -0
  465. data/lib/rex/ui/text/output/socket.rb +1 -0
  466. data/lib/rex/ui/text/output/stdio.rb +1 -0
  467. data/lib/rex/ui/text/output/tee.rb +1 -0
  468. data/lib/rex/ui/text/progress_tracker.rb +2 -1
  469. data/lib/rex/ui/text/progress_tracker.rb.ut.rb +2 -1
  470. data/lib/rex/ui/text/shell.rb +1 -0
  471. data/lib/rex/ui/text/table.rb +20 -14
  472. data/lib/rex/ui/text/table.rb.ut.rb +3 -2
  473. data/lib/rex/zip.rb +1 -0
  474. data/lib/rex/zip/archive.rb +2 -1
  475. data/lib/rex/zip/blocks.rb +3 -2
  476. data/lib/rex/zip/entry.rb +6 -7
  477. data/lib/rex/zip/jar.rb +4 -3
  478. data/lib/rex/zip/samples/comment.rb +1 -0
  479. data/lib/rex/zip/samples/mkwar.rb +1 -0
  480. data/lib/rex/zip/samples/mkzip.rb +1 -0
  481. data/lib/rex/zip/samples/recursive.rb +1 -0
  482. metadata +433 -435
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # -*- coding: binary -*-
2
3
 
3
4
  $:.unshift(File.join(File.dirname(__FILE__), '..', '..', '..'))
4
5
 
@@ -10,7 +11,7 @@ class Rex::Proto::DCERPC::Packet::UnitTest < Test::Unit::TestCase
10
11
  Klass = Rex::Proto::DCERPC::Packet
11
12
 
12
13
  def test_parse
13
-
14
+
14
15
  actual = Klass.make_bind('367abb81-9844-35f1-ad32-98f038001003', '2.0')
15
16
  expected = ["\005\000\v\003\020\000\000\000H\000\000\000\000\000\000\000\320\026\320\026\000\000\000\000\001\000\000\000\000\000\001\000\201\273z6D\230\3615\2552\230\3608\000\020\003\002\000\000\000\004]\210\212\353\034\311\021\237\350\010\000+\020H`\002\000\000\000", 0]
16
17
  assert_equal(expected, actual, 'bind')
@@ -23,34 +24,34 @@ class Rex::Proto::DCERPC::Packet::UnitTest < Test::Unit::TestCase
23
24
  actual = Klass.make_alter_context('367abb81-9844-35f1-ad32-98f038001003', '2.0')
24
25
  expected = "\005\000\016\003\020\000\000\000H\000\000\000\000\000\000\000\320\026\320\026\000\000\000\000\001\000\000\000\000\000\001\000\201\273z6D\230\3615\2552\230\3608\000\020\003\002\000\000\000\004]\210\212\353\034\311\021\237\350\010\000+\020H`\002\000\000\000"
25
26
  assert_equal(expected, actual, 'alter context')
26
-
27
+
27
28
  actual = Klass.make_request(1337, '', 1024, 7331)
28
29
  expected = ["\005\000\000\003\020\000\000\000\030\000\000\000\000\000\000\000\000\000\000\000\243\0349\005"]
29
30
  assert_equal(expected, actual, 'make_request with no stub')
30
-
31
+
31
32
  actual = Klass.make_request(1337, 'ABCD', 1024, 7331)
32
33
  expected = ["\005\000\000\003\020\000\000\000\034\000\000\000\000\000\000\000\004\000\000\000\243\0349\005ABCD"]
33
34
  assert_equal(expected, actual, 'make_request with stub')
34
-
35
+
35
36
  actual = Klass.make_request(1337, 'ABCD', 3, 7331)
36
37
  expected = ["\005\000\000\001\020\000\000\000\e\000\000\000\000\000\000\000\003\000\000\000\243\0349\005ABC", "\005\000\000\002\020\000\000\000\031\000\000\000\000\000\000\000\001\000\000\000\243\0349\005D"]
37
38
  assert_equal(expected, actual, 'make_request with 2 frags')
38
-
39
- actual = Klass.make_request(1337, 'ABCD', 1, 7331)
39
+
40
+ actual = Klass.make_request(1337, 'ABCD', 1, 7331)
40
41
  expected = ["\005\000\000\001\020\000\000\000\031\000\000\000\000\000\000\000\001\000\000\000\243\0349\005A", "\005\000\000\000\020\000\000\000\031\000\000\000\000\000\000\000\001\000\000\000\243\0349\005B", "\005\000\000\000\020\000\000\000\031\000\000\000\000\000\000\000\001\000\000\000\243\0349\005C", "\005\000\000\002\020\000\000\000\031\000\000\000\000\000\000\000\001\000\000\000\243\0349\005D"]
41
42
  assert_equal(expected, actual, 'make_request with 4 frags')
42
-
43
-
43
+
44
+
44
45
  actual = Klass.make_request(1337, '', 1024, 7331, '367abb81-9844-35f1-ad32-98f038001003')
45
46
  expected = ["\005\000\000\x83\020\000\000\000\030\000\000\000\000\000\000\000\000\000\000\000\243\0349\005\201\273z6D\230\3615\2552\230\3608\000\020\003"]
46
47
  assert_equal(expected, actual, 'make_request with no stub, with object_id')
47
-
48
+
48
49
  actual = Klass.make_request(1337, 'ABCD', 1024, 7331, '367abb81-9844-35f1-ad32-98f038001003')
49
50
  expected = ["\005\000\000\x83\020\000\000\000\034\000\000\000\000\000\000\000\004\000\000\000\243\0349\005\201\273z6D\230\3615\2552\230\3608\000\020\003ABCD"]
50
51
  assert_equal(expected, actual, 'make_request with stub, with object_id')
51
-
52
+
52
53
  actual = Klass.make_request(1337, 'ABCD', 1, 7331, '367abb81-9844-35f1-ad32-98f038001003')
53
54
  expected = ["\005\000\000\x81\020\000\000\000\031\000\000\000\000\000\000\000\001\000\000\000\243\0349\005\201\273z6D\230\3615\2552\230\3608\000\020\003A", "\005\000\000\x80\020\000\000\000\031\000\000\000\000\000\000\000\001\000\000\000\243\0349\005\201\273z6D\230\3615\2552\230\3608\000\020\003B", "\005\000\000\x80\020\000\000\000\031\000\000\000\000\000\000\000\001\000\000\000\243\0349\005\201\273z6D\230\3615\2552\230\3608\000\020\003C", "\005\000\000\x82\020\000\000\000\031\000\000\000\000\000\000\000\001\000\000\000\243\0349\005\201\273z6D\230\3615\2552\230\3608\000\020\003D"]
54
55
  assert_equal(expected, actual, 'make_request with 4 frags')
55
56
  end
56
- end
57
+ end
@@ -1,3 +1,4 @@
1
+ # -*- coding: binary -*-
1
2
  require 'rex/proto/dcerpc/uuid'
2
3
  require 'rex/proto/dcerpc/exceptions'
3
4
 
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # -*- coding: binary -*-
2
3
 
3
4
  $:.unshift(File.join(File.dirname(__FILE__), '..', '..', '..'))
4
5
 
@@ -12,4 +13,4 @@ class Rex::Proto::DCERPC::Response::UnitTest < Test::Unit::TestCase
12
13
  def test_parse
13
14
 
14
15
  end
15
- end
16
+ end
@@ -1,3 +1,4 @@
1
+ # -*- coding: binary -*-
1
2
  module Rex
2
3
  module Proto
3
4
  module DCERPC
@@ -18,7 +19,7 @@ class UUID
18
19
  'PNP' => [ '8d9f4e40-a03d-11ce-8f69-08003e30051b', '1.0' ]
19
20
  }
20
21
 
21
- # Convert a UUID in binary format to the string representation
22
+ # Convert a UUID in binary format to the string representation
22
23
  def self.uuid_unpack(uuid_bin)
23
24
  raise ArgumentError if uuid_bin.length != 16
24
25
  sprintf("%.8x-%.4x-%.4x-%.4x-%s",
@@ -27,7 +28,7 @@ class UUID
27
28
  uuid_bin[ 6, 2].unpack('v')[0],
28
29
  uuid_bin[ 8, 2].unpack('n')[0],
29
30
  uuid_bin[10, 6].unpack('H*')[0]
30
- )
31
+ )
31
32
  end
32
33
 
33
34
  # Validate a text based UUID
@@ -46,39 +47,39 @@ class UUID
46
47
  parts = uuid_str.split('-')
47
48
  [ parts[0].hex, parts[1].hex, parts[2].hex, parts[3].hex ].pack('Vvvn') + [ parts[4] ].pack('H*')
48
49
  end
49
-
50
+
50
51
  # Provide the common TransferSyntax UUID in packed format
51
52
  def self.xfer_syntax_uuid ()
52
53
  self.uuid_pack('8a885d04-1ceb-11c9-9fe8-08002b104860')
53
54
  end
54
-
55
+
55
56
  # Provide the common TransferSyntax version number
56
57
  def self.xfer_syntax_vers ()
57
58
  '2.0'
58
59
  end
59
-
60
- # Determine the UUID string for the DCERPC service with this name
61
- def self.uuid_by_name (name)
60
+
61
+ # Determine the UUID string for the DCERPC service with this name
62
+ def self.uuid_by_name (name)
62
63
  if @@known_uuids.key?(name)
63
64
  @@known_uuids[name][0]
64
65
  end
65
66
  end
66
-
67
+
67
68
  # Determine the common version number for the DCERPC service with this name
68
69
  def self.vers_by_name (name)
69
70
  if @@known_uuids.key?(name)
70
71
  @@known_uuids[name][1]
71
72
  end
72
73
  end
73
-
74
+
74
75
  # Convert a string or number in float format to two unique numbers 2.0 => [2, 0]
75
- def self.vers_to_nums (vers)
76
+ def self.vers_to_nums (vers)
76
77
  vers_maj = vers.to_i
77
78
  vers_min = ((vers.to_f - vers.to_i) * 10).to_i
78
79
  return vers_maj, vers_min
79
80
  end
80
-
81
+
82
+ end
81
83
  end
82
84
  end
83
85
  end
84
- end
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # -*- coding: binary -*-
2
3
 
3
4
  $:.unshift(File.join(File.dirname(__FILE__), '..', '..', '..'))
4
5
 
@@ -43,4 +44,4 @@ class Rex::Proto::DCERPC::UUID::UnitTest < Test::Unit::TestCase
43
44
  assert_equal(Klass.vers_to_nums('2.0'), [2, 0], 'vers_to_nums')
44
45
  assert_equal(Klass.vers_to_nums('2'), [2, 0], 'vers_to_nums (short)')
45
46
  end
46
- end
47
+ end
@@ -1,4 +1,5 @@
1
- # $Id: dhcp.rb 12196 2011-04-01 00:51:33Z egypt $
1
+ # -*- coding: binary -*-
2
+ # $Id: dhcp.rb 15548 2012-06-29 06:08:20Z rapid7 $
2
3
  #
3
4
  # DHCP Server support written by scriptjunkie
4
5
  #
@@ -1,4 +1,5 @@
1
- # $Id: constants.rb 12375 2011-04-20 14:21:36Z jduck $
1
+ # -*- coding: binary -*-
2
+ # $Id: constants.rb 15548 2012-06-29 06:08:20Z rapid7 $
2
3
  require 'rex/proto/dhcp'
3
4
 
4
5
  module Rex
@@ -1,4 +1,5 @@
1
- # $Id: server.rb 13779 2011-09-23 15:12:19Z scriptjunkie $
1
+ # -*- coding: binary -*-
2
+ # $Id: server.rb 15548 2012-06-29 06:08:20Z rapid7 $
2
3
 
3
4
  require 'rex/socket'
4
5
  require 'rex/proto/dhcp'
@@ -87,7 +88,7 @@ class Server
87
88
  self.served_over = hash['HOSTSTART'].to_i
88
89
  end
89
90
  end
90
-
91
+
91
92
  self.leasetime = 600
92
93
  self.relayip = "\x00\x00\x00\x00" # relay ip - not currently suported
93
94
  self.pxeconfigfile = "update2"
@@ -268,7 +269,7 @@ protected
268
269
  if messageType == DHCPDiscover #DHCP Discover - send DHCP Offer
269
270
  pkt << [DHCPOffer].pack('C')
270
271
  # check if already served an Ack based on hw addr (MAC address)
271
- # if serveOnce & PXE, don't reply to another PXE request
272
+ # if serveOnce & PXE, don't reply to another PXE request
272
273
  # if serveOnce & ! PXE, don't reply to anything
273
274
  if self.serveOnce == true and self.served.has_key?(buf[28..43]) and
274
275
  self.served[buf[28..43]][1] and (pxeclient == false or self.servePXE == false)
@@ -1,3 +1,4 @@
1
+ # -*- coding: binary -*-
1
2
  require 'rex/proto/drda/constants'
2
3
  require 'rex/proto/drda/packet'
3
4
  require 'rex/proto/drda/utils'
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # -*- coding: binary -*-
2
3
 
3
4
  require 'rex/test'
4
5
 
@@ -1,3 +1,4 @@
1
+ # -*- coding: binary -*-
1
2
  require 'rex/proto/drda'
2
3
 
3
4
  module Rex
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # -*- coding: binary -*-
2
3
 
3
4
  $:.unshift(File.join(File.dirname(__FILE__), '..', '..', '..'))
4
5
 
@@ -1,3 +1,4 @@
1
+ # -*- coding: binary -*-
1
2
  require 'rex/proto/drda'
2
3
 
3
4
  module Rex
@@ -8,12 +9,12 @@ class Error < StandardError; end
8
9
  class RespError < Error; end
9
10
 
10
11
  # See:
11
- # http://publib.boulder.ibm.com/infocenter/dzichelp/v2r2/index.jsp?topic=/com.ibm.db29.doc.drda/db2z_excsat.htm
12
+ # http://publib.boulder.ibm.com/infocenter/dzichelp/v2r2/index.jsp?topic=/com.ibm.db29.doc.drda/db2z_excsat.htm
12
13
  class MGRLVLLS_PARAM < Struct.new(:length, :codepoint, :payload)
13
14
  def initialize(args={})
14
15
  self[:codepoint] = Constants::MGRLVLLS
15
16
  self[:payload] = "\x14\x03\x00\x0a\x24\x07\x00\x0a" +
16
- "\x14\x74\x00\x05\x24\x0f\x00\x08" +
17
+ "\x14\x74\x00\x05\x24\x0f\x00\x08" +
17
18
  "\x14\x40\x00\x09\x1c\x08\x04\xb8"
18
19
  self[:length] = self[:payload].to_s.size+4
19
20
  end
@@ -22,10 +23,10 @@ class MGRLVLLS_PARAM < Struct.new(:length, :codepoint, :payload)
22
23
  end
23
24
  end
24
25
 
25
- # Currently, only takes a MGRLVLLS param. Extend the struct
26
+ # Currently, only takes a MGRLVLLS param. Extend the struct
26
27
  # when more parameters are defined.
27
28
  class EXCSAT_DDM < Struct.new(:length, :magic, :format, :correlid, :length2,
28
- :codepoint, :mgrlvlls)
29
+ :codepoint, :mgrlvlls)
29
30
 
30
31
  def initialize(args={})
31
32
  self[:magic] = 0xd0
@@ -34,7 +35,7 @@ class EXCSAT_DDM < Struct.new(:length, :magic, :format, :correlid, :length2,
34
35
  self[:codepoint] = Constants::EXCSAT
35
36
  self[:mgrlvlls] = args[:mgrlvlls] || MGRLVLLS_PARAM.new.to_s
36
37
  self[:length] = (10 + self[:mgrlvlls].to_s.size)
37
- self[:length2] = self[:length]-6
38
+ self[:length2] = self[:length]-6
38
39
  end
39
40
 
40
41
  def to_s
@@ -57,7 +58,7 @@ class SECMEC_PARAM < Struct.new(:length, :codepoint, :payload)
57
58
  end
58
59
  end
59
60
 
60
- # Relational Database name parameter.
61
+ # Relational Database name parameter.
61
62
  class RDBNAM_PARAM < Struct.new(:length, :codepoint, :payload)
62
63
  def initialize(args={})
63
64
  self[:length] = 22 # Since the database name is padded out.
@@ -95,7 +96,7 @@ class ACCSEC_DDM < Struct.new(:length, :magic, :format, :correlid, :length2,
95
96
  self[:rdbnam] = RDBNAM_PARAM.new(:payload => args[:dbname]).to_s
96
97
  end
97
98
  self[:length] = 10 + self[:secmec].to_s.size + self[:rdbnam].to_s.size
98
- self[:length2] = self[:length]-6
99
+ self[:length2] = self[:length]-6
99
100
  end
100
101
  def dbname=(str)
101
102
  self[:rdbnam] = RDBNAM_PARAM.new(:payload => args[:dbname]).to_s
@@ -143,7 +144,7 @@ class BASIC_DDM < Struct.new(:length, :magic, :format, :correlid,
143
144
  rest = str[10,self[:length2]-4]
144
145
  i = 0
145
146
  while (i < rest.size)
146
- if self[:codepoint] == Constants::SQLCARD # These aren't DDM's.
147
+ if self[:codepoint] == Constants::SQLCARD # These aren't DDM's.
147
148
  this_param = rest[i,self[:length]-10]
148
149
  else
149
150
  this_param = DDM_PARAM.new.read(rest[i,rest.size])
@@ -154,7 +155,7 @@ class BASIC_DDM < Struct.new(:length, :magic, :format, :correlid,
154
155
  return self
155
156
  end
156
157
 
157
- # Just a quick test.
158
+ # Just a quick test.
158
159
  def sanity_check
159
160
  if self[:length] < 10
160
161
  raise DRDA::RespError, "DDM Length is too short."
@@ -233,7 +234,7 @@ class SECCHK_DDM < Struct.new(:length, :magic, :format, :correlid, :length2,
233
234
  self[:userid] = USERID_PARAM.new(:payload => args[:dbuser]).to_s
234
235
  self[:length] = ( 10 + self[:secmec].to_s.size + self[:rdbnam].to_s.size +
235
236
  self[:password].to_s.size + self[:userid].to_s.size )
236
- self[:length2] = self[:length]-6
237
+ self[:length2] = self[:length]-6
237
238
  end
238
239
  def dbname=(str)
239
240
  self[:rdbnam] = RDBNAM_PARAM.new(:payload => args[:dbname]).to_s
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # -*- coding: binary -*-
2
3
 
3
4
  $:.unshift(File.join(File.dirname(__FILE__), '..', '..', '..'))
4
5
 
@@ -6,7 +7,7 @@ require 'rex/test'
6
7
  require 'rex/proto/drda/packet'
7
8
 
8
9
  class Rex::Proto::DRDA::UnitTest < Test::Unit::TestCase
9
-
10
+
10
11
  Klass = Rex::Proto::DRDA
11
12
  Konst = Rex::Proto::DRDA::Constants
12
13
 
@@ -24,7 +25,7 @@ class Rex::Proto::DRDA::UnitTest < Test::Unit::TestCase
24
25
  assert_equal Konst::SECCHK, d.codepoint
25
26
  end
26
27
 
27
- # All parameter names should have a corresponding codepoint,
28
+ # All parameter names should have a corresponding codepoint,
28
29
  # except "DDM_PARAM" (a generic parameter).
29
30
  def test_all_param_codepoints
30
31
  params = Klass.constants.map {|x| x if x =~ /PARAM$/}.compact
@@ -67,7 +68,7 @@ class Rex::Proto::DRDA::UnitTest < Test::Unit::TestCase
67
68
  ddms = Klass.constants.map {|x| x if x =~ /DDM$/}.compact
68
69
  ddms.each do |d|
69
70
  obj = Klass.const_get(d).new
70
- assert_operator obj.size, :>=, 7
71
+ assert_operator obj.size, :>=, 7
71
72
  assert_respond_to obj, :length
72
73
  assert_respond_to obj, :magic
73
74
  assert_respond_to obj, :format
@@ -99,7 +100,7 @@ class Rex::Proto::DRDA::UnitTest < Test::Unit::TestCase
99
100
  assert_equal Konst::SECCHKRM, s[0].codepoint
100
101
  assert_equal Konst::ACCRDBRM, s[1].codepoint
101
102
  assert_equal Konst::SQLCARD, s[2].codepoint
102
- assert_equal 0xd0, s[0].magic
103
+ assert_equal 0xd0, s[0].magic
103
104
  assert_equal 0x52, s[1].format
104
105
  assert_equal 134, s[2].length2
105
106
  assert_equal 21+80+140, s.sz
@@ -1,3 +1,4 @@
1
+ # -*- coding: binary -*-
1
2
  require 'rex/proto/drda'
2
3
 
3
4
  module Rex
@@ -43,7 +44,7 @@ class Utils
43
44
  info_hash.merge!(_info_secchkrm(ddm))
44
45
  else
45
46
  next
46
- end
47
+ end
47
48
  end
48
49
  return info_hash
49
50
  end
@@ -62,7 +63,7 @@ class Utils
62
63
  next
63
64
  end
64
65
  end
65
- return info_hash
66
+ return info_hash
66
67
  end
67
68
 
68
69
  def self._info_accsecrd(ddm)
@@ -74,7 +75,7 @@ class Utils
74
75
  when Constants::SECCHKCD
75
76
  info_hash[:security_check_code] = param.payload.unpack("C").first
76
77
  # A little spurious? This is always nonzero when there's no SECCHKRM DDM.
77
- info_hash[:db_login_success] = false unless info_hash[:security_check_code].zero?
78
+ info_hash[:db_login_success] = false unless info_hash[:security_check_code].zero?
78
79
  else
79
80
  next
80
81
  end
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # -*- coding: binary -*-
2
3
 
3
4
  $:.unshift(File.join(File.dirname(__FILE__), '..', '..', '..'))
4
5
 
@@ -33,7 +34,7 @@ class Rex::Proto::DRDA::Utils::UnitTest < Test::Unit::TestCase
33
34
  begin
34
35
  Timeout.timeout($_REX_TEST_TIMEOUT) do
35
36
  socket = Rex::Socket.create_tcp(
36
- 'PeerHost' => $_REX_TEST_DRDA_HOST.to_s,
37
+ 'PeerHost' => $_REX_TEST_DRDA_HOST.to_s,
37
38
  'PeerPort' => 50000
38
39
  )
39
40
  sent = socket.put probe_pkt
@@ -62,7 +63,7 @@ class Rex::Proto::DRDA::Utils::UnitTest < Test::Unit::TestCase
62
63
  begin
63
64
  Timeout.timeout($_REX_TEST_TIMEOUT) do
64
65
  socket = Rex::Socket.create_tcp(
65
- 'PeerHost' => $_REX_TEST_DRDA_HOST.to_s,
66
+ 'PeerHost' => $_REX_TEST_DRDA_HOST.to_s,
66
67
  'PeerPort' => 50000
67
68
  )
68
69
  sent = socket.put probe_pkt
@@ -1,5 +1,6 @@
1
+ # -*- coding: binary -*-
1
2
  require 'rex/proto/http/packet'
2
3
  require 'rex/proto/http/request'
3
4
  require 'rex/proto/http/response'
4
5
  require 'rex/proto/http/client'
5
- require 'rex/proto/http/server'
6
+ require 'rex/proto/http/server'
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # -*- coding: binary -*-
2
3
 
3
4
  require 'test/unit'
4
5
 
@@ -9,4 +10,4 @@ require 'rex/proto/http/header.rb.ut'
9
10
  require 'rex/proto/http/request.rb.ut'
10
11
  require 'rex/proto/http/response.rb.ut'
11
12
  require 'rex/proto/http/handler/erb.rb.ut'
12
- require 'rex/proto/http/handler/proc.rb.ut'
13
+ require 'rex/proto/http/handler/proc.rb.ut'
@@ -1,3 +1,4 @@
1
+ # -*- coding: binary -*-
1
2
  require 'rex/socket'
2
3
  require 'rex/proto/http'
3
4
  require 'rex/text'
@@ -9,8 +10,8 @@ module Http
9
10
  ###
10
11
  #
11
12
  # Acts as a client to an HTTP server, sending requests and receiving responses.
12
- #
13
- # See the RFC: http://www.w3.org/Protocols/rfc2616/rfc2616.html
13
+ #
14
+ # See the RFC: http://www.w3.org/Protocols/rfc2616/rfc2616.html
14
15
  #
15
16
  ###
16
17
  class Client
@@ -99,16 +100,22 @@ class Client
99
100
  #
100
101
  def set_config(opts = {})
101
102
  opts.each_pair do |var,val|
103
+ # Default type is string
102
104
  typ = self.config_types[var] || 'string'
103
105
 
106
+ # These are enum types
104
107
  if(typ.class.to_s == 'Array')
105
108
  if not typ.include?(val)
106
109
  raise RuntimeError, "The specified value for #{var} is not one of the valid choices"
107
110
  end
108
111
  end
109
112
 
113
+ # The caller should have converted these to proper ruby types, but
114
+ # take care of the case where they didn't before setting the
115
+ # config.
116
+
110
117
  if(typ == 'bool')
111
- val = (val =~ /^(t|y|1)$/i ? true : false)
118
+ val = (val =~ /^(t|y|1)$/i ? true : false || val === true)
112
119
  end
113
120
 
114
121
  if(typ == 'integer')
@@ -139,6 +146,11 @@ class Client
139
146
  c_conn = opts['connection']
140
147
  c_auth = opts['basic_auth'] || config['basic_auth'] || ''
141
148
 
149
+ # An agent parameter was specified, but so was a header, prefer the header
150
+ if c_ag and c_head.keys.map{|x| x.downcase }.include?('user-agent')
151
+ c_ag = nil
152
+ end
153
+
142
154
  uri = set_uri(c_uri)
143
155
 
144
156
  req = ''
@@ -158,6 +170,7 @@ class Client
158
170
  req << set_host_header(c_host)
159
171
  req << set_agent_header(c_ag)
160
172
 
173
+
161
174
  if (c_auth.length > 0)
162
175
  req << set_basic_auth_header(c_auth)
163
176
  end
@@ -373,7 +386,7 @@ class Client
373
386
 
374
387
  buff = conn.get_once(-1, 1)
375
388
  rv = resp.parse( buff || '' )
376
-
389
+
377
390
  ##########################################################################
378
391
  # XXX: NOTE: BUG: get_once currently (as of r10042) rescues "Exception"
379
392
  # As such, the following rescue block will ever be reached. -jjd
@@ -678,9 +691,20 @@ class Client
678
691
  #
679
692
  # Return the HTTP Host header
680
693
  #
681
- def set_host_header(host)
694
+ def set_host_header(host=nil)
682
695
  return "" if self.config['uri_full_url']
683
696
  host ||= self.config['vhost']
697
+
698
+ # IPv6 addresses must be placed in brackets
699
+ if Rex::Socket.is_ipv6?(host)
700
+ host = "[#{host}]"
701
+ end
702
+
703
+ # The port should be appended if non-standard
704
+ if not [80,443].include?(self.port)
705
+ host = host + ":#{port}"
706
+ end
707
+
684
708
  set_formatted_header("Host", host)
685
709
  end
686
710