librex 0.0.13 → 0.0.15

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 (435) hide show
  1. data/README.markdown +1 -1
  2. data/Rakefile +1 -0
  3. metadata +3 -435
  4. data/lib/rex/LICENSE +0 -29
  5. data/lib/rex/arch.rb +0 -103
  6. data/lib/rex/arch/sparc.rb +0 -75
  7. data/lib/rex/arch/sparc.rb.ut.rb +0 -18
  8. data/lib/rex/arch/x86.rb +0 -513
  9. data/lib/rex/arch/x86.rb.ut.rb +0 -93
  10. data/lib/rex/assembly/nasm.rb +0 -104
  11. data/lib/rex/assembly/nasm.rb.ut.rb +0 -22
  12. data/lib/rex/codepage.map +0 -104
  13. data/lib/rex/compat.rb +0 -311
  14. data/lib/rex/constants.rb +0 -113
  15. data/lib/rex/elfparsey.rb +0 -11
  16. data/lib/rex/elfparsey/elf.rb +0 -123
  17. data/lib/rex/elfparsey/elfbase.rb +0 -258
  18. data/lib/rex/elfparsey/exceptions.rb +0 -27
  19. data/lib/rex/elfscan.rb +0 -12
  20. data/lib/rex/elfscan/scanner.rb +0 -207
  21. data/lib/rex/elfscan/search.rb +0 -46
  22. data/lib/rex/encoder/alpha2.rb +0 -31
  23. data/lib/rex/encoder/alpha2/alpha_mixed.rb +0 -68
  24. data/lib/rex/encoder/alpha2/alpha_upper.rb +0 -79
  25. data/lib/rex/encoder/alpha2/generic.rb +0 -114
  26. data/lib/rex/encoder/alpha2/unicode_mixed.rb +0 -117
  27. data/lib/rex/encoder/alpha2/unicode_upper.rb +0 -129
  28. data/lib/rex/encoder/ndr.rb +0 -89
  29. data/lib/rex/encoder/ndr.rb.ut.rb +0 -44
  30. data/lib/rex/encoder/nonalpha.rb +0 -61
  31. data/lib/rex/encoder/nonupper.rb +0 -64
  32. data/lib/rex/encoder/xdr.rb +0 -106
  33. data/lib/rex/encoder/xdr.rb.ut.rb +0 -29
  34. data/lib/rex/encoder/xor.rb +0 -69
  35. data/lib/rex/encoder/xor/dword.rb +0 -13
  36. data/lib/rex/encoder/xor/dword_additive.rb +0 -13
  37. data/lib/rex/encoders/xor_dword.rb +0 -35
  38. data/lib/rex/encoders/xor_dword_additive.rb +0 -53
  39. data/lib/rex/encoders/xor_dword_additive.rb.ut.rb +0 -12
  40. data/lib/rex/encoding/xor.rb +0 -20
  41. data/lib/rex/encoding/xor.rb.ts.rb +0 -14
  42. data/lib/rex/encoding/xor/byte.rb +0 -15
  43. data/lib/rex/encoding/xor/byte.rb.ut.rb +0 -21
  44. data/lib/rex/encoding/xor/dword.rb +0 -21
  45. data/lib/rex/encoding/xor/dword.rb.ut.rb +0 -15
  46. data/lib/rex/encoding/xor/dword_additive.rb +0 -92
  47. data/lib/rex/encoding/xor/dword_additive.rb.ut.rb +0 -15
  48. data/lib/rex/encoding/xor/exceptions.rb +0 -17
  49. data/lib/rex/encoding/xor/generic.rb +0 -146
  50. data/lib/rex/encoding/xor/generic.rb.ut.rb +0 -120
  51. data/lib/rex/encoding/xor/qword.rb +0 -15
  52. data/lib/rex/encoding/xor/word.rb +0 -21
  53. data/lib/rex/encoding/xor/word.rb.ut.rb +0 -13
  54. data/lib/rex/exceptions.rb +0 -275
  55. data/lib/rex/exceptions.rb.ut.rb +0 -44
  56. data/lib/rex/exploitation/cmdstager.rb +0 -9
  57. data/lib/rex/exploitation/cmdstager/base.rb +0 -175
  58. data/lib/rex/exploitation/cmdstager/debug_asm.rb +0 -142
  59. data/lib/rex/exploitation/cmdstager/debug_write.rb +0 -136
  60. data/lib/rex/exploitation/cmdstager/tftp.rb +0 -63
  61. data/lib/rex/exploitation/cmdstager/vbs.rb +0 -128
  62. data/lib/rex/exploitation/egghunter.rb +0 -277
  63. data/lib/rex/exploitation/egghunter.rb.ut.rb +0 -25
  64. data/lib/rex/exploitation/encryptjs.rb +0 -77
  65. data/lib/rex/exploitation/heaplib.js.b64 +0 -331
  66. data/lib/rex/exploitation/heaplib.rb +0 -94
  67. data/lib/rex/exploitation/javascriptosdetect.rb +0 -897
  68. data/lib/rex/exploitation/obfuscatejs.rb +0 -335
  69. data/lib/rex/exploitation/omelet.rb +0 -320
  70. data/lib/rex/exploitation/omelet.rb.ut.rb +0 -13
  71. data/lib/rex/exploitation/opcodedb.rb +0 -818
  72. data/lib/rex/exploitation/opcodedb.rb.ut.rb +0 -279
  73. data/lib/rex/exploitation/seh.rb +0 -92
  74. data/lib/rex/exploitation/seh.rb.ut.rb +0 -19
  75. data/lib/rex/file.rb +0 -112
  76. data/lib/rex/file.rb.ut.rb +0 -16
  77. data/lib/rex/image_source.rb +0 -12
  78. data/lib/rex/image_source/disk.rb +0 -60
  79. data/lib/rex/image_source/image_source.rb +0 -46
  80. data/lib/rex/image_source/memory.rb +0 -37
  81. data/lib/rex/io/bidirectional_pipe.rb +0 -157
  82. data/lib/rex/io/datagram_abstraction.rb +0 -35
  83. data/lib/rex/io/stream.rb +0 -319
  84. data/lib/rex/io/stream_abstraction.rb +0 -197
  85. data/lib/rex/io/stream_server.rb +0 -211
  86. data/lib/rex/job_container.rb +0 -187
  87. data/lib/rex/logging.rb +0 -4
  88. data/lib/rex/logging/log_dispatcher.rb +0 -179
  89. data/lib/rex/logging/log_sink.rb +0 -42
  90. data/lib/rex/logging/sinks/flatfile.rb +0 -55
  91. data/lib/rex/logging/sinks/stderr.rb +0 -43
  92. data/lib/rex/machparsey.rb +0 -9
  93. data/lib/rex/machparsey/exceptions.rb +0 -34
  94. data/lib/rex/machparsey/mach.rb +0 -209
  95. data/lib/rex/machparsey/machbase.rb +0 -408
  96. data/lib/rex/machscan.rb +0 -9
  97. data/lib/rex/machscan/scanner.rb +0 -217
  98. data/lib/rex/mime.rb +0 -9
  99. data/lib/rex/mime/header.rb +0 -77
  100. data/lib/rex/mime/message.rb +0 -144
  101. data/lib/rex/mime/part.rb +0 -20
  102. data/lib/rex/nop/opty2.rb +0 -108
  103. data/lib/rex/nop/opty2.rb.ut.rb +0 -23
  104. data/lib/rex/nop/opty2_tables.rb +0 -300
  105. data/lib/rex/ole.rb +0 -205
  106. data/lib/rex/ole/clsid.rb +0 -47
  107. data/lib/rex/ole/difat.rb +0 -141
  108. data/lib/rex/ole/directory.rb +0 -231
  109. data/lib/rex/ole/direntry.rb +0 -240
  110. data/lib/rex/ole/docs/dependencies.txt +0 -8
  111. data/lib/rex/ole/docs/references.txt +0 -1
  112. data/lib/rex/ole/fat.rb +0 -99
  113. data/lib/rex/ole/header.rb +0 -204
  114. data/lib/rex/ole/minifat.rb +0 -77
  115. data/lib/rex/ole/propset.rb +0 -144
  116. data/lib/rex/ole/samples/create_ole.rb +0 -27
  117. data/lib/rex/ole/samples/dir.rb +0 -35
  118. data/lib/rex/ole/samples/dump_stream.rb +0 -34
  119. data/lib/rex/ole/samples/ole_info.rb +0 -23
  120. data/lib/rex/ole/storage.rb +0 -395
  121. data/lib/rex/ole/stream.rb +0 -53
  122. data/lib/rex/ole/substorage.rb +0 -49
  123. data/lib/rex/ole/util.rb +0 -157
  124. data/lib/rex/parser/arguments.rb +0 -97
  125. data/lib/rex/parser/arguments.rb.ut.rb +0 -67
  126. data/lib/rex/parser/ini.rb +0 -185
  127. data/lib/rex/parser/ini.rb.ut.rb +0 -29
  128. data/lib/rex/parser/ip360_aspl_xml.rb +0 -102
  129. data/lib/rex/parser/ip360_xml.rb +0 -93
  130. data/lib/rex/parser/nessus_xml.rb +0 -118
  131. data/lib/rex/parser/netsparker_xml.rb +0 -94
  132. data/lib/rex/parser/nexpose_xml.rb +0 -131
  133. data/lib/rex/parser/nmap_xml.rb +0 -121
  134. data/lib/rex/parser/retina_xml.rb +0 -109
  135. data/lib/rex/payloads.rb +0 -1
  136. data/lib/rex/payloads/win32.rb +0 -2
  137. data/lib/rex/payloads/win32/common.rb +0 -26
  138. data/lib/rex/payloads/win32/kernel.rb +0 -53
  139. data/lib/rex/payloads/win32/kernel/common.rb +0 -54
  140. data/lib/rex/payloads/win32/kernel/migration.rb +0 -12
  141. data/lib/rex/payloads/win32/kernel/recovery.rb +0 -50
  142. data/lib/rex/payloads/win32/kernel/stager.rb +0 -194
  143. data/lib/rex/peparsey.rb +0 -12
  144. data/lib/rex/peparsey/exceptions.rb +0 -32
  145. data/lib/rex/peparsey/pe.rb +0 -212
  146. data/lib/rex/peparsey/pe_memdump.rb +0 -63
  147. data/lib/rex/peparsey/pebase.rb +0 -1680
  148. data/lib/rex/peparsey/section.rb +0 -136
  149. data/lib/rex/pescan.rb +0 -13
  150. data/lib/rex/pescan/analyze.rb +0 -309
  151. data/lib/rex/pescan/scanner.rb +0 -206
  152. data/lib/rex/pescan/search.rb +0 -56
  153. data/lib/rex/platforms.rb +0 -1
  154. data/lib/rex/platforms/windows.rb +0 -51
  155. data/lib/rex/poly.rb +0 -132
  156. data/lib/rex/poly/block.rb +0 -477
  157. data/lib/rex/poly/register.rb +0 -100
  158. data/lib/rex/poly/register/x86.rb +0 -40
  159. data/lib/rex/post.rb +0 -8
  160. data/lib/rex/post/dir.rb +0 -51
  161. data/lib/rex/post/file.rb +0 -172
  162. data/lib/rex/post/file_stat.rb +0 -220
  163. data/lib/rex/post/gen.pl +0 -13
  164. data/lib/rex/post/io.rb +0 -182
  165. data/lib/rex/post/meterpreter.rb +0 -4
  166. data/lib/rex/post/meterpreter/channel.rb +0 -445
  167. data/lib/rex/post/meterpreter/channel_container.rb +0 -54
  168. data/lib/rex/post/meterpreter/channels/pool.rb +0 -160
  169. data/lib/rex/post/meterpreter/channels/pools/file.rb +0 -62
  170. data/lib/rex/post/meterpreter/channels/pools/stream_pool.rb +0 -103
  171. data/lib/rex/post/meterpreter/channels/stream.rb +0 -87
  172. data/lib/rex/post/meterpreter/client.rb +0 -364
  173. data/lib/rex/post/meterpreter/client_core.rb +0 -274
  174. data/lib/rex/post/meterpreter/dependencies.rb +0 -3
  175. data/lib/rex/post/meterpreter/extension.rb +0 -32
  176. data/lib/rex/post/meterpreter/extensions/espia/espia.rb +0 -58
  177. data/lib/rex/post/meterpreter/extensions/espia/tlv.rb +0 -16
  178. data/lib/rex/post/meterpreter/extensions/incognito/incognito.rb +0 -94
  179. data/lib/rex/post/meterpreter/extensions/incognito/tlv.rb +0 -21
  180. data/lib/rex/post/meterpreter/extensions/networkpug/networkpug.rb +0 -57
  181. data/lib/rex/post/meterpreter/extensions/networkpug/tlv.rb +0 -15
  182. data/lib/rex/post/meterpreter/extensions/priv/fs.rb +0 -118
  183. data/lib/rex/post/meterpreter/extensions/priv/passwd.rb +0 -61
  184. data/lib/rex/post/meterpreter/extensions/priv/priv.rb +0 -111
  185. data/lib/rex/post/meterpreter/extensions/priv/tlv.rb +0 -28
  186. data/lib/rex/post/meterpreter/extensions/sniffer/sniffer.rb +0 -101
  187. data/lib/rex/post/meterpreter/extensions/sniffer/tlv.rb +0 -26
  188. data/lib/rex/post/meterpreter/extensions/stdapi/constants.rb +0 -333
  189. data/lib/rex/post/meterpreter/extensions/stdapi/fs/dir.rb +0 -282
  190. data/lib/rex/post/meterpreter/extensions/stdapi/fs/file.rb +0 -266
  191. data/lib/rex/post/meterpreter/extensions/stdapi/fs/file_stat.rb +0 -103
  192. data/lib/rex/post/meterpreter/extensions/stdapi/fs/io.rb +0 -48
  193. data/lib/rex/post/meterpreter/extensions/stdapi/net/config.rb +0 -144
  194. data/lib/rex/post/meterpreter/extensions/stdapi/net/interface.rb +0 -73
  195. data/lib/rex/post/meterpreter/extensions/stdapi/net/route.rb +0 -56
  196. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket.rb +0 -137
  197. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/tcp_client_channel.rb +0 -180
  198. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/tcp_server_channel.rb +0 -167
  199. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/udp_channel.rb +0 -208
  200. data/lib/rex/post/meterpreter/extensions/stdapi/railgun.rb.ts.rb +0 -6
  201. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/api_constants.rb +0 -38106
  202. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/api_constants.rb.ut.rb +0 -31
  203. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/buffer_item.rb +0 -47
  204. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/buffer_item.rb.ut.rb +0 -36
  205. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_advapi32.rb +0 -1818
  206. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_iphlpapi.rb +0 -96
  207. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_kernel32.rb +0 -3848
  208. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_netapi32.rb +0 -26
  209. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_ntdll.rb +0 -153
  210. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_shell32.rb +0 -21
  211. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_user32.rb +0 -3169
  212. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_ws2_32.rb +0 -599
  213. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll.rb +0 -318
  214. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_function.rb +0 -100
  215. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_function.rb.ut.rb +0 -42
  216. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_helper.rb +0 -148
  217. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_helper.rb.ut.rb +0 -127
  218. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/multicall.rb +0 -309
  219. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/railgun.rb +0 -204
  220. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/tlv.rb +0 -51
  221. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/util.rb +0 -630
  222. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/win_const_manager.rb +0 -75
  223. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/win_const_manager.rb.ut.rb +0 -103
  224. data/lib/rex/post/meterpreter/extensions/stdapi/stdapi.rb +0 -149
  225. data/lib/rex/post/meterpreter/extensions/stdapi/sys/config.rb +0 -97
  226. data/lib/rex/post/meterpreter/extensions/stdapi/sys/event_log.rb +0 -192
  227. data/lib/rex/post/meterpreter/extensions/stdapi/sys/event_log_subsystem/event_record.rb +0 -41
  228. data/lib/rex/post/meterpreter/extensions/stdapi/sys/power.rb +0 -61
  229. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process.rb +0 -370
  230. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/image.rb +0 -129
  231. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/io.rb +0 -55
  232. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/memory.rb +0 -336
  233. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/thread.rb +0 -141
  234. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry.rb +0 -279
  235. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_key.rb +0 -193
  236. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_value.rb +0 -102
  237. data/lib/rex/post/meterpreter/extensions/stdapi/sys/thread.rb +0 -180
  238. data/lib/rex/post/meterpreter/extensions/stdapi/tlv.rb +0 -211
  239. data/lib/rex/post/meterpreter/extensions/stdapi/ui.rb +0 -227
  240. data/lib/rex/post/meterpreter/extensions/stdapi/webcam/webcam.rb +0 -63
  241. data/lib/rex/post/meterpreter/inbound_packet_handler.rb +0 -30
  242. data/lib/rex/post/meterpreter/object_aliases.rb +0 -83
  243. data/lib/rex/post/meterpreter/packet.rb +0 -688
  244. data/lib/rex/post/meterpreter/packet_dispatcher.rb +0 -431
  245. data/lib/rex/post/meterpreter/packet_parser.rb +0 -94
  246. data/lib/rex/post/meterpreter/packet_response_waiter.rb +0 -83
  247. data/lib/rex/post/meterpreter/ui/console.rb +0 -137
  248. data/lib/rex/post/meterpreter/ui/console/command_dispatcher.rb +0 -62
  249. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/core.rb +0 -730
  250. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/espia.rb +0 -108
  251. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/incognito.rb +0 -241
  252. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/networkpug.rb +0 -231
  253. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv.rb +0 -61
  254. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/elevate.rb +0 -98
  255. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/passwd.rb +0 -51
  256. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/timestomp.rb +0 -132
  257. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/sniffer.rb +0 -187
  258. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi.rb +0 -65
  259. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/fs.rb +0 -442
  260. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/net.rb +0 -298
  261. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/sys.rb +0 -486
  262. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/ui.rb +0 -315
  263. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/webcam.rb +0 -157
  264. data/lib/rex/post/meterpreter/ui/console/interactive_channel.rb +0 -95
  265. data/lib/rex/post/permission.rb +0 -26
  266. data/lib/rex/post/process.rb +0 -57
  267. data/lib/rex/post/thread.rb +0 -57
  268. data/lib/rex/post/ui.rb +0 -52
  269. data/lib/rex/proto.rb +0 -13
  270. data/lib/rex/proto.rb.ts.rb +0 -8
  271. data/lib/rex/proto/dcerpc.rb +0 -6
  272. data/lib/rex/proto/dcerpc.rb.ts.rb +0 -9
  273. data/lib/rex/proto/dcerpc/client.rb +0 -361
  274. data/lib/rex/proto/dcerpc/client.rb.ut.rb +0 -491
  275. data/lib/rex/proto/dcerpc/exceptions.rb +0 -150
  276. data/lib/rex/proto/dcerpc/handle.rb +0 -47
  277. data/lib/rex/proto/dcerpc/handle.rb.ut.rb +0 -85
  278. data/lib/rex/proto/dcerpc/ndr.rb +0 -72
  279. data/lib/rex/proto/dcerpc/ndr.rb.ut.rb +0 -41
  280. data/lib/rex/proto/dcerpc/packet.rb +0 -253
  281. data/lib/rex/proto/dcerpc/packet.rb.ut.rb +0 -56
  282. data/lib/rex/proto/dcerpc/response.rb +0 -187
  283. data/lib/rex/proto/dcerpc/response.rb.ut.rb +0 -15
  284. data/lib/rex/proto/dcerpc/uuid.rb +0 -84
  285. data/lib/rex/proto/dcerpc/uuid.rb.ut.rb +0 -46
  286. data/lib/rex/proto/dhcp.rb +0 -7
  287. data/lib/rex/proto/dhcp/constants.rb +0 -33
  288. data/lib/rex/proto/dhcp/server.rb +0 -292
  289. data/lib/rex/proto/drda.rb +0 -5
  290. data/lib/rex/proto/drda.rb.ts.rb +0 -17
  291. data/lib/rex/proto/drda/constants.rb +0 -49
  292. data/lib/rex/proto/drda/constants.rb.ut.rb +0 -23
  293. data/lib/rex/proto/drda/packet.rb +0 -252
  294. data/lib/rex/proto/drda/packet.rb.ut.rb +0 -109
  295. data/lib/rex/proto/drda/utils.rb +0 -123
  296. data/lib/rex/proto/drda/utils.rb.ut.rb +0 -84
  297. data/lib/rex/proto/http.rb +0 -5
  298. data/lib/rex/proto/http.rb.ts.rb +0 -12
  299. data/lib/rex/proto/http/client.rb +0 -821
  300. data/lib/rex/proto/http/client.rb.ut.rb +0 -95
  301. data/lib/rex/proto/http/handler.rb +0 -46
  302. data/lib/rex/proto/http/handler/erb.rb +0 -128
  303. data/lib/rex/proto/http/handler/erb.rb.ut.rb +0 -21
  304. data/lib/rex/proto/http/handler/erb.rb.ut.rb.rhtml +0 -1
  305. data/lib/rex/proto/http/handler/proc.rb +0 -60
  306. data/lib/rex/proto/http/handler/proc.rb.ut.rb +0 -24
  307. data/lib/rex/proto/http/header.rb +0 -161
  308. data/lib/rex/proto/http/header.rb.ut.rb +0 -46
  309. data/lib/rex/proto/http/packet.rb +0 -407
  310. data/lib/rex/proto/http/packet.rb.ut.rb +0 -165
  311. data/lib/rex/proto/http/request.rb +0 -356
  312. data/lib/rex/proto/http/request.rb.ut.rb +0 -214
  313. data/lib/rex/proto/http/response.rb +0 -90
  314. data/lib/rex/proto/http/response.rb.ut.rb +0 -149
  315. data/lib/rex/proto/http/server.rb +0 -369
  316. data/lib/rex/proto/http/server.rb.ut.rb +0 -79
  317. data/lib/rex/proto/ntlm.rb +0 -7
  318. data/lib/rex/proto/ntlm.rb.ut.rb +0 -177
  319. data/lib/rex/proto/ntlm/base.rb +0 -326
  320. data/lib/rex/proto/ntlm/constants.rb +0 -74
  321. data/lib/rex/proto/ntlm/crypt.rb +0 -415
  322. data/lib/rex/proto/ntlm/exceptions.rb +0 -9
  323. data/lib/rex/proto/ntlm/message.rb +0 -533
  324. data/lib/rex/proto/ntlm/utils.rb +0 -763
  325. data/lib/rex/proto/proxy/socks4a.rb +0 -440
  326. data/lib/rex/proto/rfb.rb +0 -19
  327. data/lib/rex/proto/rfb.rb.ut.rb +0 -37
  328. data/lib/rex/proto/rfb/cipher.rb +0 -84
  329. data/lib/rex/proto/rfb/client.rb +0 -207
  330. data/lib/rex/proto/rfb/constants.rb +0 -52
  331. data/lib/rex/proto/smb.rb +0 -7
  332. data/lib/rex/proto/smb.rb.ts.rb +0 -8
  333. data/lib/rex/proto/smb/client.rb +0 -1952
  334. data/lib/rex/proto/smb/client.rb.ut.rb +0 -223
  335. data/lib/rex/proto/smb/constants.rb +0 -1047
  336. data/lib/rex/proto/smb/constants.rb.ut.rb +0 -18
  337. data/lib/rex/proto/smb/crypt.rb +0 -36
  338. data/lib/rex/proto/smb/evasions.rb +0 -66
  339. data/lib/rex/proto/smb/exceptions.rb +0 -858
  340. data/lib/rex/proto/smb/simpleclient.rb +0 -306
  341. data/lib/rex/proto/smb/simpleclient.rb.ut.rb +0 -128
  342. data/lib/rex/proto/smb/utils.rb +0 -103
  343. data/lib/rex/proto/smb/utils.rb.ut.rb +0 -20
  344. data/lib/rex/proto/sunrpc.rb +0 -1
  345. data/lib/rex/proto/sunrpc/client.rb +0 -195
  346. data/lib/rex/proto/tftp.rb +0 -12
  347. data/lib/rex/proto/tftp/constants.rb +0 -39
  348. data/lib/rex/proto/tftp/server.rb +0 -497
  349. data/lib/rex/proto/tftp/server.rb.ut.rb +0 -28
  350. data/lib/rex/script.rb +0 -42
  351. data/lib/rex/script/base.rb +0 -59
  352. data/lib/rex/script/meterpreter.rb +0 -15
  353. data/lib/rex/script/shell.rb +0 -9
  354. data/lib/rex/service.rb +0 -48
  355. data/lib/rex/service_manager.rb +0 -141
  356. data/lib/rex/service_manager.rb.ut.rb +0 -32
  357. data/lib/rex/services/local_relay.rb +0 -423
  358. data/lib/rex/socket.rb +0 -684
  359. data/lib/rex/socket.rb.ut.rb +0 -107
  360. data/lib/rex/socket/comm.rb +0 -119
  361. data/lib/rex/socket/comm/local.rb +0 -412
  362. data/lib/rex/socket/comm/local.rb.ut.rb +0 -75
  363. data/lib/rex/socket/ip.rb +0 -130
  364. data/lib/rex/socket/parameters.rb +0 -345
  365. data/lib/rex/socket/parameters.rb.ut.rb +0 -51
  366. data/lib/rex/socket/range_walker.rb +0 -346
  367. data/lib/rex/socket/range_walker.rb.ut.rb +0 -55
  368. data/lib/rex/socket/ssl_tcp.rb +0 -184
  369. data/lib/rex/socket/ssl_tcp.rb.ut.rb +0 -39
  370. data/lib/rex/socket/ssl_tcp_server.rb +0 -122
  371. data/lib/rex/socket/ssl_tcp_server.rb.ut.rb +0 -61
  372. data/lib/rex/socket/subnet_walker.rb +0 -75
  373. data/lib/rex/socket/subnet_walker.rb.ut.rb +0 -28
  374. data/lib/rex/socket/switch_board.rb +0 -278
  375. data/lib/rex/socket/switch_board.rb.ut.rb +0 -52
  376. data/lib/rex/socket/tcp.rb +0 -76
  377. data/lib/rex/socket/tcp.rb.ut.rb +0 -64
  378. data/lib/rex/socket/tcp_server.rb +0 -67
  379. data/lib/rex/socket/tcp_server.rb.ut.rb +0 -44
  380. data/lib/rex/socket/udp.rb +0 -164
  381. data/lib/rex/socket/udp.rb.ut.rb +0 -44
  382. data/lib/rex/struct2.rb +0 -5
  383. data/lib/rex/struct2/c_struct.rb +0 -181
  384. data/lib/rex/struct2/c_struct_template.rb +0 -39
  385. data/lib/rex/struct2/constant.rb +0 -26
  386. data/lib/rex/struct2/element.rb +0 -44
  387. data/lib/rex/struct2/generic.rb +0 -73
  388. data/lib/rex/struct2/restraint.rb +0 -54
  389. data/lib/rex/struct2/s_string.rb +0 -72
  390. data/lib/rex/struct2/s_struct.rb +0 -111
  391. data/lib/rex/sync.rb +0 -6
  392. data/lib/rex/sync/event.rb +0 -94
  393. data/lib/rex/sync/read_write_lock.rb +0 -176
  394. data/lib/rex/sync/ref.rb +0 -57
  395. data/lib/rex/sync/thread_safe.rb +0 -82
  396. data/lib/rex/test.rb +0 -35
  397. data/lib/rex/text.rb +0 -1149
  398. data/lib/rex/text.rb.ut.rb +0 -190
  399. data/lib/rex/thread_factory.rb +0 -42
  400. data/lib/rex/time.rb +0 -65
  401. data/lib/rex/transformer.rb +0 -115
  402. data/lib/rex/transformer.rb.ut.rb +0 -38
  403. data/lib/rex/ui.rb +0 -21
  404. data/lib/rex/ui/interactive.rb +0 -254
  405. data/lib/rex/ui/output.rb +0 -78
  406. data/lib/rex/ui/output/none.rb +0 -18
  407. data/lib/rex/ui/progress_tracker.rb +0 -96
  408. data/lib/rex/ui/subscriber.rb +0 -149
  409. data/lib/rex/ui/text/color.rb +0 -97
  410. data/lib/rex/ui/text/color.rb.ut.rb +0 -18
  411. data/lib/rex/ui/text/dispatcher_shell.rb +0 -467
  412. data/lib/rex/ui/text/input.rb +0 -117
  413. data/lib/rex/ui/text/input/buffer.rb +0 -75
  414. data/lib/rex/ui/text/input/readline.rb +0 -129
  415. data/lib/rex/ui/text/input/socket.rb +0 -95
  416. data/lib/rex/ui/text/input/stdio.rb +0 -45
  417. data/lib/rex/ui/text/irb_shell.rb +0 -57
  418. data/lib/rex/ui/text/output.rb +0 -80
  419. data/lib/rex/ui/text/output/buffer.rb +0 -61
  420. data/lib/rex/ui/text/output/file.rb +0 -43
  421. data/lib/rex/ui/text/output/socket.rb +0 -43
  422. data/lib/rex/ui/text/output/stdio.rb +0 -40
  423. data/lib/rex/ui/text/progress_tracker.rb +0 -56
  424. data/lib/rex/ui/text/progress_tracker.rb.ut.rb +0 -34
  425. data/lib/rex/ui/text/shell.rb +0 -328
  426. data/lib/rex/ui/text/table.rb +0 -279
  427. data/lib/rex/ui/text/table.rb.ut.rb +0 -55
  428. data/lib/rex/zip.rb +0 -93
  429. data/lib/rex/zip/archive.rb +0 -184
  430. data/lib/rex/zip/blocks.rb +0 -182
  431. data/lib/rex/zip/entry.rb +0 -104
  432. data/lib/rex/zip/samples/comment.rb +0 -32
  433. data/lib/rex/zip/samples/mkwar.rb +0 -138
  434. data/lib/rex/zip/samples/mkzip.rb +0 -19
  435. data/lib/rex/zip/samples/recursive.rb +0 -58
@@ -1,9 +0,0 @@
1
- module Rex
2
- module Proto
3
- module NTLM
4
- module Exceptions
5
- end
6
- end
7
- end
8
- end
9
-
@@ -1,533 +0,0 @@
1
- #
2
- # An NTLM Authentication Library for Ruby
3
- #
4
- # This code is a derivative of "dbf2.rb" written by yrock
5
- # and Minero Aoki. You can find original code here:
6
- # http://jp.rubyist.net/magazine/?0013-CodeReview
7
- # -------------------------------------------------------------
8
- # Copyright (c) 2005,2006 yrock
9
- #
10
- # This program is free software.
11
- # You can distribute/modify this program under the terms of the
12
- # Ruby License.
13
- #
14
- # 2011-02-23 refactored by Alexandre Maloteaux for Metasploit Project
15
- # -------------------------------------------------------------
16
- #
17
- # 2006-02-11 refactored by Minero Aoki
18
- # -------------------------------------------------------------
19
- #
20
- # All protocol information used to write this code stems from
21
- # "The NTLM Authentication Protocol" by Eric Glass. The author
22
- # would thank to him for this tremendous work and making it
23
- # available on the net.
24
- # http://davenport.sourceforge.net/ntlm.html
25
- # -------------------------------------------------------------
26
- # Copyright (c) 2003 Eric Glass
27
- #
28
- # Permission to use, copy, modify, and distribute this document
29
- # for any purpose and without any fee is hereby granted,
30
- # provided that the above copyright notice and this list of
31
- # conditions appear in all copies.
32
- # -------------------------------------------------------------
33
- #
34
- # The author also looked Mozilla-Firefox-1.0.7 source code,
35
- # namely, security/manager/ssl/src/nsNTLMAuthModule.cpp and
36
- # Jonathan Bastien-Filiatrault's libntlm-ruby.
37
- # "http://x2a.org/websvn/filedetails.php?
38
- # repname=libntlm-ruby&path=%2Ftrunk%2Fntlm.rb&sc=1"
39
- # The latter has a minor bug in its separate_keys function.
40
- # The third key has to begin from the 14th character of the
41
- # input string instead of 13th:)
42
- #--
43
- # $Id: ntlm.rb 11678 2011-01-30 19:26:35Z hdm $
44
- #++
45
-
46
- #this module defines the message class , useful for easily handling type 1/2/3 ntlm messages
47
-
48
- require 'rex/proto/ntlm/base'
49
- require 'rex/proto/ntlm/constants'
50
- require 'rex/proto/ntlm/crypt'
51
-
52
-
53
- module Rex
54
- module Proto
55
- module NTLM
56
- class Message < Rex::Proto::NTLM::Base::FieldSet
57
-
58
- BASE = Rex::Proto::NTLM::Base
59
- CONST = Rex::Proto::NTLM::Constants
60
-
61
-
62
- class << Message
63
- def parse(str)
64
- m = Type0.new
65
- m.parse(str)
66
- case m.type
67
- when 1
68
- t = Type1.parse(str)
69
- when 2
70
- t = Type2.parse(str)
71
- when 3
72
- t = Type3.parse(str)
73
- else
74
- raise ArgumentError, "unknown type: #{m.type}"
75
- end
76
- t
77
- end
78
-
79
- def decode64(str)
80
- parse(Rex::Text::decode_base64(str))
81
- end
82
- end#self
83
-
84
- def has_flag?(flag)
85
- (self[:flag].value & CONST::FLAGS[flag]) == CONST::FLAGS[flag]
86
- end
87
-
88
- def set_flag(flag)
89
- self[:flag].value |= CONST::FLAGS[flag]
90
- end
91
-
92
- def dump_flags
93
- CONST::FLAG_KEYS.each{ |k| print(k, "=", flag?(k), "\n") }
94
- end
95
-
96
- def serialize
97
- deflag
98
- super + security_buffers.map{|n, f| f.value}.join
99
- end
100
-
101
- def encode64
102
- Rex::Text::encode_base64(serialize)
103
- end
104
-
105
- def decode64(str)
106
- parse(Rex::Text::decode_base64(str))
107
- end
108
-
109
- alias head_size size
110
-
111
- def data_size
112
- security_buffers.inject(0){|sum, a| sum += a[1].data_size}
113
- end
114
-
115
- def size
116
- head_size + data_size
117
- end
118
-
119
- private
120
-
121
- def security_buffers
122
- @alist.find_all{|n, f| f.instance_of?(BASE::SecurityBuffer)}
123
- end
124
-
125
- def deflag
126
- security_buffers.inject(head_size){|cur, a|
127
- a[1].offset = cur
128
- cur += a[1].data_size
129
- }
130
- end
131
-
132
- def data_edge
133
- security_buffers.map{ |n, f| f.active ? f.offset : size}.min
134
- end
135
-
136
- # sub class definitions
137
-
138
- Type0 = Message.define {
139
- string :sign, {:size => 8, :value => CONST::SSP_SIGN}
140
- int32LE :type, {:value => 0}
141
- }
142
-
143
- Type1 = Message.define {
144
- string :sign, {:size => 8, :value => CONST::SSP_SIGN}
145
- int32LE :type, {:value => 1}
146
- int32LE :flag, {:value => CONST::DEFAULT_FLAGS[:TYPE1] }
147
- security_buffer :domain, {:value => "", :active => false}
148
- security_buffer :workstation, {:value => "", :active => false}
149
- string :padding, {:size => 0, :value => "", :active => false }
150
- }
151
-
152
- class Type1
153
- class << Type1
154
- def parse(str)
155
- t = new
156
- t.parse(str)
157
- t
158
- end
159
- end
160
-
161
- def parse(str)
162
- super(str)
163
- enable(:domain) if has_flag?(:DOMAIN_SUPPLIED)
164
- enable(:workstation) if has_flag?(:WORKSTATION_SUPPLIED)
165
- super(str)
166
- if ( (len = data_edge - head_size) > 0)
167
- self.padding = "\0" * len
168
- super(str)
169
- end
170
- end
171
- end
172
-
173
- Type2 = Message.define{
174
- string :sign, {:size => 8, :value => CONST::SSP_SIGN}
175
- int32LE :type, {:value => 2}
176
- security_buffer :target_name, {:size => 0, :value => ""}
177
- int32LE :flag, {:value => CONST::DEFAULT_FLAGS[:TYPE2]}
178
- int64LE :challenge, {:value => 0}
179
- int64LE :context, {:value => 0, :active => false}
180
- security_buffer :target_info, {:value => "", :active => false}
181
- string :padding, {:size => 0, :value => "", :active => false }
182
- }
183
-
184
- class Type2
185
- class << Type2
186
- def parse(str)
187
- t = new
188
- t.parse(str)
189
- t
190
- end
191
- end
192
-
193
- def parse(str)
194
- super(str)
195
- if has_flag?(:TARGET_INFO)
196
- enable(:context)
197
- enable(:target_info)
198
- super(str)
199
- end
200
- if ( (len = data_edge - head_size) > 0)
201
- self.padding = "\0" * len
202
- super(str)
203
- end
204
- end
205
-
206
- def response(arg, opt = {})
207
- usr = arg[:user]
208
- pwd = arg[:password]
209
- if usr.nil? or pwd.nil?
210
- raise ArgumentError, "user and password have to be supplied"
211
- end
212
-
213
- if opt[:workstation]
214
- ws = opt[:workstation]
215
- else
216
- ws = ""
217
- end
218
-
219
- if opt[:client_challenge]
220
- cc = opt[:client_challenge]
221
- else
222
- cc = rand(CONST::MAX64)
223
- end
224
- cc = Rex::Text::pack_int64le(cc) if cc.is_a?(Integer)
225
- opt[:client_challenge] = cc
226
-
227
- if has_flag?(:OEM) and opt[:unicode]
228
- usr = Rex::Text::to_ascii(usr,'utf-16le')
229
- pwd = Rex::Text::to_ascii(pwd,'utf-16le')
230
- ws = Rex::Text::to_ascii(ws,'utf-16le')
231
- opt[:unicode] = false
232
- end
233
-
234
- if has_flag?(:UNICODE) and !opt[:unicode]
235
- usr = Rex::Text::to_unicode(usr,'utf-16le')
236
- pwd = Rex::Text::to_unicode(pwd,'utf-16le')
237
- ws = Rex::Text::to_unicode(ws,'utf-16le')
238
- opt[:unicode] = true
239
- end
240
-
241
- tgt = self.target_name
242
- ti = self.target_info
243
-
244
- chal = self[:challenge].serialize
245
-
246
- if opt[:ntlmv2]
247
- ar = { :ntlmv2_hash => NTLM::ntlmv2_hash(usr, pwd, tgt, opt),
248
- :challenge => chal, :target_info => ti}
249
- lm_res = NTLM::lmv2_response(ar, opt)
250
- ntlm_res = NTLM::ntlmv2_response(ar, opt)
251
- elsif has_flag?(:NTLM2_KEY)
252
- ar = {:ntlm_hash => NTLM::ntlm_hash(pwd, opt), :challenge => chal}
253
- lm_res, ntlm_res = NTLM::ntlm2_session(ar, opt)
254
- else
255
- lm_res = NTLM::lm_response(pwd, chal)
256
- ntlm_res = NTLM::ntlm_response(pwd, chal)
257
- end
258
-
259
- Type3.create({
260
- :lm_response => lm_res,
261
- :ntlm_response => ntlm_res,
262
- :domain => tgt,
263
- :user => usr,
264
- :workstation => ws,
265
- :flag => self.flag
266
- })
267
- end
268
- end
269
-
270
-
271
- Type3 = Message.define{
272
- string :sign, {:size => 8, :value => CONST::SSP_SIGN}
273
- int32LE :type, {:value => 3}
274
- security_buffer :lm_response, {:value => ""}
275
- security_buffer :ntlm_response, {:value => ""}
276
- security_buffer :domain, {:value => ""}
277
- security_buffer :user, {:value => ""}
278
- security_buffer :workstation, {:value => ""}
279
- security_buffer :session_key, {:value => "", :active => false }
280
- int64LE :flag, {:value => 0, :active => false }
281
- }
282
-
283
- class Type3
284
- class << Type3
285
- def parse(str)
286
- t = new
287
- t.parse(str)
288
- t
289
- end
290
-
291
- def create(arg, opt ={})
292
- t = new
293
- t.lm_response = arg[:lm_response]
294
- t.ntlm_response = arg[:ntlm_response]
295
- t.domain = arg[:domain]
296
- t.user = arg[:user]
297
- t.workstation = arg[:workstation]
298
-
299
- if arg[:session_key]
300
- t.enable(:session_key)
301
- t.session_key = arg[session_key]
302
- end
303
- if arg[:flag]
304
- t.enable(:session_key)
305
- t.enable(:flag)
306
- t.flag = arg[:flag]
307
- end
308
- t
309
- end
310
- end#self
311
- end
312
-
313
- public
314
- #those class method have been merged from lib/rex/smb/utils
315
-
316
- #
317
- # Process Type 3 NTLM Message (in Base64)
318
- #
319
- # from http://www.innovation.ch/personal/ronald/ntlm.html
320
- #
321
- # struct {
322
- # byte protocol[8]; // 'N', 'T', 'L', 'M', 'S', 'S', 'P', '\0'
323
- # byte type; // 0x03
324
- # byte zero[3];
325
- #
326
- # short lm_resp_len; // LanManager response length (always 0x18)
327
- # short lm_resp_len; // LanManager response length (always 0x18)
328
- # short lm_resp_off; // LanManager response offset
329
- # byte zero[2];
330
- #
331
- # short nt_resp_len; // NT response length (always 0x18)
332
- # short nt_resp_len; // NT response length (always 0x18)
333
- # short nt_resp_off; // NT response offset
334
- # byte zero[2];
335
- #
336
- # short dom_len; // domain string length
337
- # short dom_len; // domain string length
338
- # short dom_off; // domain string offset (always 0x40)
339
- # byte zero[2];
340
- #
341
- # short user_len; // username string length
342
- # short user_len; // username string length
343
- # short user_off; // username string offset
344
- # byte zero[2];
345
- #
346
- # short host_len; // host string length
347
- # short host_len; // host string length
348
- # short host_off; // host string offset
349
- # byte zero[6];
350
- #
351
- # short msg_len; // message length
352
- # byte zero[2];
353
- #
354
- # short flags; // 0x8201
355
- # byte zero[2];
356
- #
357
- # byte dom[*]; // domain string (unicode UTF-16LE)
358
- # byte user[*]; // username string (unicode UTF-16LE)
359
- # byte host[*]; // host string (unicode UTF-16LE)
360
- # byte lm_resp[*]; // LanManager response
361
- # byte nt_resp[*]; // NT response
362
- # } type_3_message
363
- #
364
- def self.process_type3_message(message)
365
- decode = Rex::Text.decode_base64(message.strip)
366
- type = decode[8,1].unpack("C").first
367
- if (type == 3)
368
- lm_len = decode[12,2].unpack("v").first
369
- lm_offset = decode[16,2].unpack("v").first
370
- lm = decode[lm_offset, lm_len].unpack("H*").first
371
-
372
- nt_len = decode[20,2].unpack("v").first
373
- nt_offset = decode[24,2].unpack("v").first
374
- nt = decode[nt_offset, nt_len].unpack("H*").first
375
-
376
- dom_len = decode[28,2].unpack("v").first
377
- dom_offset = decode[32,2].unpack("v").first
378
- domain = decode[dom_offset, dom_len]
379
-
380
- user_len = decode[36,2].unpack("v").first
381
- user_offset = decode[40,2].unpack("v").first
382
- user = decode[user_offset, user_len]
383
-
384
- host_len = decode[44,2].unpack("v").first
385
- host_offset = decode[48,2].unpack("v").first
386
- host = decode[host_offset, host_len]
387
-
388
- return domain, user, host, lm, nt
389
- else
390
- return "", "", "", "", ""
391
- end
392
- end
393
-
394
-
395
-
396
- #
397
- # Process Type 1 NTLM Messages, return a Base64 Type 2 Message
398
- #
399
- def self.process_type1_message(message, nonce = "\x11\x22\x33\x44\x55\x66\x77\x88", win_domain = 'DOMAIN',
400
- win_name = 'SERVER', dns_name = 'server', dns_domain = 'example.com', downgrade = true)
401
-
402
- dns_name = Rex::Text.to_unicode(dns_name + "." + dns_domain)
403
- win_domain = Rex::Text.to_unicode(win_domain)
404
- dns_domain = Rex::Text.to_unicode(dns_domain)
405
- win_name = Rex::Text.to_unicode(win_name)
406
- decode = Rex::Text.decode_base64(message.strip)
407
-
408
- type = decode[8,1].unpack("C").first
409
-
410
- if (type == 1)
411
- # A type 1 message has been received, lets build a type 2 message response
412
-
413
- reqflags = decode[12,4]
414
- reqflags = reqflags.unpack("V").first
415
-
416
- if (reqflags & CONST::REQUEST_TARGET) == CONST::REQUEST_TARGET
417
-
418
- if (downgrade)
419
- # At this time NTLMv2 and signing requirements are not supported
420
- if (reqflags & CONST::NEGOTIATE_NTLM2_KEY) == CONST::NEGOTIATE_NTLM2_KEY
421
- reqflags = reqflags - CONST::NEGOTIATE_NTLM2_KEY
422
- end
423
- if (reqflags & CONST::NEGOTIATE_ALWAYS_SIGN) == CONST::NEGOTIATE_ALWAYS_SIGN
424
- reqflags = reqflags - CONST::NEGOTIATE_ALWAYS_SIGN
425
- end
426
- end
427
-
428
- flags = reqflags + CONST::TARGET_TYPE_DOMAIN + CONST::TARGET_TYPE_SERVER
429
- tid = true
430
-
431
- tidoffset = 48 + win_domain.length
432
- tidbuff =
433
- [2].pack('v') + # tid type, win domain
434
- [win_domain.length].pack('v') +
435
- win_domain +
436
- [1].pack('v') + # tid type, server name
437
- [win_name.length].pack('v') +
438
- win_name +
439
- [4].pack('v') + # tid type, domain name
440
- [dns_domain.length].pack('v') +
441
- dns_domain +
442
- [3].pack('v') + # tid type, dns_name
443
- [dns_name.length].pack('v') +
444
- dns_name
445
- else
446
- flags = CONST::NEGOTIATE_UNICODE + CONST::NEGOTIATE_NTLM
447
- tid = false
448
- end
449
-
450
- type2msg = "NTLMSSP\0" + # protocol, 8 bytes
451
- "\x02\x00\x00\x00" # type, 4 bytes
452
-
453
- if (tid)
454
- type2msg += # Target security info, 8 bytes. Filled if REQUEST_TARGET
455
- [win_domain.length].pack('v') + # Length, 2 bytes
456
- [win_domain.length].pack('v') # Allocated space, 2 bytes
457
- end
458
-
459
- type2msg +="\x30\x00\x00\x00" + # Offset, 4 bytes
460
- [flags].pack('V') + # flags, 4 bytes
461
- nonce + # the nonce, 8 bytes
462
- "\x00" * 8 # Context (all 0s), 8 bytes
463
-
464
- if (tid)
465
- type2msg += # Target information security buffer. Filled if REQUEST_TARGET
466
- [tidbuff.length].pack('v') + # Length, 2 bytes
467
- [tidbuff.length].pack('v') + # Allocated space, 2 bytes
468
- [tidoffset].pack('V') + # Offset, 4 bytes (usually \x48 + length of win_domain)
469
- win_domain + # Target name data (domain in unicode if REQUEST_UNICODE)
470
- # Target information data
471
- tidbuff + # Type, 2 bytes
472
- # Length, 2 bytes
473
- # Data (in unicode if REQUEST_UNICODE)
474
- "\x00\x00\x00\x00" # Terminator, 4 bytes, all \x00
475
- end
476
-
477
- type2msg = Rex::Text.encode_base64(type2msg).delete("\n") # base64 encode and remove the returns
478
- else
479
- # This is not a Type2 message
480
- type2msg = ""
481
- end
482
-
483
- return type2msg
484
- end
485
-
486
- #
487
- # Downgrading Type messages to LMv1/NTLMv1 and removing signing
488
- #
489
- def self.downgrade_type_message(message)
490
- decode = Rex::Text.decode_base64(message.strip)
491
-
492
- type = decode[8,1].unpack("C").first
493
-
494
- if (type > 0 and type < 4)
495
- reqflags = decode[12..15] if (type == 1 or type == 3)
496
- reqflags = decode[20..23] if (type == 2)
497
- reqflags = reqflags.unpack("V")
498
-
499
- # Remove NEGOTIATE_NTLMV2_KEY and NEGOTIATE_ALWAYS_SIGN, this lowers the negotiation
500
- # down to LMv1/NTLMv1.
501
- if (reqflags & CONST::NEGOTIATE_NTLM2_KEY) == CONST::NEGOTIATE_NTLM2_KEY
502
- reqflags = reqflags - CONST::NEGOTIATE_NTLM2_KEY
503
- end
504
- if (reqflags & CONST::NEGOTIATE_ALWAYS_SIGN) == CONST::NEGOTIATE_ALWAYS_SIGN
505
- reqflags = reqflags - CONST::NEGOTIATE_ALWAYS_SIGN
506
- end
507
-
508
- # Return the flags back to the decode so we can base64 it again
509
- flags = reqflags.to_s(16)
510
- 0.upto(8) do |idx|
511
- if (idx > flags.length)
512
- flags.insert(0, "0")
513
- end
514
- end
515
-
516
- idx = 0
517
- 0.upto(3) do |cnt|
518
- if (type == 2)
519
- decode[23-cnt] = [flags[idx,1]].pack("C")
520
- else
521
- decode[15-cnt] = [flags[idx,1]].pack("C")
522
- end
523
- idx += 2
524
- end
525
-
526
- end
527
- return Rex::Text.encode_base64(decode).delete("\n") # base64 encode and remove the returns
528
- end
529
-
530
- end
531
- end
532
- end
533
- end