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,56 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- $:.unshift(File.join(File.dirname(__FILE__), '..', '..', '..'))
4
-
5
- require 'rex/test'
6
- require 'rex/proto/dcerpc/packet'
7
-
8
- class Rex::Proto::DCERPC::Packet::UnitTest < Test::Unit::TestCase
9
-
10
- Klass = Rex::Proto::DCERPC::Packet
11
-
12
- def test_parse
13
-
14
- actual = Klass.make_bind('367abb81-9844-35f1-ad32-98f038001003', '2.0')
15
- 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
- assert_equal(expected, actual, 'bind')
17
-
18
- srand(0)
19
- actual = Klass.make_bind_fake_multi('367abb81-9844-35f1-ad32-98f038001003', '2.0')
20
- expected = [ "\005\000\v\003\020\000\000\0004\003\000\000\000\000\000\000\320\026\320\026\000\000\000\000\022\000\000\000\000\000\001\000u\300C\373\303g\t\323\025\362$WF\330X\214\002\000\001\000\004]\210\212\353\034\311\021\237\350\010\000+\020H`\002\000\000\000\001\000\001\000\346'W\256XQ\245\031MH\t\224s\320\363\305\000\000\002\000\004]\210\212\353\034\311\021\237\350\010\000+\020H`\002\000\000\000\002\000\001\000c\330\261\363\035\223\223\216\247 \301\t\271\177 \037\002\000\000\000\004]\210\212\353\034\311\021\237\350\010\000+\020H`\002\000\000\000\003\000\001\000\227\243\376\313r\267\034\"\200\200\2445\205&\350\364\001\000\003\000\004]\210\212\353\034\311\021\237\350\010\000+\020H`\002\000\000\000\004\000\001\000\204i*\272\037x\001A\347\2519#fw\v\256\002\000\003\000\004]\210\212\353\034\311\021\237\350\010\000+\020H`\002\000\000\000\005\000\001\000\200\216c5\214y\252T\313D\006\304/\177\364\203\004\000\000\000\004]\210\212\353\034\311\021\237\350\010\000+\020H`\002\000\000\000\006\000\001\000\264\350N\217\224\343\272\027\317\215uU01E\251\003\000\000\000\004]\210\212\353\034\311\021\237\350\010\000+\020H`\002\000\000\000\a\000\001\000_\305^\000q\262$\2420]\203b*\315p\347\005\000\001\000\004]\210\212\353\034\311\021\237\350\010\000+\020H`\002\000\000\000\010\000\001\000\177\000\212r+\272\177\027\273\202yb>\243\336{\003\000\002\000\004]\210\212\353\034\311\021\237\350\010\000+\020H`\002\000\000\000\t\000\001\000\256\343\224\3212\233\016):\301$\nV+h\v\002\000\003\000\004]\210\212\353\034\311\021\237\350\010\000+\020H`\002\000\000\000\n\000\001\000P \266\200&\023\256*s\270\274\350M\036\030}\002\000\003\000\004]\210\212\353\034\311\021\237\350\010\000+\020H`\002\000\000\000\v\000\001\000^\342k\rp(H\023_H\232\302\370\264C\354\005\000\002\000\004]\210\212\353\034\311\021\237\350\010\000+\020H`\002\000\000\000\f\000\001\000`\004\303\355\213\374V\315ymK\270\020\230\235\225\001\000\000\000\004]\210\212\353\034\311\021\237\350\010\000+\020H`\002\000\000\000\r\000\001\000\274yvu\275S\241h\240\344\373\373yF\325\037\005\000\003\000\004]\210\212\353\034\311\021\237\350\010\000+\020H`\002\000\000\000\016\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\017\000\001\000\270\230O)\022(\266\317\v\246o]\371\201\337v\004\000\000\000\004]\210\212\353\034\311\021\237\350\010\000+\020H`\002\000\000\000\020\000\001\000}\030C\322\357\003\352\314\346#\326\376\275\305\327+\000\000\003\000\004]\210\212\353\034\311\021\237\350\010\000+\020H`\002\000\000\000\021\000\001\000h\324\212\266\353\245}\234o\350\002\e\323\331\2275\003\000\002\000\004]\210\212\353\034\311\021\237\350\010\000+\020H`\002\000\000\000", 14]
21
- assert_equal(expected, actual, 'bind fake multi')
22
-
23
- actual = Klass.make_alter_context('367abb81-9844-35f1-ad32-98f038001003', '2.0')
24
- 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
- assert_equal(expected, actual, 'alter context')
26
-
27
- actual = Klass.make_request(1337, '', 1024, 7331)
28
- 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
- assert_equal(expected, actual, 'make_request with no stub')
30
-
31
- actual = Klass.make_request(1337, 'ABCD', 1024, 7331)
32
- 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
- assert_equal(expected, actual, 'make_request with stub')
34
-
35
- actual = Klass.make_request(1337, 'ABCD', 3, 7331)
36
- 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
- assert_equal(expected, actual, 'make_request with 2 frags')
38
-
39
- actual = Klass.make_request(1337, 'ABCD', 1, 7331)
40
- 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
- assert_equal(expected, actual, 'make_request with 4 frags')
42
-
43
-
44
- actual = Klass.make_request(1337, '', 1024, 7331, '367abb81-9844-35f1-ad32-98f038001003')
45
- 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
- assert_equal(expected, actual, 'make_request with no stub, with object_id')
47
-
48
- actual = Klass.make_request(1337, 'ABCD', 1024, 7331, '367abb81-9844-35f1-ad32-98f038001003')
49
- 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
- assert_equal(expected, actual, 'make_request with stub, with object_id')
51
-
52
- actual = Klass.make_request(1337, 'ABCD', 1, 7331, '367abb81-9844-35f1-ad32-98f038001003')
53
- 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
- assert_equal(expected, actual, 'make_request with 4 frags')
55
- end
56
- end
@@ -1,187 +0,0 @@
1
- require 'rex/proto/dcerpc/uuid'
2
- require 'rex/proto/dcerpc/exceptions'
3
-
4
- module Rex
5
- module Proto
6
- module DCERPC
7
- class Response
8
-
9
- attr_accessor :frag_len, :auth_len, :type, :vers_major, :vers_minor
10
- attr_accessor :flags, :data_rep, :call_id, :max_frag_xmit, :max_frag_recv
11
- attr_accessor :assoc_group, :sec_addr_len, :sec_addr, :num_results
12
- attr_accessor :nack_reason, :xfer_syntax_uuid, :xfer_syntax_vers
13
- attr_accessor :ack_reason, :ack_result, :ack_xfer_syntax_uuid, :ack_xfer_syntax_vers
14
- attr_accessor :alloc_hint, :context_id, :cancel_cnt, :status, :stub_data
15
- attr_accessor :raw
16
-
17
- # Create a new DCERPC::Response object
18
- # This can be initialized in two ways:
19
- # 1) Call .new() with the first 10 bytes of packet, then call parse on the rest
20
- # 2) Call .new() with the full packet contents
21
- def initialize(data)
22
-
23
- self.ack_result = []
24
- self.ack_reason = []
25
- self.ack_xfer_syntax_uuid = []
26
- self.ack_xfer_syntax_vers = []
27
-
28
- if (! data or data.length < 10)
29
- raise Rex::Proto::DCERPC::Exceptions::InvalidPacket, 'DCERPC response packet is incomplete'
30
- end
31
-
32
- if (data.length == 10)
33
- self.frag_len = data[8,2].unpack('v')[0]
34
- self.raw = data
35
- end
36
-
37
- if (data.length > 10)
38
- self.raw = data
39
- self.parse
40
- end
41
- end
42
-
43
- # Parse the contents of a DCERPC response packet and fill out all the fields
44
- def parse(body = '')
45
- self.raw = self.raw + body
46
- self.type = self.raw[2,1].unpack('C')[0]
47
-
48
- uuid = Rex::Proto::DCERPC::UUID
49
- data = self.raw
50
-
51
-
52
- if(not data)
53
- raise Rex::Proto::DCERPC::Exceptions::InvalidPacket, 'DCERPC response packet is incomplete'
54
- end
55
-
56
- # BIND_ACK == 12, ALTER_CONTEXT_RESP == 15
57
- if (self.type == 12 or self.type == 15)
58
-
59
- # Decode most of the DCERPC header
60
- self.vers_major,
61
- self.vers_minor,
62
- trash,
63
- self.flags,
64
- self.data_rep,
65
- self.frag_len,
66
- self.auth_len,
67
- self.call_id,
68
- self.max_frag_xmit,
69
- self.max_frag_recv,
70
- self.assoc_group,
71
- self.sec_addr_len = data.unpack('CCCCNvvVvvVv')
72
-
73
-
74
- if(not self.frag_len or data.length < self.frag_len)
75
- raise Rex::Proto::DCERPC::Exceptions::InvalidPacket, 'DCERPC response packet is incomplete'
76
- end
77
-
78
- # Keep an offset into the packet handy
79
- x = 0
80
-
81
- # XXX This is still somewhat broken (4 digit ports)
82
- self.sec_addr = data[26, self.sec_addr_len]
83
-
84
- # Move the pointer into the packet forward
85
- x += 26 + self.sec_addr_len
86
-
87
- # Align the pointer on a dword boundary
88
- while (x % 4 != 0)
89
- x += 1
90
- end
91
-
92
- # Figure out how many results we have (multiple-context binds)
93
- self.num_results = data[ x, 4 ].unpack('V')[0]
94
-
95
- # Move the pointer to the ack_result[0] offset
96
- x += 4
97
-
98
- # Initialize the ack_result index
99
- ack = 0
100
-
101
- # Scan through all results and add them to the result arrays
102
- while ack < self.num_results
103
- self.ack_result[ack] = data[ x + 0, 2 ].unpack('v')[0]
104
- self.ack_reason[ack] = data[ x + 2, 2 ].unpack('v')[0]
105
- self.ack_xfer_syntax_uuid[ack] = uuid.uuid_unpack(data[ x + 4, 16 ])
106
- self.ack_xfer_syntax_vers[ack] = data[ x + 20, 4 ].unpack('V')[0]
107
- x += 24
108
- ack += 1
109
- end
110
-
111
- # End of BIND_ACK || ALTER_CONTEXT_RESP
112
- end
113
-
114
- # BIND_NACK == 13
115
- if (self.type == 13)
116
-
117
- # Decode most of the DCERPC header
118
- self.vers_major,
119
- self.vers_minor,
120
- trash,
121
- self.flags,
122
- self.data_rep,
123
- self.frag_len,
124
- self.auth_len,
125
- self.call_id,
126
- self.nack_reason = data.unpack('CCCCNvvVv')
127
- end
128
-
129
- # RESPONSE == 2
130
- if (self.type == 2)
131
-
132
- # Decode the DCERPC response header
133
- self.vers_major,
134
- self.vers_minor,
135
- trash,
136
- self.flags,
137
- self.data_rep,
138
- self.frag_len,
139
- self.auth_len,
140
- self.call_id,
141
- self.alloc_hint,
142
- self.context_id,
143
- self.cancel_cnt = data.unpack('CCCCNvvVVvC')
144
-
145
- # Error out if the whole header was not read
146
- if !(self.alloc_hint and self.context_id and self.cancel_cnt)
147
- raise Rex::Proto::DCERPC::Exceptions::InvalidPacket, 'DCERPC response packet is incomplete'
148
- end
149
-
150
- # Put the application data into self.stub_data
151
- self.stub_data = data[data.length - self.alloc_hint, 0xffff]
152
- # End of RESPONSE
153
- end
154
-
155
- # FAULT == 3
156
- if (self.type == 3)
157
-
158
- # Decode the DCERPC response header
159
- self.vers_major,
160
- self.vers_minor,
161
- trash,
162
- self.flags,
163
- self.data_rep,
164
- self.frag_len,
165
- self.auth_len,
166
- self.call_id,
167
- self.alloc_hint,
168
- self.context_id,
169
- self.cancel_cnt,
170
- trash,
171
- self.status = data.unpack('CCCCNvvVVvCCV')
172
-
173
- # Put the application data into self.stub_data
174
- self.stub_data = data[data.length - self.alloc_hint, 0xffff]
175
- # End of FAULT
176
- end
177
-
178
- end
179
-
180
- protected
181
- # attr_accessor :raw
182
-
183
- end
184
- end
185
- end
186
- end
187
-
@@ -1,15 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- $:.unshift(File.join(File.dirname(__FILE__), '..', '..', '..'))
4
-
5
- require 'rex/test'
6
- require 'rex/proto/dcerpc/response'
7
-
8
- class Rex::Proto::DCERPC::Response::UnitTest < Test::Unit::TestCase
9
-
10
- Klass = Rex::Proto::DCERPC::Response
11
-
12
- def test_parse
13
-
14
- end
15
- end
@@ -1,84 +0,0 @@
1
- module Rex
2
- module Proto
3
- module DCERPC
4
- class UUID
5
-
6
-
7
- @@known_uuids =
8
- {
9
- 'MGMT' => [ 'afa8bd80-7d8a-11c9-bef4-08002b102989', '2.0' ],
10
- 'REMACT' => [ '4d9f4ab8-7d1c-11cf-861e-0020af6e7c57', '0.0' ],
11
- 'SYSACT' => [ '000001a0-0000-0000-c000-000000000046', '0.0' ],
12
- 'LSA_DS' => [ '3919286a-b10c-11d0-9ba8-00c04fd92ef5', '0.0' ],
13
- 'SAMR' => [ '12345778-1234-abcd-ef00-0123456789ac', '1.0' ],
14
- 'MSMQ' => [ 'fdb3a030-065f-11d1-bb9b-00a024ea5525', '1.0' ],
15
- 'EVENTLOG' => [ '82273fdc-e32a-18c3-3f78-827929dc23ea', '0.0' ],
16
- 'SVCCTL' => [ '367abb81-9844-35f1-ad32-98f038001003', '2.0' ],
17
- 'SRVSVC' => [ '4b324fc8-1670-01d3-1278-5a47bf6ee188', '3.0' ],
18
- 'PNP' => [ '8d9f4e40-a03d-11ce-8f69-08003e30051b', '1.0' ]
19
- }
20
-
21
- # Convert a UUID in binary format to the string representation
22
- def self.uuid_unpack(uuid_bin)
23
- raise ArgumentError if uuid_bin.length != 16
24
- sprintf("%.8x-%.4x-%.4x-%.4x-%s",
25
- uuid_bin[ 0, 4].unpack('V')[0],
26
- uuid_bin[ 4, 2].unpack('v')[0],
27
- uuid_bin[ 6, 2].unpack('v')[0],
28
- uuid_bin[ 8, 2].unpack('n')[0],
29
- uuid_bin[10, 6].unpack('H*')[0]
30
- )
31
- end
32
-
33
- # Validate a text based UUID
34
- def self.is? (uuid_str)
35
- raise ArgumentError if !uuid_str
36
- if uuid_str.match(/^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$/)
37
- return true
38
- else
39
- return false
40
- end
41
- end
42
-
43
- # Convert a UUID in string format to the binary representation
44
- def self.uuid_pack (uuid_str)
45
- raise ArgumentError if !self.is?(uuid_str)
46
- parts = uuid_str.split('-')
47
- [ parts[0].hex, parts[1].hex, parts[2].hex, parts[3].hex ].pack('Vvvn') + [ parts[4] ].pack('H*')
48
- end
49
-
50
- # Provide the common TransferSyntax UUID in packed format
51
- def self.xfer_syntax_uuid ()
52
- self.uuid_pack('8a885d04-1ceb-11c9-9fe8-08002b104860')
53
- end
54
-
55
- # Provide the common TransferSyntax version number
56
- def self.xfer_syntax_vers ()
57
- '2.0'
58
- end
59
-
60
- # Determine the UUID string for the DCERPC service with this name
61
- def self.uuid_by_name (name)
62
- if @@known_uuids.key?(name)
63
- @@known_uuids[name][0]
64
- end
65
- end
66
-
67
- # Determine the common version number for the DCERPC service with this name
68
- def self.vers_by_name (name)
69
- if @@known_uuids.key?(name)
70
- @@known_uuids[name][1]
71
- end
72
- end
73
-
74
- # Convert a string or number in float format to two unique numbers 2.0 => [2, 0]
75
- def self.vers_to_nums (vers)
76
- vers_maj = vers.to_i
77
- vers_min = ((vers.to_f - vers.to_i) * 10).to_i
78
- return vers_maj, vers_min
79
- end
80
-
81
- end
82
- end
83
- end
84
- end
@@ -1,46 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- $:.unshift(File.join(File.dirname(__FILE__), '..', '..', '..'))
4
-
5
- require 'rex/test'
6
- require 'rex/exceptions'
7
- require 'rex/proto/dcerpc/uuid'
8
-
9
- class Rex::Proto::DCERPC::UUID::UnitTest < Test::Unit::TestCase
10
-
11
- Klass = Rex::Proto::DCERPC::UUID
12
-
13
- def test_is_uuid
14
- assert(Klass.is?('afa8bd80-7d8a-11c9-bef4-08002b102989'), 'valid')
15
- assert(!Klass.is?('afa8bd80-7d8a-11c9-bef4-08002b10298'), 'too short')
16
- assert(!Klass.is?('afa8bd80-7d8a-11c9-bef4-08002b10298Z'), 'invalid character')
17
- assert(!Klass.is?('afa8bd80-7d8a-11c9-bef4a08002b10298a'), 'missing dash')
18
- assert(!Klass.is?('afa8bd80-7d8a-11c9-bef-a08002b10298a'), 'dash in wrong place')
19
- assert_raise(Rex::ArgumentError, 'pack - too short') { Klass.is?(nil) }
20
- end
21
-
22
- def test_lookup
23
- assert_equal(Klass.uuid_by_name('MGMT'), 'afa8bd80-7d8a-11c9-bef4-08002b102989', 'uuid_by_name')
24
- assert_equal(Klass.vers_by_name('MGMT'), '2.0', 'vers_by_name')
25
- assert(!Klass.uuid_by_name('NO_SUCH_UUID'), 'uuid_by_name - invalid')
26
- assert(!Klass.vers_by_name('NO_SUCH_UUID'), 'vers_by_name - invalid')
27
- end
28
-
29
- def test_packing
30
- uuid = '367abb81-9844-35f1-ad32-98f038001003'
31
- assert_equal(Klass.uuid_pack(uuid), "\201\273z6D\230\3615\2552\230\3608\000\020\003", 'pack')
32
- assert_equal(Klass.uuid_unpack("\201\273z6D\230\3615\2552\230\3608\000\020\003"), uuid, 'unpack')
33
- assert_raise(Rex::ArgumentError, 'pack - too short') { Klass.uuid_pack('foo') }
34
- assert_raise(Rex::ArgumentError, 'unpack - too short') { Klass.uuid_unpack('foo') }
35
- end
36
-
37
- def test_xfer
38
- assert_equal(Klass.xfer_syntax_uuid(), "\004]\210\212\353\034\311\021\237\350\010\000+\020H`", 'xfer_syntax_uuid')
39
- assert_equal(Klass.xfer_syntax_vers(), '2.0', 'xfer_syntax_vers')
40
- end
41
-
42
- def test_vers
43
- assert_equal(Klass.vers_to_nums('2.0'), [2, 0], 'vers_to_nums')
44
- assert_equal(Klass.vers_to_nums('2'), [2, 0], 'vers_to_nums (short)')
45
- end
46
- end
@@ -1,7 +0,0 @@
1
- # $Id: dhcp.rb 9970 2010-08-07 06:45:02Z jduck $
2
- #
3
- # DHCP Server support written by scriptjunkie
4
- #
5
-
6
- require 'rex/proto/dhcp/constants'
7
- require 'rex/proto/dhcp/server'
@@ -1,33 +0,0 @@
1
- # $Id: constants.rb 9990 2010-08-13 03:11:30Z jduck $
2
- require 'rex/proto/dhcp'
3
-
4
- module Rex
5
- module Proto
6
- module DHCP
7
-
8
- Request = 1
9
- Response = 2
10
-
11
- DHCPDiscover = 1
12
- DHCPOffer = 2
13
- DHCPRequest = 3
14
- DHCPAck = 5
15
-
16
- DHCPMagic = "\x63\x82\x53\x63"
17
-
18
- OpDHCPServer = 0x36
19
- OpLeaseTime = 0x33
20
- OpSubnetMask = 1
21
- OpRouter = 3
22
- OpDns = 6
23
- OpEnd = 0xff
24
-
25
- PXEMagic = "\xF1\x00\x74\x7E"
26
- OpPXEMagic = 0xD0
27
- OpPXEConfigFile = 0xD1
28
- OpPXEPathPrefix = 0xD2
29
- OpPXERebootTime = 0xD3
30
-
31
- end
32
- end
33
- end
@@ -1,292 +0,0 @@
1
- # $Id: server.rb 12030 2011-03-20 00:33:02Z scriptjunkie $
2
-
3
- require 'rex/socket'
4
- require 'rex/proto/dhcp'
5
-
6
- module Rex
7
- module Proto
8
- module DHCP
9
-
10
- ##
11
- #
12
- # DHCP Server class
13
- # not completely configurable - written specifically for a PXE server
14
- # - scriptjunkie
15
- ##
16
-
17
- class Server
18
-
19
- include Rex::Socket
20
-
21
- def initialize(hash, context = {})
22
- self.listen_host = '0.0.0.0' # clients don't already have addresses. Needs to be 0.0.0.0
23
- self.listen_port = 67 # mandatory (bootps)
24
- self.context = context
25
- self.sock = nil
26
-
27
- @shutting_down = false
28
-
29
- self.myfilename = hash['FILENAME'] || ""
30
- self.myfilename << ("\x00" * (128 - self.myfilename.length))
31
-
32
- source = hash['SRVHOST'] || Rex::Socket.source_address
33
- self.ipstring = Rex::Socket.addr_aton(source)
34
-
35
- ipstart = hash['DHCPIPSTART']
36
- if ipstart
37
- self.start_ip = Rex::Socket.addr_atoi(ipstart)
38
- else
39
- # Use the first 3 octects of the server's IP to construct the
40
- # default range of x.x.x.32-254
41
- self.start_ip = "#{self.ipstring[0..2]}\x20".unpack("N").first
42
- end
43
- self.current_ip = start_ip
44
-
45
- ipend = hash['DHCPIPEND']
46
- if ipend
47
- self.end_ip = Rex::Socket.addr_atoi(ipend)
48
- else
49
- # Use the first 3 octects of the server's IP to construct the
50
- # default range of x.x.x.32-254
51
- self.end_ip = "#{self.ipstring[0..2]}\xfe".unpack("N").first
52
- end
53
-
54
- # netmask
55
- netmask = hash['NETMASK'] || "255.255.255.0"
56
- self.netmaskn = Rex::Socket.addr_aton(netmask)
57
-
58
- # router
59
- router = hash['ROUTER'] || source
60
- self.router = Rex::Socket.addr_aton(router)
61
-
62
- # dns
63
- dnsserv = hash['DNSSERVER'] || source
64
- self.dnsserv = Rex::Socket.addr_aton(dnsserv)
65
-
66
- # broadcast
67
- if hash['BROADCAST']
68
- self.broadcasta = Rex::Socket.addr_aton(hash['BROADCAST'])
69
- else
70
- self.broadcasta = Rex::Socket.addr_itoa( self.start_ip | (Rex::Socket.addr_ntoi(self.netmaskn) ^ 0xffffffff) )
71
- end
72
-
73
- self.served = {}
74
- if (hash['SERVEONCE'])
75
- self.serveOnce = true
76
- else
77
- self.serveOnce = false
78
- end
79
-
80
- if (hash['PXE'])
81
- self.servePXE = true
82
- else
83
- self.servePXE = false
84
- end
85
-
86
- self.leasetime = 600
87
- self.relayip = "\x00\x00\x00\x00" # relay ip - not currently suported
88
- self.pxeconfigfile = "update2"
89
- self.pxepathprefix = ""
90
- self.pxereboottime = 2000
91
- end
92
-
93
-
94
- # Start the DHCP server
95
- def start
96
- self.sock = Rex::Socket::Udp.create(
97
- 'LocalHost' => listen_host,
98
- 'LocalPort' => listen_port,
99
- 'Context' => context
100
- )
101
-
102
- self.thread = Rex::ThreadFactory.spawn("DHCPServerMonitor", false) {
103
- monitor_socket
104
- }
105
- end
106
-
107
- # Stop the DHCP server
108
- def stop
109
- @shutting_down = true
110
- self.thread.kill
111
- self.sock.close rescue nil
112
- end
113
-
114
-
115
- # Set an option
116
- def set_option(opts)
117
- allowed_options = [
118
- :serveOnce, :servePXE, :relayip, :leasetime, :dnsserv,
119
- :pxeconfigfile, :pxepathprefix, :pxereboottime, :router
120
- ]
121
-
122
- opts.each_pair { |k,v|
123
- next if not v
124
- if allowed_options.include?(k)
125
- self.instance_variable_set("@#{k}", v)
126
- end
127
- }
128
- end
129
-
130
-
131
- # Send a single packet to the specified host
132
- def send_packet(ip, pkt)
133
- port = 68 # bootpc
134
- if ip
135
- self.sock.sendto( pkt, ip, port )
136
- else
137
- if not self.sock.sendto( pkt, '255.255.255.255', port )
138
- self.sock.sendto( pkt, self.broadcasta, port )
139
- end
140
- end
141
- end
142
-
143
- attr_accessor :listen_host, :listen_port, :context, :leasetime, :relayip, :router, :dnsserv
144
- attr_accessor :sock, :thread, :myfilename, :ipstring, :served, :serveOnce
145
- attr_accessor :current_ip, :start_ip, :end_ip, :broadcasta, :netmaskn
146
- attr_accessor :servePXE, :pxeconfigfile, :pxepathprefix, :pxereboottime
147
-
148
- protected
149
-
150
-
151
- # See if there is anything to do.. If so, dispatch it.
152
- def monitor_socket
153
- while true
154
- rds = [@sock]
155
- wds = []
156
- eds = [@sock]
157
-
158
- r,w,e = ::IO.select(rds,wds,eds,1)
159
-
160
- if (r != nil and r[0] == self.sock)
161
- buf,host,port = self.sock.recvfrom(65535)
162
- # Lame compatabilitiy :-/
163
- from = [host, port]
164
- dispatch_request(from, buf)
165
- end
166
-
167
- end
168
- end
169
-
170
- def dhcpoption(type, val = nil)
171
- ret = ''
172
- ret << [type].pack('C')
173
-
174
- if val
175
- ret << [val.length].pack('C') + val
176
- end
177
-
178
- ret
179
- end
180
-
181
- # Dispatch a packet that we received
182
- def dispatch_request(from, buf)
183
- type = buf.unpack('C').first
184
- if (type != Request)
185
- #dlog("Unknown DHCP request type: #{type}")
186
- return
187
- end
188
-
189
- # parse out the members
190
- hwtype = buf[1,1]
191
- hwlen = buf[2,1].unpack("C").first
192
- hops = buf[3,1]
193
- txid = buf[4..7]
194
- elapsed = buf[8..9]
195
- flags = buf[10..11]
196
- clientip = buf[12..15]
197
- givenip = buf[16..19]
198
- nextip = buf[20..23]
199
- relayip = buf[24..27]
200
- clienthwaddr = buf[28..(27+hwlen)]
201
- servhostname = buf[44..107]
202
- filename = buf[108..235]
203
- magic = buf[236..239]
204
-
205
- if (magic != DHCPMagic)
206
- #dlog("Invalid DHCP request - bad magic.")
207
- return
208
- end
209
-
210
- messageType = 0
211
- pxeclient = false
212
-
213
- # options parsing loop
214
- spot = 240
215
- while (spot < buf.length - 3)
216
- optionType = buf[spot,1].unpack("C").first
217
- break if optionType == 0xff
218
-
219
- optionLen = buf[spot + 1,1].unpack("C").first
220
- optionValue = buf[(spot + 2)..(spot + optionLen + 1)]
221
- spot = spot + optionLen + 2
222
- if optionType == 53
223
- messageType = optionValue.unpack("C").first
224
- elsif optionType == 150
225
- pxeclient = true
226
- end
227
- end
228
-
229
- if pxeclient == false && self.servePXE == true
230
- #dlog ("No tftp server request; ignoring (probably not PXE client)")
231
- return
232
- end
233
-
234
- # prepare response
235
- pkt = [Response].pack('C')
236
- pkt << buf[1..7] #hwtype, hwlen, hops, txid
237
- pkt << "\x00\x00\x00\x00" #elapsed, flags
238
- pkt << clientip
239
- if messageType == DHCPDiscover
240
- # give next ip address (not super reliable high volume but it should work for a basic server)
241
- self.current_ip += 1
242
- if self.current_ip > self.end_ip
243
- self.current_ip = self.start_ip
244
- end
245
- end
246
- pkt << Rex::Socket.addr_iton(self.current_ip)
247
- pkt << self.ipstring #next server ip
248
- pkt << self.relayip
249
- pkt << buf[28..43] #client hw address
250
- pkt << servhostname
251
- pkt << self.myfilename
252
- pkt << magic
253
- pkt << "\x35\x01" #Option
254
-
255
- if messageType == DHCPDiscover #DHCP Discover - send DHCP Offer
256
- pkt << [DHCPOffer].pack('C')
257
- # check if already served based on hw addr (MAC address)
258
- if self.serveOnce == true && self.served.has_key?(buf[28..43])
259
- #dlog ("Already served; allowing normal boot")
260
- return
261
- end
262
- elsif messageType == DHCPRequest #DHCP Request - send DHCP ACK
263
- pkt << [DHCPAck].pack('C')
264
- # now we ignore their discovers (but we'll respond to requests in case a packet was lost)
265
- self.served.merge!( buf[28..43] => true )
266
- else
267
- #dlog("ignoring unknown DHCP request - type #{messageType}")
268
- return
269
- end
270
-
271
- # Options!
272
- pkt << dhcpoption(OpDHCPServer, self.ipstring)
273
- pkt << dhcpoption(OpLeaseTime, [self.leasetime].pack('N'))
274
- pkt << dhcpoption(OpSubnetMask, self.netmaskn)
275
- pkt << dhcpoption(OpRouter, self.router)
276
- pkt << dhcpoption(OpDns, self.dnsserv)
277
- pkt << dhcpoption(OpPXEMagic, PXEMagic)
278
- pkt << dhcpoption(OpPXEConfigFile, self.pxeconfigfile)
279
- pkt << dhcpoption(OpPXEPathPrefix, self.pxepathprefix)
280
- pkt << dhcpoption(OpPXERebootTime, [self.pxereboottime].pack('N'))
281
- pkt << dhcpoption(OpEnd)
282
-
283
- pkt << ("\x00" * 32) #padding
284
-
285
- send_packet(nil, pkt)
286
- end
287
-
288
- end
289
-
290
- end
291
- end
292
- end