librex 0.0.68 → 0.0.70

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (528) hide show
  1. checksums.yaml +15 -0
  2. data/README.markdown +1 -1
  3. data/Rakefile +18 -16
  4. data/lib/rex.rb +14 -10
  5. data/lib/rex/LICENSE +2 -2
  6. data/lib/rex/arch.rb +76 -76
  7. data/lib/rex/arch/sparc.rb +57 -58
  8. data/lib/rex/arch/x86.rb +506 -496
  9. data/lib/rex/assembly/nasm.rb +83 -84
  10. data/lib/rex/compat.rb +228 -173
  11. data/lib/rex/constants.rb +47 -37
  12. data/lib/rex/elfparsey.rb +0 -3
  13. data/lib/rex/elfparsey/elf.rb +107 -110
  14. data/lib/rex/elfparsey/elfbase.rb +244 -247
  15. data/lib/rex/elfparsey/exceptions.rb +0 -3
  16. data/lib/rex/elfscan.rb +0 -3
  17. data/lib/rex/elfscan/scanner.rb +184 -166
  18. data/lib/rex/elfscan/search.rb +35 -38
  19. data/lib/rex/encoder/alpha2.rb +1 -2
  20. data/lib/rex/encoder/alpha2/alpha_mixed.rb +52 -53
  21. data/lib/rex/encoder/alpha2/alpha_upper.rb +62 -63
  22. data/lib/rex/encoder/alpha2/generic.rb +77 -78
  23. data/lib/rex/encoder/alpha2/unicode_mixed.rb +101 -97
  24. data/lib/rex/encoder/alpha2/unicode_upper.rb +106 -107
  25. data/lib/rex/encoder/bloxor/bloxor.rb +326 -0
  26. data/lib/rex/encoder/ndr.rb +68 -68
  27. data/lib/rex/encoder/nonalpha.rb +50 -51
  28. data/lib/rex/encoder/nonupper.rb +50 -51
  29. data/lib/rex/encoder/xdr.rb +78 -78
  30. data/lib/rex/encoder/xor.rb +52 -53
  31. data/lib/rex/encoder/xor/dword.rb +1 -2
  32. data/lib/rex/encoder/xor/dword_additive.rb +1 -2
  33. data/lib/rex/encoders/xor_dword.rb +17 -18
  34. data/lib/rex/encoders/xor_dword_additive.rb +35 -36
  35. data/lib/rex/encoding/xor.rb +0 -1
  36. data/lib/rex/encoding/xor/byte.rb +3 -4
  37. data/lib/rex/encoding/xor/dword.rb +3 -4
  38. data/lib/rex/encoding/xor/dword_additive.rb +72 -73
  39. data/lib/rex/encoding/xor/exceptions.rb +2 -3
  40. data/lib/rex/encoding/xor/generic.rb +129 -130
  41. data/lib/rex/encoding/xor/qword.rb +3 -4
  42. data/lib/rex/encoding/xor/word.rb +3 -4
  43. data/lib/rex/exceptions.rb +100 -101
  44. data/lib/rex/exploitation/cmdstager.rb +3 -3
  45. data/lib/rex/exploitation/cmdstager/base.rb +170 -156
  46. data/lib/rex/exploitation/cmdstager/bourne.rb +105 -0
  47. data/lib/rex/exploitation/cmdstager/debug_asm.rb +110 -113
  48. data/lib/rex/exploitation/cmdstager/debug_write.rb +106 -109
  49. data/lib/rex/exploitation/cmdstager/echo.rb +164 -0
  50. data/lib/rex/exploitation/cmdstager/printf.rb +122 -0
  51. data/lib/rex/exploitation/cmdstager/tftp.rb +34 -27
  52. data/lib/rex/exploitation/cmdstager/vbs.rb +95 -98
  53. data/lib/rex/exploitation/egghunter.rb +359 -346
  54. data/lib/rex/exploitation/encryptjs.rb +60 -60
  55. data/lib/rex/exploitation/heaplib.rb +76 -76
  56. data/lib/rex/exploitation/js.rb +6 -0
  57. data/lib/rex/exploitation/js/detect.rb +69 -0
  58. data/lib/rex/exploitation/js/memory.rb +81 -0
  59. data/lib/rex/exploitation/js/network.rb +84 -0
  60. data/lib/rex/exploitation/js/utils.rb +33 -0
  61. data/lib/rex/exploitation/jsobfu.rb +448 -424
  62. data/lib/rex/exploitation/obfuscatejs.rb +301 -301
  63. data/lib/rex/exploitation/omelet.rb +257 -257
  64. data/lib/rex/exploitation/opcodedb.rb +699 -699
  65. data/lib/rex/exploitation/ropdb.rb +189 -0
  66. data/lib/rex/exploitation/seh.rb +68 -68
  67. data/lib/rex/file.rb +96 -49
  68. data/lib/rex/image_source.rb +0 -3
  69. data/lib/rex/image_source/disk.rb +45 -48
  70. data/lib/rex/image_source/image_source.rb +33 -36
  71. data/lib/rex/image_source/memory.rb +17 -20
  72. data/lib/rex/io/bidirectional_pipe.rb +118 -115
  73. data/lib/rex/io/datagram_abstraction.rb +13 -14
  74. data/lib/rex/io/ring_buffer.rb +273 -273
  75. data/lib/rex/io/stream.rb +284 -284
  76. data/lib/rex/io/stream_abstraction.rb +183 -181
  77. data/lib/rex/io/stream_server.rb +193 -193
  78. data/lib/rex/job_container.rb +167 -167
  79. data/lib/rex/logging.rb +0 -1
  80. data/lib/rex/logging/log_dispatcher.rb +113 -113
  81. data/lib/rex/logging/log_sink.rb +17 -17
  82. data/lib/rex/logging/sinks/flatfile.rb +36 -36
  83. data/lib/rex/logging/sinks/stderr.rb +27 -27
  84. data/lib/rex/mac_oui.rb +16572 -16571
  85. data/lib/rex/machparsey.rb +0 -1
  86. data/lib/rex/machparsey/exceptions.rb +0 -1
  87. data/lib/rex/machparsey/mach.rb +160 -161
  88. data/lib/rex/machparsey/machbase.rb +367 -368
  89. data/lib/rex/machscan.rb +0 -1
  90. data/lib/rex/machscan/scanner.rb +175 -176
  91. data/lib/rex/mime/encoding.rb +17 -0
  92. data/lib/rex/mime/header.rb +58 -58
  93. data/lib/rex/mime/message.rb +140 -137
  94. data/lib/rex/mime/part.rb +41 -12
  95. data/lib/rex/nop/opty2.rb +90 -90
  96. data/lib/rex/nop/opty2_tables.rb +273 -273
  97. data/lib/rex/ole.rb +0 -4
  98. data/lib/rex/ole/clsid.rb +26 -30
  99. data/lib/rex/ole/difat.rb +121 -125
  100. data/lib/rex/ole/directory.rb +205 -209
  101. data/lib/rex/ole/direntry.rb +217 -221
  102. data/lib/rex/ole/fat.rb +79 -83
  103. data/lib/rex/ole/header.rb +178 -182
  104. data/lib/rex/ole/minifat.rb +49 -53
  105. data/lib/rex/ole/propset.rb +113 -117
  106. data/lib/rex/ole/samples/create_ole.rb +8 -9
  107. data/lib/rex/ole/samples/dir.rb +10 -11
  108. data/lib/rex/ole/samples/dump_stream.rb +14 -15
  109. data/lib/rex/ole/samples/ole_info.rb +5 -6
  110. data/lib/rex/ole/storage.rb +372 -376
  111. data/lib/rex/ole/stream.rb +33 -37
  112. data/lib/rex/ole/substorage.rb +20 -24
  113. data/lib/rex/ole/util.rb +137 -141
  114. data/lib/rex/parser/acunetix_nokogiri.rb +398 -398
  115. data/lib/rex/parser/apple_backup_manifestdb.rb +116 -116
  116. data/lib/rex/parser/appscan_nokogiri.rb +359 -359
  117. data/lib/rex/parser/arguments.rb +88 -88
  118. data/lib/rex/parser/burp_session_nokogiri.rb +258 -258
  119. data/lib/rex/parser/ci_nokogiri.rb +184 -184
  120. data/lib/rex/parser/foundstone_nokogiri.rb +334 -333
  121. data/lib/rex/parser/fusionvm_nokogiri.rb +94 -94
  122. data/lib/rex/parser/ini.rb +167 -167
  123. data/lib/rex/parser/ip360_aspl_xml.rb +84 -84
  124. data/lib/rex/parser/ip360_xml.rb +77 -77
  125. data/lib/rex/parser/mbsa_nokogiri.rb +224 -224
  126. data/lib/rex/parser/nessus_xml.rb +100 -100
  127. data/lib/rex/parser/netsparker_xml.rb +89 -75
  128. data/lib/rex/parser/nexpose_raw_nokogiri.rb +677 -677
  129. data/lib/rex/parser/nexpose_simple_nokogiri.rb +322 -322
  130. data/lib/rex/parser/nexpose_xml.rb +105 -105
  131. data/lib/rex/parser/nmap_nokogiri.rb +386 -386
  132. data/lib/rex/parser/nmap_xml.rb +116 -116
  133. data/lib/rex/parser/nokogiri_doc_mixin.rb +223 -221
  134. data/lib/rex/parser/openvas_nokogiri.rb +162 -162
  135. data/lib/rex/parser/outpost24_nokogiri.rb +239 -0
  136. data/lib/rex/parser/retina_xml.rb +90 -90
  137. data/lib/rex/parser/unattend.rb +171 -0
  138. data/lib/rex/parser/wapiti_nokogiri.rb +89 -89
  139. data/lib/rex/payloads/win32/common.rb +14 -14
  140. data/lib/rex/payloads/win32/kernel.rb +36 -36
  141. data/lib/rex/payloads/win32/kernel/common.rb +32 -32
  142. data/lib/rex/payloads/win32/kernel/recovery.rb +27 -27
  143. data/lib/rex/payloads/win32/kernel/stager.rb +170 -170
  144. data/lib/rex/peparsey.rb +0 -3
  145. data/lib/rex/peparsey/exceptions.rb +0 -3
  146. data/lib/rex/peparsey/pe.rb +196 -199
  147. data/lib/rex/peparsey/pe_memdump.rb +35 -38
  148. data/lib/rex/peparsey/pebase.rb +1633 -1652
  149. data/lib/rex/peparsey/section.rb +115 -124
  150. data/lib/rex/pescan.rb +0 -3
  151. data/lib/rex/pescan/analyze.rb +351 -351
  152. data/lib/rex/pescan/scanner.rb +182 -182
  153. data/lib/rex/pescan/search.rb +59 -59
  154. data/lib/rex/platforms/windows.rb +37 -37
  155. data/lib/rex/poly.rb +111 -110
  156. data/lib/rex/poly/block.rb +419 -417
  157. data/lib/rex/poly/machine.rb +12 -0
  158. data/lib/rex/poly/machine/machine.rb +829 -0
  159. data/lib/rex/poly/machine/x86.rb +508 -0
  160. data/lib/rex/poly/register.rb +70 -70
  161. data/lib/rex/poly/register/x86.rb +22 -22
  162. data/lib/rex/post.rb +0 -1
  163. data/lib/rex/post/dir.rb +35 -36
  164. data/lib/rex/post/file.rb +140 -141
  165. data/lib/rex/post/file_stat.rb +198 -199
  166. data/lib/rex/post/io.rb +167 -168
  167. data/lib/rex/post/meterpreter.rb +1 -1
  168. data/lib/rex/post/meterpreter/channel.rb +389 -390
  169. data/lib/rex/post/meterpreter/channel_container.rb +33 -34
  170. data/lib/rex/post/meterpreter/channels/pool.rb +129 -130
  171. data/lib/rex/post/meterpreter/channels/pools/file.rb +35 -36
  172. data/lib/rex/post/meterpreter/channels/pools/stream_pool.rb +72 -73
  173. data/lib/rex/post/meterpreter/channels/stream.rb +62 -63
  174. data/lib/rex/post/meterpreter/client.rb +442 -436
  175. data/lib/rex/post/meterpreter/client_core.rb +326 -310
  176. data/lib/rex/post/meterpreter/dependencies.rb +0 -1
  177. data/lib/rex/post/meterpreter/extension.rb +12 -13
  178. data/lib/rex/post/meterpreter/extensions/espia/espia.rb +35 -36
  179. data/lib/rex/post/meterpreter/extensions/extapi/adsi/adsi.rb +71 -0
  180. data/lib/rex/post/meterpreter/extensions/extapi/clipboard/clipboard.rb +169 -0
  181. data/lib/rex/post/meterpreter/extensions/extapi/extapi.rb +45 -0
  182. data/lib/rex/post/meterpreter/extensions/extapi/service/service.rb +104 -0
  183. data/lib/rex/post/meterpreter/extensions/extapi/tlv.rb +77 -0
  184. data/lib/rex/post/meterpreter/extensions/extapi/window/window.rb +56 -0
  185. data/lib/rex/post/meterpreter/extensions/extapi/wmi/wmi.rb +75 -0
  186. data/lib/rex/post/meterpreter/extensions/incognito/incognito.rb +70 -71
  187. data/lib/rex/post/meterpreter/extensions/kiwi/kiwi.rb +361 -0
  188. data/lib/rex/post/meterpreter/extensions/kiwi/tlv.rb +76 -0
  189. data/lib/rex/post/meterpreter/extensions/lanattacks/dhcp/dhcp.rb +78 -0
  190. data/lib/rex/post/meterpreter/extensions/lanattacks/lanattacks.rb +22 -78
  191. data/lib/rex/post/meterpreter/extensions/lanattacks/tftp/tftp.rb +49 -0
  192. data/lib/rex/post/meterpreter/extensions/lanattacks/tlv.rb +4 -4
  193. data/lib/rex/post/meterpreter/extensions/mimikatz/mimikatz.rb +128 -0
  194. data/lib/rex/post/meterpreter/extensions/mimikatz/tlv.rb +16 -0
  195. data/lib/rex/post/meterpreter/extensions/networkpug/networkpug.rb +38 -39
  196. data/lib/rex/post/meterpreter/extensions/networkpug/tlv.rb +1 -1
  197. data/lib/rex/post/meterpreter/extensions/priv/fs.rb +95 -96
  198. data/lib/rex/post/meterpreter/extensions/priv/passwd.rb +39 -40
  199. data/lib/rex/post/meterpreter/extensions/priv/priv.rb +80 -85
  200. data/lib/rex/post/meterpreter/extensions/sniffer/sniffer.rb +94 -95
  201. data/lib/rex/post/meterpreter/extensions/stdapi/constants.rb +207 -147
  202. data/lib/rex/post/meterpreter/extensions/stdapi/fs/dir.rb +258 -259
  203. data/lib/rex/post/meterpreter/extensions/stdapi/fs/file.rb +366 -301
  204. data/lib/rex/post/meterpreter/extensions/stdapi/fs/file_stat.rb +72 -73
  205. data/lib/rex/post/meterpreter/extensions/stdapi/fs/io.rb +24 -25
  206. data/lib/rex/post/meterpreter/extensions/stdapi/net/arp.rb +59 -0
  207. data/lib/rex/post/meterpreter/extensions/stdapi/net/config.rb +227 -149
  208. data/lib/rex/post/meterpreter/extensions/stdapi/net/interface.rb +107 -108
  209. data/lib/rex/post/meterpreter/extensions/stdapi/net/netstat.rb +97 -0
  210. data/lib/rex/post/meterpreter/extensions/stdapi/net/resolve.rb +106 -0
  211. data/lib/rex/post/meterpreter/extensions/stdapi/net/route.rb +41 -42
  212. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket.rb +102 -101
  213. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/tcp_client_channel.rb +151 -152
  214. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/tcp_server_channel.rb +142 -142
  215. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/udp_channel.rb +185 -185
  216. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/api_constants.rb +38118 -38117
  217. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/buffer_item.rb +7 -7
  218. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_advapi32.rb +2086 -2084
  219. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_crypt32.rb +15 -15
  220. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_iphlpapi.rb +80 -80
  221. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_kernel32.rb +3835 -3833
  222. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_netapi32.rb +84 -28
  223. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_ntdll.rb +151 -137
  224. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_shell32.rb +15 -6
  225. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_user32.rb +3155 -3155
  226. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_version.rb +41 -0
  227. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_wlanapi.rb +70 -70
  228. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_wldap32.rb +128 -0
  229. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_ws2_32.rb +596 -596
  230. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll.rb +310 -301
  231. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_function.rb +71 -61
  232. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_helper.rb +100 -100
  233. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_wrapper.rb +14 -14
  234. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/mock_magic.rb +488 -488
  235. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/multicall.rb +273 -264
  236. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/platform_util.rb +5 -5
  237. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/railgun.rb +240 -238
  238. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/tlv.rb +17 -15
  239. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/type/pointer_util.rb +61 -61
  240. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/util.rb +654 -635
  241. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/win_const_manager.rb +49 -49
  242. data/lib/rex/post/meterpreter/extensions/stdapi/stdapi.rb +103 -102
  243. data/lib/rex/post/meterpreter/extensions/stdapi/sys/config.rb +98 -68
  244. data/lib/rex/post/meterpreter/extensions/stdapi/sys/event_log.rb +165 -166
  245. data/lib/rex/post/meterpreter/extensions/stdapi/sys/event_log_subsystem/event_record.rb +16 -17
  246. data/lib/rex/post/meterpreter/extensions/stdapi/sys/power.rb +34 -36
  247. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process.rb +363 -364
  248. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/image.rb +102 -103
  249. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/io.rb +28 -29
  250. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/memory.rb +303 -304
  251. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/thread.rb +113 -114
  252. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry.rb +260 -261
  253. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_key.rb +165 -166
  254. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_value.rb +69 -70
  255. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/remote_registry_key.rb +160 -161
  256. data/lib/rex/post/meterpreter/extensions/stdapi/sys/thread.rb +143 -144
  257. data/lib/rex/post/meterpreter/extensions/stdapi/tlv.rb +29 -12
  258. data/lib/rex/post/meterpreter/extensions/stdapi/ui.rb +230 -231
  259. data/lib/rex/post/meterpreter/extensions/stdapi/webcam/webcam.rb +181 -44
  260. data/lib/rex/post/meterpreter/inbound_packet_handler.rb +12 -13
  261. data/lib/rex/post/meterpreter/object_aliases.rb +56 -57
  262. data/lib/rex/post/meterpreter/packet.rb +591 -592
  263. data/lib/rex/post/meterpreter/packet_dispatcher.rb +506 -496
  264. data/lib/rex/post/meterpreter/packet_parser.rb +72 -73
  265. data/lib/rex/post/meterpreter/packet_response_waiter.rb +56 -57
  266. data/lib/rex/post/meterpreter/ui/console.rb +112 -112
  267. data/lib/rex/post/meterpreter/ui/console/command_dispatcher.rb +53 -53
  268. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/core.rb +911 -854
  269. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/espia.rb +86 -86
  270. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/extapi.rb +65 -0
  271. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/extapi/adsi.rb +198 -0
  272. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/extapi/clipboard.rb +444 -0
  273. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/extapi/service.rb +199 -0
  274. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/extapi/window.rb +118 -0
  275. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/extapi/wmi.rb +108 -0
  276. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/incognito.rb +220 -220
  277. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/kiwi.rb +509 -0
  278. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/lanattacks.rb +60 -0
  279. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/lanattacks/dhcp.rb +254 -0
  280. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/lanattacks/tftp.rb +159 -0
  281. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/mimikatz.rb +182 -0
  282. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/networkpug.rb +173 -173
  283. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv.rb +40 -40
  284. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/elevate.rb +75 -77
  285. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/passwd.rb +30 -30
  286. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/timestomp.rb +105 -105
  287. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/sniffer.rb +182 -182
  288. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi.rb +37 -37
  289. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/fs.rb +504 -482
  290. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/net.rb +401 -330
  291. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/sys.rb +883 -581
  292. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/ui.rb +296 -299
  293. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/webcam.rb +320 -153
  294. data/lib/rex/post/meterpreter/ui/console/interactive_channel.rb +78 -78
  295. data/lib/rex/post/permission.rb +0 -1
  296. data/lib/rex/post/process.rb +39 -40
  297. data/lib/rex/post/thread.rb +41 -42
  298. data/lib/rex/post/ui.rb +35 -36
  299. data/lib/rex/proto/addp.rb +218 -0
  300. data/lib/rex/proto/dcerpc/client.rb +344 -344
  301. data/lib/rex/proto/dcerpc/exceptions.rb +128 -128
  302. data/lib/rex/proto/dcerpc/handle.rb +32 -32
  303. data/lib/rex/proto/dcerpc/ndr.rb +56 -56
  304. data/lib/rex/proto/dcerpc/packet.rb +249 -245
  305. data/lib/rex/proto/dcerpc/response.rb +170 -170
  306. data/lib/rex/proto/dcerpc/uuid.rb +65 -65
  307. data/lib/rex/proto/dcerpc/wdscp.rb +3 -0
  308. data/lib/rex/proto/dcerpc/wdscp/constants.rb +89 -0
  309. data/lib/rex/proto/dcerpc/wdscp/packet.rb +94 -0
  310. data/lib/rex/proto/dhcp.rb +0 -1
  311. data/lib/rex/proto/dhcp/constants.rb +0 -1
  312. data/lib/rex/proto/dhcp/server.rb +303 -304
  313. data/lib/rex/proto/drda/constants.rb +1 -1
  314. data/lib/rex/proto/drda/packet.rb +186 -186
  315. data/lib/rex/proto/drda/utils.rb +104 -104
  316. data/lib/rex/proto/http.rb +1 -0
  317. data/lib/rex/proto/http/client.rb +692 -820
  318. data/lib/rex/proto/http/client_request.rb +472 -0
  319. data/lib/rex/proto/http/handler.rb +25 -25
  320. data/lib/rex/proto/http/handler/erb.rb +104 -104
  321. data/lib/rex/proto/http/handler/proc.rb +37 -37
  322. data/lib/rex/proto/http/header.rb +149 -149
  323. data/lib/rex/proto/http/packet.rb +388 -382
  324. data/lib/rex/proto/http/request.rb +332 -335
  325. data/lib/rex/proto/http/response.rb +132 -72
  326. data/lib/rex/proto/http/server.rb +348 -338
  327. data/lib/rex/proto/iax2/call.rb +310 -310
  328. data/lib/rex/proto/iax2/client.rb +197 -197
  329. data/lib/rex/proto/iax2/codecs/alaw.rb +4 -4
  330. data/lib/rex/proto/iax2/codecs/mulaw.rb +4 -4
  331. data/lib/rex/proto/ipmi.rb +57 -0
  332. data/lib/rex/proto/ipmi/channel_auth_reply.rb +88 -0
  333. data/lib/rex/proto/ipmi/open_session_reply.rb +35 -0
  334. data/lib/rex/proto/ipmi/rakp2.rb +35 -0
  335. data/lib/rex/proto/ipmi/utils.rb +125 -0
  336. data/lib/rex/proto/natpmp.rb +1 -5
  337. data/lib/rex/proto/natpmp/constants.rb +4 -4
  338. data/lib/rex/proto/natpmp/packet.rb +25 -25
  339. data/lib/rex/proto/ntlm/base.rb +271 -271
  340. data/lib/rex/proto/ntlm/constants.rb +61 -61
  341. data/lib/rex/proto/ntlm/crypt.rb +348 -352
  342. data/lib/rex/proto/ntlm/exceptions.rb +3 -3
  343. data/lib/rex/proto/ntlm/message.rb +468 -471
  344. data/lib/rex/proto/ntlm/utils.rb +746 -746
  345. data/lib/rex/proto/pjl.rb +30 -0
  346. data/lib/rex/proto/pjl/client.rb +162 -0
  347. data/lib/rex/proto/proxy/socks4a.rb +440 -440
  348. data/lib/rex/proto/rfb.rb +1 -8
  349. data/lib/rex/proto/rfb/cipher.rb +46 -49
  350. data/lib/rex/proto/rfb/client.rb +179 -182
  351. data/lib/rex/proto/rfb/constants.rb +18 -21
  352. data/lib/rex/proto/smb/client.rb +1954 -1843
  353. data/lib/rex/proto/smb/constants.rb +533 -516
  354. data/lib/rex/proto/smb/crypt.rb +21 -21
  355. data/lib/rex/proto/smb/evasions.rb +43 -43
  356. data/lib/rex/proto/smb/exceptions.rb +791 -791
  357. data/lib/rex/proto/smb/simpleclient.rb +142 -286
  358. data/lib/rex/proto/smb/simpleclient/open_file.rb +106 -0
  359. data/lib/rex/proto/smb/simpleclient/open_pipe.rb +57 -0
  360. data/lib/rex/proto/smb/utils.rb +81 -81
  361. data/lib/rex/proto/sunrpc/client.rb +158 -158
  362. data/lib/rex/proto/tftp.rb +0 -1
  363. data/lib/rex/proto/tftp/client.rb +289 -289
  364. data/lib/rex/proto/tftp/constants.rb +9 -10
  365. data/lib/rex/proto/tftp/server.rb +466 -467
  366. data/lib/rex/random_identifier_generator.rb +176 -0
  367. data/lib/rex/registry.rb +1 -1
  368. data/lib/rex/registry/hive.rb +88 -88
  369. data/lib/rex/registry/lfkey.rb +25 -25
  370. data/lib/rex/registry/nodekey.rb +30 -30
  371. data/lib/rex/registry/regf.rb +10 -10
  372. data/lib/rex/registry/valuekey.rb +43 -43
  373. data/lib/rex/registry/valuelist.rb +13 -13
  374. data/lib/rex/ropbuilder/rop.rb +254 -253
  375. data/lib/rex/script.rb +21 -22
  376. data/lib/rex/script/base.rb +51 -50
  377. data/lib/rex/script/meterpreter.rb +2 -2
  378. data/lib/rex/service.rb +24 -24
  379. data/lib/rex/service_manager.rb +132 -132
  380. data/lib/rex/services/local_relay.rb +398 -398
  381. data/lib/rex/socket.rb +758 -763
  382. data/lib/rex/socket/comm.rb +95 -95
  383. data/lib/rex/socket/comm/local.rb +507 -440
  384. data/lib/rex/socket/ip.rb +118 -118
  385. data/lib/rex/socket/parameters.rb +351 -350
  386. data/lib/rex/socket/range_walker.rb +445 -368
  387. data/lib/rex/socket/ssl_tcp.rb +323 -317
  388. data/lib/rex/socket/ssl_tcp_server.rb +173 -158
  389. data/lib/rex/socket/subnet_walker.rb +48 -48
  390. data/lib/rex/socket/switch_board.rb +259 -259
  391. data/lib/rex/socket/tcp.rb +58 -56
  392. data/lib/rex/socket/tcp_server.rb +42 -42
  393. data/lib/rex/socket/udp.rb +152 -152
  394. data/lib/rex/sslscan/result.rb +200 -0
  395. data/lib/rex/sslscan/scanner.rb +205 -0
  396. data/lib/rex/struct2.rb +0 -1
  397. data/lib/rex/struct2/c_struct.rb +162 -163
  398. data/lib/rex/struct2/c_struct_template.rb +21 -22
  399. data/lib/rex/struct2/constant.rb +6 -7
  400. data/lib/rex/struct2/element.rb +30 -31
  401. data/lib/rex/struct2/generic.rb +60 -61
  402. data/lib/rex/struct2/restraint.rb +40 -41
  403. data/lib/rex/struct2/s_string.rb +60 -61
  404. data/lib/rex/struct2/s_struct.rb +97 -98
  405. data/lib/rex/sync.rb +0 -1
  406. data/lib/rex/sync/event.rb +62 -72
  407. data/lib/rex/sync/read_write_lock.rb +149 -149
  408. data/lib/rex/sync/ref.rb +42 -42
  409. data/lib/rex/sync/thread_safe.rb +59 -59
  410. data/lib/rex/text.rb +1803 -1315
  411. data/lib/rex/thread_factory.rb +25 -25
  412. data/lib/rex/time.rb +44 -44
  413. data/lib/rex/transformer.rb +91 -91
  414. data/lib/rex/ui/interactive.rb +265 -265
  415. data/lib/rex/ui/output.rb +66 -60
  416. data/lib/rex/ui/progress_tracker.rb +79 -79
  417. data/lib/rex/ui/subscriber.rb +144 -134
  418. data/lib/rex/ui/text/color.rb +76 -76
  419. data/lib/rex/ui/text/dispatcher_shell.rb +512 -505
  420. data/lib/rex/ui/text/input.rb +96 -96
  421. data/lib/rex/ui/text/input/buffer.rb +58 -58
  422. data/lib/rex/ui/text/input/readline.rb +114 -114
  423. data/lib/rex/ui/text/input/socket.rb +77 -77
  424. data/lib/rex/ui/text/input/stdio.rb +24 -24
  425. data/lib/rex/ui/text/irb_shell.rb +45 -41
  426. data/lib/rex/ui/text/output.rb +64 -60
  427. data/lib/rex/ui/text/output/buffer.rb +42 -42
  428. data/lib/rex/ui/text/output/buffer/stdout.rb +25 -0
  429. data/lib/rex/ui/text/output/file.rb +24 -24
  430. data/lib/rex/ui/text/output/socket.rb +24 -24
  431. data/lib/rex/ui/text/output/stdio.rb +29 -29
  432. data/lib/rex/ui/text/output/tee.rb +36 -36
  433. data/lib/rex/ui/text/progress_tracker.rb +37 -37
  434. data/lib/rex/ui/text/shell.rb +371 -361
  435. data/lib/rex/ui/text/table.rb +320 -284
  436. data/lib/rex/zip.rb +0 -1
  437. data/lib/rex/zip/archive.rb +115 -94
  438. data/lib/rex/zip/blocks.rb +101 -100
  439. data/lib/rex/zip/entry.rb +108 -99
  440. data/lib/rex/zip/jar.rb +261 -206
  441. data/lib/rex/zip/samples/comment.rb +1 -2
  442. data/lib/rex/zip/samples/mkwar.rb +12 -13
  443. data/lib/rex/zip/samples/mkzip.rb +1 -2
  444. data/lib/rex/zip/samples/recursive.rb +29 -30
  445. metadata +424 -446
  446. data/lib/rex/arch/sparc.rb.ut.rb +0 -19
  447. data/lib/rex/arch/x86.rb.ut.rb +0 -94
  448. data/lib/rex/assembly/nasm.rb.ut.rb +0 -23
  449. data/lib/rex/encoder/ndr.rb.ut.rb +0 -45
  450. data/lib/rex/encoder/xdr.rb.ut.rb +0 -30
  451. data/lib/rex/encoders/xor_dword_additive.rb.ut.rb +0 -13
  452. data/lib/rex/encoding/xor.rb.ts.rb +0 -15
  453. data/lib/rex/encoding/xor/byte.rb.ut.rb +0 -22
  454. data/lib/rex/encoding/xor/dword.rb.ut.rb +0 -16
  455. data/lib/rex/encoding/xor/dword_additive.rb.ut.rb +0 -16
  456. data/lib/rex/encoding/xor/generic.rb.ut.rb +0 -121
  457. data/lib/rex/encoding/xor/word.rb.ut.rb +0 -14
  458. data/lib/rex/exceptions.rb.ut.rb +0 -45
  459. data/lib/rex/exploitation/egghunter.rb.ut.rb +0 -28
  460. data/lib/rex/exploitation/javascriptosdetect.js +0 -1014
  461. data/lib/rex/exploitation/javascriptosdetect.rb +0 -43
  462. data/lib/rex/exploitation/omelet.rb.ut.rb +0 -27
  463. data/lib/rex/exploitation/opcodedb.rb.ut.rb +0 -280
  464. data/lib/rex/exploitation/seh.rb.ut.rb +0 -20
  465. data/lib/rex/file.rb.ut.rb +0 -17
  466. data/lib/rex/io/ring_buffer.rb.ut.rb +0 -135
  467. data/lib/rex/nop/opty2.rb.ut.rb +0 -24
  468. data/lib/rex/parser/arguments.rb.ut.rb +0 -68
  469. data/lib/rex/parser/ini.rb.ut.rb +0 -30
  470. data/lib/rex/post/meterpreter/extensions/stdapi/railgun.rb.ts.rb +0 -18
  471. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/api_constants.rb.ut.rb +0 -39
  472. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/buffer_item.rb.ut.rb +0 -37
  473. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll.rb.ut.rb +0 -52
  474. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_function.rb.ut.rb +0 -43
  475. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_helper.rb.ut.rb +0 -128
  476. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_wrapper.rb.ut.rb +0 -64
  477. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/platform_util.rb.ut.rb +0 -29
  478. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/railgun.rb.ut.rb +0 -155
  479. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/type/pointer_util.rb.ut.rb +0 -128
  480. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/win_const_manager.rb.ut.rb +0 -124
  481. data/lib/rex/proto.rb.ts.rb +0 -9
  482. data/lib/rex/proto/dcerpc.rb.ts.rb +0 -10
  483. data/lib/rex/proto/dcerpc/client.rb.ut.rb +0 -492
  484. data/lib/rex/proto/dcerpc/handle.rb.ut.rb +0 -86
  485. data/lib/rex/proto/dcerpc/ndr.rb.ut.rb +0 -42
  486. data/lib/rex/proto/dcerpc/packet.rb.ut.rb +0 -57
  487. data/lib/rex/proto/dcerpc/response.rb.ut.rb +0 -16
  488. data/lib/rex/proto/dcerpc/uuid.rb.ut.rb +0 -47
  489. data/lib/rex/proto/drda.rb.ts.rb +0 -18
  490. data/lib/rex/proto/drda/constants.rb.ut.rb +0 -24
  491. data/lib/rex/proto/drda/packet.rb.ut.rb +0 -110
  492. data/lib/rex/proto/drda/utils.rb.ut.rb +0 -85
  493. data/lib/rex/proto/http.rb.ts.rb +0 -13
  494. data/lib/rex/proto/http/client.rb.ut.rb +0 -96
  495. data/lib/rex/proto/http/handler/erb.rb.ut.rb +0 -22
  496. data/lib/rex/proto/http/handler/erb.rb.ut.rb.rhtml +0 -1
  497. data/lib/rex/proto/http/handler/proc.rb.ut.rb +0 -25
  498. data/lib/rex/proto/http/header.rb.ut.rb +0 -47
  499. data/lib/rex/proto/http/packet.rb.ut.rb +0 -166
  500. data/lib/rex/proto/http/request.rb.ut.rb +0 -215
  501. data/lib/rex/proto/http/response.rb.ut.rb +0 -150
  502. data/lib/rex/proto/http/server.rb.ut.rb +0 -80
  503. data/lib/rex/proto/ntlm.rb.ut.rb +0 -181
  504. data/lib/rex/proto/rfb.rb.ut.rb +0 -40
  505. data/lib/rex/proto/smb.rb.ts.rb +0 -9
  506. data/lib/rex/proto/smb/client.rb.ut.rb +0 -224
  507. data/lib/rex/proto/smb/constants.rb.ut.rb +0 -19
  508. data/lib/rex/proto/smb/simpleclient.rb.ut.rb +0 -129
  509. data/lib/rex/proto/smb/utils.rb.ut.rb +0 -21
  510. data/lib/rex/proto/tftp/server.rb.ut.rb +0 -29
  511. data/lib/rex/service_manager.rb.ut.rb +0 -33
  512. data/lib/rex/socket.rb.ut.rb +0 -108
  513. data/lib/rex/socket/comm/local.rb.ut.rb +0 -76
  514. data/lib/rex/socket/parameters.rb.ut.rb +0 -52
  515. data/lib/rex/socket/range_walker.rb.ut.rb +0 -56
  516. data/lib/rex/socket/ssl_tcp.rb.ut.rb +0 -40
  517. data/lib/rex/socket/ssl_tcp_server.rb.ut.rb +0 -62
  518. data/lib/rex/socket/subnet_walker.rb.ut.rb +0 -29
  519. data/lib/rex/socket/switch_board.rb.ut.rb +0 -53
  520. data/lib/rex/socket/tcp.rb.ut.rb +0 -65
  521. data/lib/rex/socket/tcp_server.rb.ut.rb +0 -45
  522. data/lib/rex/socket/udp.rb.ut.rb +0 -45
  523. data/lib/rex/test.rb +0 -36
  524. data/lib/rex/text.rb.ut.rb +0 -193
  525. data/lib/rex/transformer.rb.ut.rb +0 -39
  526. data/lib/rex/ui/text/color.rb.ut.rb +0 -19
  527. data/lib/rex/ui/text/progress_tracker.rb.ut.rb +0 -35
  528. data/lib/rex/ui/text/table.rb.ut.rb +0 -56
@@ -14,188 +14,251 @@ module Ui
14
14
  ###
15
15
  class Console::CommandDispatcher::Stdapi::Net
16
16
 
17
- Klass = Console::CommandDispatcher::Stdapi::Net
18
-
19
- include Console::CommandDispatcher
20
-
21
- #
22
- # This module is used to extend the meterpreter session
23
- # so that local port forwards can be tracked and cleaned
24
- # up when the meterpreter session goes away
25
- #
26
- module PortForwardTracker
27
- def cleanup
28
- super
29
-
30
- if pfservice
31
- pfservice.deref
32
- end
33
- end
34
-
35
- attr_accessor :pfservice
36
- end
37
-
38
- #
39
- # Options for the route command.
40
- #
41
- @@route_opts = Rex::Parser::Arguments.new(
42
- "-h" => [ false, "Help banner." ])
43
-
44
- #
45
- # Options for the portfwd command.
46
- #
47
- @@portfwd_opts = Rex::Parser::Arguments.new(
48
- "-h" => [ false, "Help banner." ],
49
- "-l" => [ true, "The local port to listen on." ],
50
- "-r" => [ true, "The remote host to connect to." ],
51
- "-p" => [ true, "The remote port to connect to." ],
52
- "-L" => [ true, "The local host to listen on (optional)." ])
53
-
54
- #
55
- # List of supported commands.
56
- #
57
- def commands
58
- all = {
59
- "ipconfig" => "Display interfaces",
60
- "ifconfig" => "Display interfaces",
61
- "route" => "View and modify the routing table",
62
- "portfwd" => "Forward a local port to a remote service",
63
- }
64
- reqs = {
65
- "ipconfig" => [ "stdapi_net_config_get_interfaces" ],
66
- "ifconfig" => [ "stdapi_net_config_get_interfaces" ],
67
- "route" => [
68
- # Also uses these, but we don't want to be unable to list them
69
- # just because we can't alter them.
70
- #"stdapi_net_config_add_route",
71
- #"stdapi_net_config_remove_route",
72
- "stdapi_net_config_get_routes"
73
- ],
74
- # Only creates tcp channels, which is something whose availability
75
- # we can't check directly at the moment.
76
- "portfwd" => [ ],
77
- }
78
-
79
- all.delete_if do |cmd, desc|
80
- del = false
81
- reqs[cmd].each do |req|
82
- next if client.commands.include? req
83
- del = true
84
- break
85
- end
86
-
87
- del
88
- end
89
-
90
- all
91
- end
92
-
93
- #
94
- # Name for this dispatcher.
95
- #
96
- def name
97
- "Stdapi: Networking"
98
- end
99
-
100
- #
101
- # Displays interfaces on the remote machine.
102
- #
103
- def cmd_ipconfig(*args)
104
- ifaces = client.net.config.interfaces
105
-
106
- if (ifaces.length == 0)
107
- print_line("No interfaces were found.")
108
- else
109
- ifaces.sort{|a,b| a.index <=> b.index}.each do |iface|
110
- print("\n" + iface.pretty + "\n")
111
- end
112
- end
113
- end
114
-
115
- alias :cmd_ifconfig :cmd_ipconfig
116
-
117
- #
118
- # Displays or modifies the routing table on the remote machine.
119
- #
120
- def cmd_route(*args)
121
- # Default to list
122
- if (args.length == 0)
123
- args.unshift("list")
124
- end
125
-
126
- # Check to see if they specified -h
127
- @@route_opts.parse(args) { |opt, idx, val|
128
- case opt
129
- when "-h"
130
- print(
131
- "Usage: route [-h] command [args]\n\n" +
132
- "Display or modify the routing table on the remote machine.\n\n" +
133
- "Supported commands:\n\n" +
134
- " add [subnet] [netmask] [gateway]\n" +
135
- " delete [subnet] [netmask] [gateway]\n" +
136
- " list\n\n")
137
- return true
138
- end
139
- }
140
-
141
- cmd = args.shift
142
-
143
- # Process the commands
144
- case cmd
145
- when "list"
146
- routes = client.net.config.routes
147
-
148
- # IPv4
149
- tbl = Rex::Ui::Text::Table.new(
150
- 'Header' => "IPv4 network routes",
151
- 'Indent' => 4,
152
- 'Columns' =>
153
- [
154
- "Subnet",
155
- "Netmask",
156
- "Gateway",
157
- "Metric",
158
- "Interface"
159
- ])
160
-
161
- routes.select {|route|
162
- Rex::Socket.is_ipv4?(route.netmask)
163
- }.each { |route|
164
- tbl << [ route.subnet, route.netmask, route.gateway, route.metric, route.interface ]
165
- }
166
-
167
- if tbl.rows.length > 0
168
- print("\n" + tbl.to_s + "\n")
169
- else
170
- print_line("No IPv4 routes were found.")
171
- end
172
-
173
- # IPv6
174
- tbl = Rex::Ui::Text::Table.new(
175
- 'Header' => "IPv6 network routes",
176
- 'Indent' => 4,
177
- 'Columns' =>
178
- [
179
- "Subnet",
180
- "Netmask",
181
- "Gateway",
182
- "Metric",
183
- "Interface"
184
- ])
185
-
186
- routes.select {|route|
187
- Rex::Socket.is_ipv6?(route.netmask)
188
- }.each { |route|
189
- tbl << [ route.subnet, route.netmask, route.gateway, route.metric, route.interface ]
190
- }
191
-
192
- if tbl.rows.length > 0
193
- print("\n" + tbl.to_s + "\n")
194
- else
195
- print_line("No IPv6 routes were found.")
196
- end
197
-
198
- when "add"
17
+ Klass = Console::CommandDispatcher::Stdapi::Net
18
+
19
+ include Console::CommandDispatcher
20
+
21
+ #
22
+ # This module is used to extend the meterpreter session
23
+ # so that local port forwards can be tracked and cleaned
24
+ # up when the meterpreter session goes away
25
+ #
26
+ module PortForwardTracker
27
+ def cleanup
28
+ super
29
+
30
+ if pfservice
31
+ pfservice.deref
32
+ end
33
+ end
34
+
35
+ attr_accessor :pfservice
36
+ end
37
+
38
+ #
39
+ # Options for the route command.
40
+ #
41
+ @@route_opts = Rex::Parser::Arguments.new(
42
+ "-h" => [ false, "Help banner." ])
43
+
44
+ #
45
+ # Options for the portfwd command.
46
+ #
47
+ @@portfwd_opts = Rex::Parser::Arguments.new(
48
+ "-h" => [ false, "Help banner." ],
49
+ "-l" => [ true, "The local port to listen on." ],
50
+ "-r" => [ true, "The remote host to connect to." ],
51
+ "-p" => [ true, "The remote port to connect to." ],
52
+ "-L" => [ true, "The local host to listen on (optional)." ])
53
+
54
+ #
55
+ # List of supported commands.
56
+ #
57
+ def commands
58
+ all = {
59
+ "ipconfig" => "Display interfaces",
60
+ "ifconfig" => "Display interfaces",
61
+ "route" => "View and modify the routing table",
62
+ "portfwd" => "Forward a local port to a remote service",
63
+ "arp" => "Display the host ARP cache",
64
+ "netstat" => "Display the network connections",
65
+ "getproxy" => "Display the current proxy configuration",
66
+ }
67
+ reqs = {
68
+ "ipconfig" => [ "stdapi_net_config_get_interfaces" ],
69
+ "ifconfig" => [ "stdapi_net_config_get_interfaces" ],
70
+ "route" => [
71
+ # Also uses these, but we don't want to be unable to list them
72
+ # just because we can't alter them.
73
+ #"stdapi_net_config_add_route",
74
+ #"stdapi_net_config_remove_route",
75
+ "stdapi_net_config_get_routes"
76
+ ],
77
+ # Only creates tcp channels, which is something whose availability
78
+ # we can't check directly at the moment.
79
+ "portfwd" => [ ],
80
+ "arp" => [ "stdapi_net_config_get_arp_table" ],
81
+ "netstat" => [ "stdapi_net_config_get_netstat" ],
82
+ "getproxy" => [ "stdapi_net_config_get_proxy" ],
83
+ }
84
+
85
+ all.delete_if do |cmd, desc|
86
+ del = false
87
+ reqs[cmd].each do |req|
88
+ next if client.commands.include? req
89
+ del = true
90
+ break
91
+ end
92
+
93
+ del
94
+ end
95
+
96
+ all
97
+ end
98
+
99
+ #
100
+ # Name for this dispatcher.
101
+ #
102
+ def name
103
+ "Stdapi: Networking"
104
+ end
105
+ #
106
+ # Displays network connections of the remote machine.
107
+ #
108
+ def cmd_netstat(*args)
109
+ connection_table = client.net.config.netstat
110
+ tbl = Rex::Ui::Text::Table.new(
111
+ 'Header' => "Connection list",
112
+ 'Indent' => 4,
113
+ 'Columns' =>
114
+ [
115
+ "Proto",
116
+ "Local address",
117
+ "Remote address",
118
+ "State",
119
+ "User",
120
+ "Inode",
121
+ "PID/Program name"
122
+ ])
123
+
124
+ connection_table.each { |connection|
125
+ tbl << [ connection.protocol, connection.local_addr_str, connection.remote_addr_str,
126
+ connection.state, connection.uid, connection.inode, connection.pid_name]
127
+ }
128
+
129
+ if tbl.rows.length > 0
130
+ print("\n" + tbl.to_s + "\n")
131
+ else
132
+ print_line("Connection list is empty.")
133
+ end
134
+ end
135
+
136
+ #
137
+ # Displays ARP cache of the remote machine.
138
+ #
139
+ def cmd_arp(*args)
140
+ arp_table = client.net.config.arp_table
141
+ tbl = Rex::Ui::Text::Table.new(
142
+ 'Header' => "ARP cache",
143
+ 'Indent' => 4,
144
+ 'Columns' =>
145
+ [
146
+ "IP address",
147
+ "MAC address",
148
+ "Interface"
149
+ ])
150
+
151
+ arp_table.each { |arp|
152
+ tbl << [ arp.ip_addr, arp.mac_addr, arp.interface ]
153
+ }
154
+
155
+ if tbl.rows.length > 0
156
+ print("\n" + tbl.to_s + "\n")
157
+ else
158
+ print_line("ARP cache is empty.")
159
+ end
160
+ end
161
+
162
+
163
+ #
164
+ # Displays interfaces on the remote machine.
165
+ #
166
+ def cmd_ipconfig(*args)
167
+ ifaces = client.net.config.interfaces
168
+
169
+ if (ifaces.length == 0)
170
+ print_line("No interfaces were found.")
171
+ else
172
+ ifaces.sort{|a,b| a.index <=> b.index}.each do |iface|
173
+ print("\n" + iface.pretty + "\n")
174
+ end
175
+ end
176
+ end
177
+
178
+ alias :cmd_ifconfig :cmd_ipconfig
179
+
180
+ #
181
+ # Displays or modifies the routing table on the remote machine.
182
+ #
183
+ def cmd_route(*args)
184
+ # Default to list
185
+ if (args.length == 0)
186
+ args.unshift("list")
187
+ end
188
+
189
+ # Check to see if they specified -h
190
+ @@route_opts.parse(args) { |opt, idx, val|
191
+ case opt
192
+ when "-h"
193
+ print(
194
+ "Usage: route [-h] command [args]\n\n" +
195
+ "Display or modify the routing table on the remote machine.\n\n" +
196
+ "Supported commands:\n\n" +
197
+ " add [subnet] [netmask] [gateway]\n" +
198
+ " delete [subnet] [netmask] [gateway]\n" +
199
+ " list\n\n")
200
+ return true
201
+ end
202
+ }
203
+
204
+ cmd = args.shift
205
+
206
+ # Process the commands
207
+ case cmd
208
+ when "list"
209
+ routes = client.net.config.routes
210
+
211
+ # IPv4
212
+ tbl = Rex::Ui::Text::Table.new(
213
+ 'Header' => "IPv4 network routes",
214
+ 'Indent' => 4,
215
+ 'Columns' =>
216
+ [
217
+ "Subnet",
218
+ "Netmask",
219
+ "Gateway",
220
+ "Metric",
221
+ "Interface"
222
+ ])
223
+
224
+ routes.select {|route|
225
+ Rex::Socket.is_ipv4?(route.netmask)
226
+ }.each { |route|
227
+ tbl << [ route.subnet, route.netmask, route.gateway, route.metric, route.interface ]
228
+ }
229
+
230
+ if tbl.rows.length > 0
231
+ print("\n" + tbl.to_s + "\n")
232
+ else
233
+ print_line("No IPv4 routes were found.")
234
+ end
235
+
236
+ # IPv6
237
+ tbl = Rex::Ui::Text::Table.new(
238
+ 'Header' => "IPv6 network routes",
239
+ 'Indent' => 4,
240
+ 'Columns' =>
241
+ [
242
+ "Subnet",
243
+ "Netmask",
244
+ "Gateway",
245
+ "Metric",
246
+ "Interface"
247
+ ])
248
+
249
+ routes.select {|route|
250
+ Rex::Socket.is_ipv6?(route.netmask)
251
+ }.each { |route|
252
+ tbl << [ route.subnet, route.netmask, route.gateway, route.metric, route.interface ]
253
+ }
254
+
255
+ if tbl.rows.length > 0
256
+ print("\n" + tbl.to_s + "\n")
257
+ else
258
+ print_line("No IPv6 routes were found.")
259
+ end
260
+
261
+ when "add"
199
262
  # Satisfy check to see that formatting is correct
200
263
  unless Rex::Socket::RangeWalker.new(args[0]).length == 1
201
264
  print_error "Invalid IP Address"
@@ -206,12 +269,12 @@ class Console::CommandDispatcher::Stdapi::Net
206
269
  print_error "Invalid Subnet mask"
207
270
  return false
208
271
  end
209
-
210
- print_line("Creating route #{args[0]}/#{args[1]} -> #{args[2]}")
211
272
 
212
- client.net.config.add_route(*args)
213
- when "delete"
214
- # Satisfy check to see that formatting is correct
273
+ print_line("Creating route #{args[0]}/#{args[1]} -> #{args[2]}")
274
+
275
+ client.net.config.add_route(*args)
276
+ when "delete"
277
+ # Satisfy check to see that formatting is correct
215
278
  unless Rex::Socket::RangeWalker.new(args[0]).length == 1
216
279
  print_error "Invalid IP Address"
217
280
  return false
@@ -221,152 +284,160 @@ class Console::CommandDispatcher::Stdapi::Net
221
284
  print_error "Invalid Subnet mask"
222
285
  return false
223
286
  end
224
-
225
- print_line("Deleting route #{args[0]}/#{args[1]} -> #{args[2]}")
226
-
227
- client.net.config.remove_route(*args)
228
- else
229
- print_error("Unsupported command: #{cmd}")
230
- end
231
- end
232
-
233
- #
234
- # Starts and stops local port forwards to remote hosts on the target
235
- # network. This provides an elementary pivoting interface.
236
- #
237
- def cmd_portfwd(*args)
238
- args.unshift("list") if args.empty?
239
-
240
- # For clarity's sake.
241
- lport = nil
242
- lhost = nil
243
- rport = nil
244
- rhost = nil
245
-
246
- # Parse the options
247
- @@portfwd_opts.parse(args) { |opt, idx, val|
248
- case opt
249
- when "-h"
250
- cmd_portfwd_help
251
- return true
252
- when "-l"
253
- lport = val.to_i
254
- when "-L"
255
- lhost = val
256
- when "-p"
257
- rport = val.to_i
258
- when "-r"
259
- rhost = val
260
- end
261
- }
262
-
263
- # If we haven't extended the session, then do it now since we'll
264
- # need to track port forwards
265
- if client.kind_of?(PortForwardTracker) == false
266
- client.extend(PortForwardTracker)
267
- client.pfservice = Rex::ServiceManager.start(Rex::Services::LocalRelay)
268
- end
269
-
270
- # Build a local port forward in association with the channel
271
- service = client.pfservice
272
-
273
- # Process the command
274
- case args.shift
275
- when "list"
276
-
277
- cnt = 0
278
-
279
- # Enumerate each TCP relay
280
- service.each_tcp_relay { |lhost, lport, rhost, rport, opts|
281
- next if (opts['MeterpreterRelay'] == nil)
282
-
283
- print_line("#{cnt}: #{lhost}:#{lport} -> #{rhost}:#{rport}")
284
-
285
- cnt += 1
286
- }
287
-
288
- print_line
289
- print_line("#{cnt} total local port forwards.")
290
-
291
-
292
- when "add"
293
-
294
- # Validate parameters
295
- if (!lport or !rhost or !rport)
296
- print_error("You must supply a local port, remote host, and remote port.")
297
- return
298
- end
299
-
300
- # Start the local TCP relay in association with this stream
301
- service.start_tcp_relay(lport,
302
- 'LocalHost' => lhost,
303
- 'PeerHost' => rhost,
304
- 'PeerPort' => rport,
305
- 'MeterpreterRelay' => true,
306
- 'OnLocalConnection' => Proc.new { |relay, lfd|
307
- create_tcp_channel(relay)
308
- })
309
-
310
- print_status("Local TCP relay created: #{lhost || '0.0.0.0'}:#{lport} <-> #{rhost}:#{rport}")
311
-
312
- # Delete local port forwards
313
- when "delete"
314
-
315
- # No local port, no love.
316
- if (!lport)
317
- print_error("You must supply a local port.")
318
- return
319
- end
320
-
321
- # Stop the service
322
- if (service.stop_tcp_relay(lport, lhost))
323
- print_status("Successfully stopped TCP relay on #{lhost || '0.0.0.0'}:#{lport}")
324
- else
325
- print_error("Failed to stop TCP relay on #{lhost || '0.0.0.0'}:#{lport}")
326
- end
327
-
328
- when "flush"
329
-
330
- counter = 0
331
- service.each_tcp_relay do |lhost, lport, rhost, rport, opts|
332
- next if (opts['MeterpreterRelay'] == nil)
333
-
334
- if (service.stop_tcp_relay(lport, lhost))
335
- print_status("Successfully stopped TCP relay on #{lhost || '0.0.0.0'}:#{lport}")
336
- else
337
- print_error("Failed to stop TCP relay on #{lhost || '0.0.0.0'}:#{lport}")
338
- next
339
- end
340
-
341
- counter += 1
342
- end
343
- print_status("Successfully flushed #{counter} rules")
344
-
345
- else
346
- cmd_portfwd_help
347
- end
348
- end
349
-
350
- def cmd_portfwd_help
351
- print_line "Usage: portfwd [-h] [add | delete | list | flush] [args]"
352
- print_line
353
- print @@portfwd_opts.usage
354
- end
287
+
288
+ print_line("Deleting route #{args[0]}/#{args[1]} -> #{args[2]}")
289
+
290
+ client.net.config.remove_route(*args)
291
+ else
292
+ print_error("Unsupported command: #{cmd}")
293
+ end
294
+ end
295
+
296
+ #
297
+ # Starts and stops local port forwards to remote hosts on the target
298
+ # network. This provides an elementary pivoting interface.
299
+ #
300
+ def cmd_portfwd(*args)
301
+ args.unshift("list") if args.empty?
302
+
303
+ # For clarity's sake.
304
+ lport = nil
305
+ lhost = nil
306
+ rport = nil
307
+ rhost = nil
308
+
309
+ # Parse the options
310
+ @@portfwd_opts.parse(args) { |opt, idx, val|
311
+ case opt
312
+ when "-h"
313
+ cmd_portfwd_help
314
+ return true
315
+ when "-l"
316
+ lport = val.to_i
317
+ when "-L"
318
+ lhost = val
319
+ when "-p"
320
+ rport = val.to_i
321
+ when "-r"
322
+ rhost = val
323
+ end
324
+ }
325
+
326
+ # If we haven't extended the session, then do it now since we'll
327
+ # need to track port forwards
328
+ if client.kind_of?(PortForwardTracker) == false
329
+ client.extend(PortForwardTracker)
330
+ client.pfservice = Rex::ServiceManager.start(Rex::Services::LocalRelay)
331
+ end
332
+
333
+ # Build a local port forward in association with the channel
334
+ service = client.pfservice
335
+
336
+ # Process the command
337
+ case args.shift
338
+ when "list"
339
+
340
+ cnt = 0
341
+
342
+ # Enumerate each TCP relay
343
+ service.each_tcp_relay { |lhost, lport, rhost, rport, opts|
344
+ next if (opts['MeterpreterRelay'] == nil)
345
+
346
+ print_line("#{cnt}: #{lhost}:#{lport} -> #{rhost}:#{rport}")
347
+
348
+ cnt += 1
349
+ }
350
+
351
+ print_line
352
+ print_line("#{cnt} total local port forwards.")
353
+
354
+
355
+ when "add"
356
+
357
+ # Validate parameters
358
+ if (!lport or !rhost or !rport)
359
+ print_error("You must supply a local port, remote host, and remote port.")
360
+ return
361
+ end
362
+
363
+ # Start the local TCP relay in association with this stream
364
+ service.start_tcp_relay(lport,
365
+ 'LocalHost' => lhost,
366
+ 'PeerHost' => rhost,
367
+ 'PeerPort' => rport,
368
+ 'MeterpreterRelay' => true,
369
+ 'OnLocalConnection' => Proc.new { |relay, lfd|
370
+ create_tcp_channel(relay)
371
+ })
372
+
373
+ print_status("Local TCP relay created: #{lhost || '0.0.0.0'}:#{lport} <-> #{rhost}:#{rport}")
374
+
375
+ # Delete local port forwards
376
+ when "delete"
377
+
378
+ # No local port, no love.
379
+ if (!lport)
380
+ print_error("You must supply a local port.")
381
+ return
382
+ end
383
+
384
+ # Stop the service
385
+ if (service.stop_tcp_relay(lport, lhost))
386
+ print_status("Successfully stopped TCP relay on #{lhost || '0.0.0.0'}:#{lport}")
387
+ else
388
+ print_error("Failed to stop TCP relay on #{lhost || '0.0.0.0'}:#{lport}")
389
+ end
390
+
391
+ when "flush"
392
+
393
+ counter = 0
394
+ service.each_tcp_relay do |lhost, lport, rhost, rport, opts|
395
+ next if (opts['MeterpreterRelay'] == nil)
396
+
397
+ if (service.stop_tcp_relay(lport, lhost))
398
+ print_status("Successfully stopped TCP relay on #{lhost || '0.0.0.0'}:#{lport}")
399
+ else
400
+ print_error("Failed to stop TCP relay on #{lhost || '0.0.0.0'}:#{lport}")
401
+ next
402
+ end
403
+
404
+ counter += 1
405
+ end
406
+ print_status("Successfully flushed #{counter} rules")
407
+
408
+ else
409
+ cmd_portfwd_help
410
+ end
411
+ end
412
+
413
+ def cmd_portfwd_help
414
+ print_line "Usage: portfwd [-h] [add | delete | list | flush] [args]"
415
+ print_line
416
+ print @@portfwd_opts.usage
417
+ end
418
+
419
+ def cmd_getproxy
420
+ p = client.net.config.get_proxy_config()
421
+ print_line( "Auto-detect : #{p[:autodetect] ? "Yes" : "No"}" )
422
+ print_line( "Auto config URL : #{p[:autoconfigurl]}" )
423
+ print_line( "Proxy URL : #{p[:proxy]}" )
424
+ print_line( "Proxy Bypass : #{p[:proxybypass]}" )
425
+ end
355
426
 
356
427
  protected
357
428
 
358
- #
359
- # Creates a TCP channel using the supplied relay context.
360
- #
361
- def create_tcp_channel(relay)
362
- client.net.socket.create(
363
- Rex::Socket::Parameters.new(
364
- 'PeerHost' => relay.opts['PeerHost'],
365
- 'PeerPort' => relay.opts['PeerPort'],
366
- 'Proto' => 'tcp'
367
- )
368
- )
369
- end
429
+ #
430
+ # Creates a TCP channel using the supplied relay context.
431
+ #
432
+ def create_tcp_channel(relay)
433
+ client.net.socket.create(
434
+ Rex::Socket::Parameters.new(
435
+ 'PeerHost' => relay.opts['PeerHost'],
436
+ 'PeerPort' => relay.opts['PeerPort'],
437
+ 'Proto' => 'tcp'
438
+ )
439
+ )
440
+ end
370
441
 
371
442
  end
372
443