librex 0.0.19 → 0.0.20

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/Rakefile +0 -1
  2. metadata +1 -434
  3. data/lib/rex/LICENSE +0 -29
  4. data/lib/rex/arch.rb +0 -103
  5. data/lib/rex/arch/sparc.rb +0 -75
  6. data/lib/rex/arch/sparc.rb.ut.rb +0 -18
  7. data/lib/rex/arch/x86.rb +0 -513
  8. data/lib/rex/arch/x86.rb.ut.rb +0 -93
  9. data/lib/rex/assembly/nasm.rb +0 -104
  10. data/lib/rex/assembly/nasm.rb.ut.rb +0 -22
  11. data/lib/rex/codepage.map +0 -104
  12. data/lib/rex/compat.rb +0 -311
  13. data/lib/rex/constants.rb +0 -113
  14. data/lib/rex/elfparsey.rb +0 -11
  15. data/lib/rex/elfparsey/elf.rb +0 -123
  16. data/lib/rex/elfparsey/elfbase.rb +0 -258
  17. data/lib/rex/elfparsey/exceptions.rb +0 -27
  18. data/lib/rex/elfscan.rb +0 -12
  19. data/lib/rex/elfscan/scanner.rb +0 -207
  20. data/lib/rex/elfscan/search.rb +0 -46
  21. data/lib/rex/encoder/alpha2.rb +0 -31
  22. data/lib/rex/encoder/alpha2/alpha_mixed.rb +0 -68
  23. data/lib/rex/encoder/alpha2/alpha_upper.rb +0 -79
  24. data/lib/rex/encoder/alpha2/generic.rb +0 -114
  25. data/lib/rex/encoder/alpha2/unicode_mixed.rb +0 -117
  26. data/lib/rex/encoder/alpha2/unicode_upper.rb +0 -129
  27. data/lib/rex/encoder/ndr.rb +0 -89
  28. data/lib/rex/encoder/ndr.rb.ut.rb +0 -44
  29. data/lib/rex/encoder/nonalpha.rb +0 -61
  30. data/lib/rex/encoder/nonupper.rb +0 -64
  31. data/lib/rex/encoder/xdr.rb +0 -106
  32. data/lib/rex/encoder/xdr.rb.ut.rb +0 -29
  33. data/lib/rex/encoder/xor.rb +0 -69
  34. data/lib/rex/encoder/xor/dword.rb +0 -13
  35. data/lib/rex/encoder/xor/dword_additive.rb +0 -13
  36. data/lib/rex/encoders/xor_dword.rb +0 -35
  37. data/lib/rex/encoders/xor_dword_additive.rb +0 -53
  38. data/lib/rex/encoders/xor_dword_additive.rb.ut.rb +0 -12
  39. data/lib/rex/encoding/xor.rb +0 -20
  40. data/lib/rex/encoding/xor.rb.ts.rb +0 -14
  41. data/lib/rex/encoding/xor/byte.rb +0 -15
  42. data/lib/rex/encoding/xor/byte.rb.ut.rb +0 -21
  43. data/lib/rex/encoding/xor/dword.rb +0 -21
  44. data/lib/rex/encoding/xor/dword.rb.ut.rb +0 -15
  45. data/lib/rex/encoding/xor/dword_additive.rb +0 -92
  46. data/lib/rex/encoding/xor/dword_additive.rb.ut.rb +0 -15
  47. data/lib/rex/encoding/xor/exceptions.rb +0 -17
  48. data/lib/rex/encoding/xor/generic.rb +0 -146
  49. data/lib/rex/encoding/xor/generic.rb.ut.rb +0 -120
  50. data/lib/rex/encoding/xor/qword.rb +0 -15
  51. data/lib/rex/encoding/xor/word.rb +0 -21
  52. data/lib/rex/encoding/xor/word.rb.ut.rb +0 -13
  53. data/lib/rex/exceptions.rb +0 -275
  54. data/lib/rex/exceptions.rb.ut.rb +0 -44
  55. data/lib/rex/exploitation/cmdstager.rb +0 -9
  56. data/lib/rex/exploitation/cmdstager/base.rb +0 -175
  57. data/lib/rex/exploitation/cmdstager/debug_asm.rb +0 -142
  58. data/lib/rex/exploitation/cmdstager/debug_write.rb +0 -136
  59. data/lib/rex/exploitation/cmdstager/tftp.rb +0 -63
  60. data/lib/rex/exploitation/cmdstager/vbs.rb +0 -128
  61. data/lib/rex/exploitation/egghunter.rb +0 -277
  62. data/lib/rex/exploitation/egghunter.rb.ut.rb +0 -25
  63. data/lib/rex/exploitation/encryptjs.rb +0 -77
  64. data/lib/rex/exploitation/heaplib.js.b64 +0 -331
  65. data/lib/rex/exploitation/heaplib.rb +0 -94
  66. data/lib/rex/exploitation/javascriptosdetect.rb +0 -897
  67. data/lib/rex/exploitation/obfuscatejs.rb +0 -335
  68. data/lib/rex/exploitation/omelet.rb +0 -320
  69. data/lib/rex/exploitation/omelet.rb.ut.rb +0 -13
  70. data/lib/rex/exploitation/opcodedb.rb +0 -818
  71. data/lib/rex/exploitation/opcodedb.rb.ut.rb +0 -279
  72. data/lib/rex/exploitation/seh.rb +0 -92
  73. data/lib/rex/exploitation/seh.rb.ut.rb +0 -19
  74. data/lib/rex/file.rb +0 -112
  75. data/lib/rex/file.rb.ut.rb +0 -16
  76. data/lib/rex/image_source.rb +0 -12
  77. data/lib/rex/image_source/disk.rb +0 -60
  78. data/lib/rex/image_source/image_source.rb +0 -46
  79. data/lib/rex/image_source/memory.rb +0 -37
  80. data/lib/rex/io/bidirectional_pipe.rb +0 -157
  81. data/lib/rex/io/datagram_abstraction.rb +0 -35
  82. data/lib/rex/io/ring_buffer.rb +0 -364
  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 -97
  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 -136
  133. data/lib/rex/parser/nmap_xml.rb +0 -137
  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 -16
  323. data/lib/rex/proto/ntlm/message.rb +0 -536
  324. data/lib/rex/proto/ntlm/utils.rb +0 -764
  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 -66
  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 -1163
  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 -298
  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,16 +0,0 @@
1
- module Rex
2
- module Proto
3
- module NTLM
4
- module Exceptions
5
-
6
- class NTLMMissingChallenge < ::RuntimeError
7
- def to_s
8
- "Unable to complete, no challenge key found"
9
- end
10
- end
11
-
12
- end
13
- end
14
- end
15
- end
16
-
@@ -1,536 +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
- CRYPT = Rex::Proto::NTLM::Crypt
61
-
62
-
63
- class << Message
64
- def parse(str)
65
- m = Type0.new
66
- m.parse(str)
67
- case m.type
68
- when 1
69
- t = Type1.parse(str)
70
- when 2
71
- t = Type2.parse(str)
72
- when 3
73
- t = Type3.parse(str)
74
- else
75
- raise ArgumentError, "unknown type: #{m.type}"
76
- end
77
- t
78
- end
79
-
80
- def decode64(str)
81
- parse(Rex::Text::decode_base64(str))
82
- end
83
- end#self
84
-
85
- def has_flag?(flag)
86
- (self[:flag].value & CONST::FLAGS[flag]) == CONST::FLAGS[flag]
87
- end
88
-
89
- def set_flag(flag)
90
- self[:flag].value |= CONST::FLAGS[flag]
91
- end
92
-
93
- def dump_flags
94
- CONST::FLAG_KEYS.each{ |k| print(k, "=", flag?(k), "\n") }
95
- end
96
-
97
- def serialize
98
- deflag
99
- super + security_buffers.map{|n, f| f.value}.join
100
- end
101
-
102
- def encode64
103
- Rex::Text::encode_base64(serialize)
104
- end
105
-
106
- def decode64(str)
107
- parse(Rex::Text::decode_base64(str))
108
- end
109
-
110
- alias head_size size
111
-
112
- def data_size
113
- security_buffers.inject(0){|sum, a| sum += a[1].data_size}
114
- end
115
-
116
- def size
117
- head_size + data_size
118
- end
119
-
120
- private
121
-
122
- def security_buffers
123
- @alist.find_all{|n, f| f.instance_of?(BASE::SecurityBuffer)}
124
- end
125
-
126
- def deflag
127
- security_buffers.inject(head_size){|cur, a|
128
- a[1].offset = cur
129
- cur += a[1].data_size
130
- }
131
- end
132
-
133
- def data_edge
134
- security_buffers.map{ |n, f| f.active ? f.offset : size}.min
135
- end
136
-
137
- # sub class definitions
138
-
139
- Type0 = Message.define {
140
- string :sign, {:size => 8, :value => CONST::SSP_SIGN}
141
- int32LE :type, {:value => 0}
142
- }
143
-
144
- Type1 = Message.define {
145
- string :sign, {:size => 8, :value => CONST::SSP_SIGN}
146
- int32LE :type, {:value => 1}
147
- int32LE :flag, {:value => CONST::DEFAULT_FLAGS[:TYPE1] }
148
- security_buffer :domain, {:value => "", :active => false}
149
- security_buffer :workstation, {:value => "", :active => false}
150
- string :padding, {:size => 0, :value => "", :active => false }
151
- }
152
-
153
- class Type1
154
- class << Type1
155
- def parse(str)
156
- t = new
157
- t.parse(str)
158
- t
159
- end
160
- end
161
-
162
- def parse(str)
163
- super(str)
164
- enable(:domain) if has_flag?(:DOMAIN_SUPPLIED)
165
- enable(:workstation) if has_flag?(:WORKSTATION_SUPPLIED)
166
- super(str)
167
- if ( (len = data_edge - head_size) > 0)
168
- self.padding = "\0" * len
169
- super(str)
170
- end
171
- end
172
- end
173
-
174
- Type2 = Message.define{
175
- string :sign, {:size => 8, :value => CONST::SSP_SIGN}
176
- int32LE :type, {:value => 2}
177
- security_buffer :target_name, {:size => 0, :value => ""}
178
- int32LE :flag, {:value => CONST::DEFAULT_FLAGS[:TYPE2]}
179
- int64LE :challenge, {:value => 0}
180
- int64LE :context, {:value => 0, :active => false}
181
- security_buffer :target_info, {:value => "", :active => false}
182
- string :padding, {:size => 0, :value => "", :active => false }
183
- }
184
-
185
- class Type2
186
- class << Type2
187
- def parse(str)
188
- t = new
189
- t.parse(str)
190
- t
191
- end
192
- end
193
-
194
- def parse(str)
195
- super(str)
196
- if has_flag?(:TARGET_INFO)
197
- enable(:context)
198
- enable(:target_info)
199
- super(str)
200
- end
201
- if ( (len = data_edge - head_size) > 0)
202
- self.padding = "\0" * len
203
- super(str)
204
- end
205
- end
206
- #create a type 3 response base on a type2
207
- # This mehod is not compatible with windows 7 / 2008 r2
208
- # to make it compatible avpair Time and SPN must be handle as in utils
209
- def response(arg, opt = {})
210
- usr = arg[:user]
211
- pwd = arg[:password]
212
- if usr.nil? or pwd.nil?
213
- raise ArgumentError, "user and password have to be supplied"
214
- end
215
-
216
- if opt[:workstation]
217
- ws = opt[:workstation]
218
- else
219
- ws = ""
220
- end
221
-
222
- if opt[:client_challenge]
223
- cc = opt[:client_challenge]
224
- else
225
- cc = rand(CONST::MAX64)
226
- end
227
- cc = Rex::Text::pack_int64le(cc) if cc.is_a?(Integer)
228
- opt[:client_challenge] = cc
229
-
230
- if has_flag?(:OEM) and opt[:unicode]
231
- usr = Rex::Text::to_ascii(usr,'utf-16le')
232
- pwd = Rex::Text::to_ascii(pwd,'utf-16le')
233
- ws = Rex::Text::to_ascii(ws,'utf-16le')
234
- opt[:unicode] = false
235
- end
236
-
237
- if has_flag?(:UNICODE) and !opt[:unicode]
238
- usr = Rex::Text::to_unicode(usr,'utf-16le')
239
- pwd = Rex::Text::to_unicode(pwd,'utf-16le')
240
- ws = Rex::Text::to_unicode(ws,'utf-16le')
241
- opt[:unicode] = true
242
- end
243
-
244
- tgt = self.target_name
245
- ti = self.target_info
246
-
247
- chal = self[:challenge].serialize
248
-
249
- if opt[:ntlmv2]
250
- ar = { :ntlmv2_hash => CRYPT::ntlmv2_hash(usr, pwd, tgt, opt),
251
- :challenge => chal, :target_info => ti}
252
- lm_res = CRYPT::lmv2_response(ar, opt)
253
- ntlm_res = CRYPT::ntlmv2_response(ar, opt)
254
- elsif has_flag?(:NTLM2_KEY)
255
- ar = {:ntlm_hash => CRYPT::ntlm_hash(pwd, opt), :challenge => chal}
256
- lm_res, ntlm_res = CRYPT::ntlm2_session(ar, opt)
257
- else
258
- lm_res = CRYPT::lm_response(pwd, chal)
259
- ntlm_res = CRYPT::ntlm_response(pwd, chal)
260
- end
261
-
262
- Type3.create({
263
- :lm_response => lm_res,
264
- :ntlm_response => ntlm_res,
265
- :domain => tgt,
266
- :user => usr,
267
- :workstation => ws,
268
- :flag => self.flag
269
- })
270
- end
271
- end
272
-
273
-
274
- Type3 = Message.define{
275
- string :sign, {:size => 8, :value => CONST::SSP_SIGN}
276
- int32LE :type, {:value => 3}
277
- security_buffer :lm_response, {:value => ""}
278
- security_buffer :ntlm_response, {:value => ""}
279
- security_buffer :domain, {:value => ""}
280
- security_buffer :user, {:value => ""}
281
- security_buffer :workstation, {:value => ""}
282
- security_buffer :session_key, {:value => "", :active => false }
283
- int64LE :flag, {:value => 0, :active => false }
284
- }
285
-
286
- class Type3
287
- class << Type3
288
- def parse(str)
289
- t = new
290
- t.parse(str)
291
- t
292
- end
293
-
294
- def create(arg, opt ={})
295
- t = new
296
- t.lm_response = arg[:lm_response]
297
- t.ntlm_response = arg[:ntlm_response]
298
- t.domain = arg[:domain]
299
- t.user = arg[:user]
300
- t.workstation = arg[:workstation]
301
-
302
- if arg[:session_key]
303
- t.enable(:session_key)
304
- t.session_key = arg[session_key]
305
- end
306
- if arg[:flag]
307
- t.enable(:session_key)
308
- t.enable(:flag)
309
- t.flag = arg[:flag]
310
- end
311
- t
312
- end
313
- end#self
314
- end
315
-
316
- public
317
- #those class method have been merged from lib/rex/smb/utils
318
-
319
- #
320
- # Process Type 3 NTLM Message (in Base64)
321
- #
322
- # from http://www.innovation.ch/personal/ronald/ntlm.html
323
- #
324
- # struct {
325
- # byte protocol[8]; // 'N', 'T', 'L', 'M', 'S', 'S', 'P', '\0'
326
- # byte type; // 0x03
327
- # byte zero[3];
328
- #
329
- # short lm_resp_len; // LanManager response length (always 0x18)
330
- # short lm_resp_len; // LanManager response length (always 0x18)
331
- # short lm_resp_off; // LanManager response offset
332
- # byte zero[2];
333
- #
334
- # short nt_resp_len; // NT response length (always 0x18)
335
- # short nt_resp_len; // NT response length (always 0x18)
336
- # short nt_resp_off; // NT response offset
337
- # byte zero[2];
338
- #
339
- # short dom_len; // domain string length
340
- # short dom_len; // domain string length
341
- # short dom_off; // domain string offset (always 0x40)
342
- # byte zero[2];
343
- #
344
- # short user_len; // username string length
345
- # short user_len; // username string length
346
- # short user_off; // username string offset
347
- # byte zero[2];
348
- #
349
- # short host_len; // host string length
350
- # short host_len; // host string length
351
- # short host_off; // host string offset
352
- # byte zero[6];
353
- #
354
- # short msg_len; // message length
355
- # byte zero[2];
356
- #
357
- # short flags; // 0x8201
358
- # byte zero[2];
359
- #
360
- # byte dom[*]; // domain string (unicode UTF-16LE)
361
- # byte user[*]; // username string (unicode UTF-16LE)
362
- # byte host[*]; // host string (unicode UTF-16LE)
363
- # byte lm_resp[*]; // LanManager response
364
- # byte nt_resp[*]; // NT response
365
- # } type_3_message
366
- #
367
- def self.process_type3_message(message)
368
- decode = Rex::Text.decode_base64(message.strip)
369
- type = decode[8,1].unpack("C").first
370
- if (type == 3)
371
- lm_len = decode[12,2].unpack("v").first
372
- lm_offset = decode[16,2].unpack("v").first
373
- lm = decode[lm_offset, lm_len].unpack("H*").first
374
-
375
- nt_len = decode[20,2].unpack("v").first
376
- nt_offset = decode[24,2].unpack("v").first
377
- nt = decode[nt_offset, nt_len].unpack("H*").first
378
-
379
- dom_len = decode[28,2].unpack("v").first
380
- dom_offset = decode[32,2].unpack("v").first
381
- domain = decode[dom_offset, dom_len]
382
-
383
- user_len = decode[36,2].unpack("v").first
384
- user_offset = decode[40,2].unpack("v").first
385
- user = decode[user_offset, user_len]
386
-
387
- host_len = decode[44,2].unpack("v").first
388
- host_offset = decode[48,2].unpack("v").first
389
- host = decode[host_offset, host_len]
390
-
391
- return domain, user, host, lm, nt
392
- else
393
- return "", "", "", "", ""
394
- end
395
- end
396
-
397
-
398
-
399
- #
400
- # Process Type 1 NTLM Messages, return a Base64 Type 2 Message
401
- #
402
- def self.process_type1_message(message, nonce = "\x11\x22\x33\x44\x55\x66\x77\x88", win_domain = 'DOMAIN',
403
- win_name = 'SERVER', dns_name = 'server', dns_domain = 'example.com', downgrade = true)
404
-
405
- dns_name = Rex::Text.to_unicode(dns_name + "." + dns_domain)
406
- win_domain = Rex::Text.to_unicode(win_domain)
407
- dns_domain = Rex::Text.to_unicode(dns_domain)
408
- win_name = Rex::Text.to_unicode(win_name)
409
- decode = Rex::Text.decode_base64(message.strip)
410
-
411
- type = decode[8,1].unpack("C").first
412
-
413
- if (type == 1)
414
- # A type 1 message has been received, lets build a type 2 message response
415
-
416
- reqflags = decode[12,4]
417
- reqflags = reqflags.unpack("V").first
418
-
419
- if (reqflags & CONST::REQUEST_TARGET) == CONST::REQUEST_TARGET
420
-
421
- if (downgrade)
422
- # At this time NTLMv2 and signing requirements are not supported
423
- if (reqflags & CONST::NEGOTIATE_NTLM2_KEY) == CONST::NEGOTIATE_NTLM2_KEY
424
- reqflags = reqflags - CONST::NEGOTIATE_NTLM2_KEY
425
- end
426
- if (reqflags & CONST::NEGOTIATE_ALWAYS_SIGN) == CONST::NEGOTIATE_ALWAYS_SIGN
427
- reqflags = reqflags - CONST::NEGOTIATE_ALWAYS_SIGN
428
- end
429
- end
430
-
431
- flags = reqflags + CONST::TARGET_TYPE_DOMAIN + CONST::TARGET_TYPE_SERVER
432
- tid = true
433
-
434
- tidoffset = 48 + win_domain.length
435
- tidbuff =
436
- [2].pack('v') + # tid type, win domain
437
- [win_domain.length].pack('v') +
438
- win_domain +
439
- [1].pack('v') + # tid type, server name
440
- [win_name.length].pack('v') +
441
- win_name +
442
- [4].pack('v') + # tid type, domain name
443
- [dns_domain.length].pack('v') +
444
- dns_domain +
445
- [3].pack('v') + # tid type, dns_name
446
- [dns_name.length].pack('v') +
447
- dns_name
448
- else
449
- flags = CONST::NEGOTIATE_UNICODE + CONST::NEGOTIATE_NTLM
450
- tid = false
451
- end
452
-
453
- type2msg = "NTLMSSP\0" + # protocol, 8 bytes
454
- "\x02\x00\x00\x00" # type, 4 bytes
455
-
456
- if (tid)
457
- type2msg += # Target security info, 8 bytes. Filled if REQUEST_TARGET
458
- [win_domain.length].pack('v') + # Length, 2 bytes
459
- [win_domain.length].pack('v') # Allocated space, 2 bytes
460
- end
461
-
462
- type2msg +="\x30\x00\x00\x00" + # Offset, 4 bytes
463
- [flags].pack('V') + # flags, 4 bytes
464
- nonce + # the nonce, 8 bytes
465
- "\x00" * 8 # Context (all 0s), 8 bytes
466
-
467
- if (tid)
468
- type2msg += # Target information security buffer. Filled if REQUEST_TARGET
469
- [tidbuff.length].pack('v') + # Length, 2 bytes
470
- [tidbuff.length].pack('v') + # Allocated space, 2 bytes
471
- [tidoffset].pack('V') + # Offset, 4 bytes (usually \x48 + length of win_domain)
472
- win_domain + # Target name data (domain in unicode if REQUEST_UNICODE)
473
- # Target information data
474
- tidbuff + # Type, 2 bytes
475
- # Length, 2 bytes
476
- # Data (in unicode if REQUEST_UNICODE)
477
- "\x00\x00\x00\x00" # Terminator, 4 bytes, all \x00
478
- end
479
-
480
- type2msg = Rex::Text.encode_base64(type2msg).delete("\n") # base64 encode and remove the returns
481
- else
482
- # This is not a Type2 message
483
- type2msg = ""
484
- end
485
-
486
- return type2msg
487
- end
488
-
489
- #
490
- # Downgrading Type messages to LMv1/NTLMv1 and removing signing
491
- #
492
- def self.downgrade_type_message(message)
493
- decode = Rex::Text.decode_base64(message.strip)
494
-
495
- type = decode[8,1].unpack("C").first
496
-
497
- if (type > 0 and type < 4)
498
- reqflags = decode[12..15] if (type == 1 or type == 3)
499
- reqflags = decode[20..23] if (type == 2)
500
- reqflags = reqflags.unpack("V")
501
-
502
- # Remove NEGOTIATE_NTLMV2_KEY and NEGOTIATE_ALWAYS_SIGN, this lowers the negotiation
503
- # down to LMv1/NTLMv1.
504
- if (reqflags & CONST::NEGOTIATE_NTLM2_KEY) == CONST::NEGOTIATE_NTLM2_KEY
505
- reqflags = reqflags - CONST::NEGOTIATE_NTLM2_KEY
506
- end
507
- if (reqflags & CONST::NEGOTIATE_ALWAYS_SIGN) == CONST::NEGOTIATE_ALWAYS_SIGN
508
- reqflags = reqflags - CONST::NEGOTIATE_ALWAYS_SIGN
509
- end
510
-
511
- # Return the flags back to the decode so we can base64 it again
512
- flags = reqflags.to_s(16)
513
- 0.upto(8) do |idx|
514
- if (idx > flags.length)
515
- flags.insert(0, "0")
516
- end
517
- end
518
-
519
- idx = 0
520
- 0.upto(3) do |cnt|
521
- if (type == 2)
522
- decode[23-cnt] = [flags[idx,1]].pack("C")
523
- else
524
- decode[15-cnt] = [flags[idx,1]].pack("C")
525
- end
526
- idx += 2
527
- end
528
-
529
- end
530
- return Rex::Text.encode_base64(decode).delete("\n") # base64 encode and remove the returns
531
- end
532
-
533
- end
534
- end
535
- end
536
- end