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
@@ -1,4 +1,3 @@
1
- #!/usr/bin/env ruby
2
1
  # -*- coding: binary -*-
3
2
 
4
3
  require 'rex/post/meterpreter/client'
@@ -21,121 +20,121 @@ module ProcessSubsystem
21
20
  ###
22
21
  class Thread
23
22
 
24
- ##
25
- #
26
- # Constructor
27
- #
28
- ##
29
-
30
- #
31
- # Initializes a thread instance that operates in the context of the
32
- # supplied process instance.
33
- #
34
- def initialize(process)
35
- self.process = process
36
- end
37
-
38
- ##
39
- #
40
- # Process thread interaction
41
- #
42
- ##
43
-
44
- #
45
- # Opens an existing thread that is running within the context
46
- # of the process and returns a Sys::Thread instance.
47
- #
48
- def open(tid, access = THREAD_ALL)
49
- request = Packet.create_request('stdapi_sys_process_thread_open')
50
- real = 0
51
-
52
- # Translate access
53
- if (access & THREAD_READ)
54
- real |= THREAD_GET_CONTEXT | THREAD_QUERY_INFORMATION | SYNCHRONIZE
55
- end
56
-
57
- if (access & THREAD_WRITE)
58
- real |= THREAD_SET_CONTEXT | THREAD_SET_INFORMATION | THREAD_SET_THREAD_TOKEN | THREAD_IMPERSONATE | THREAD_DIRECT_IMPERSONATION
59
- end
60
-
61
- if (access & THREAD_EXECUTE)
62
- real |= THREAD_TERMINATE | THREAD_SUSPEND_RESUME | SYNCHRONIZE
63
- end
64
-
65
- # Add the thread identifier and permissions
66
- request.add_tlv(TLV_TYPE_THREAD_ID, tid)
67
- request.add_tlv(TLV_TYPE_THREAD_PERMS, real)
68
-
69
- # Transmit the request
70
- response = process.client.send_request(request)
71
-
72
- # Create a thread class instance
73
- return Rex::Post::Meterpreter::Extensions::Stdapi::Sys::Thread.new(
74
- process, response.get_tlv_value(TLV_TYPE_THREAD_HANDLE), tid)
75
- end
76
-
77
- #
78
- # Creates a new thread in the context of the process and
79
- # returns a Sys::Thread instance.
80
- #
81
- def create(entry, parameter = nil, suspended = false)
82
- request = Packet.create_request('stdapi_sys_process_thread_create')
83
- creation_flags = 0
84
-
85
- request.add_tlv(TLV_TYPE_PROCESS_HANDLE, process.handle)
86
- request.add_tlv(TLV_TYPE_ENTRY_POINT, entry)
87
-
88
- # Are we passing a parameter to the entry point of the thread?
89
- if (parameter != nil)
90
- request.add_tlv(TLV_TYPE_ENTRY_PARAMETER, parameter)
91
- end
92
-
93
- # Should we create the thread suspended?
94
- if (suspended)
95
- creation_flags |= CREATE_SUSPENDED
96
- end
97
-
98
- request.add_tlv(TLV_TYPE_CREATION_FLAGS, creation_flags)
99
-
100
- # Transmit the request
101
- response = process.client.send_request(request)
102
-
103
-
104
- thread_id = response.get_tlv_value(TLV_TYPE_THREAD_ID)
105
- thread_handle = response.get_tlv_value(TLV_TYPE_THREAD_HANDLE)
106
-
107
- # Create a thread class instance
108
- return Rex::Post::Meterpreter::Extensions::Stdapi::Sys::Thread.new(
109
- process, thread_handle, thread_id)
110
- end
111
-
112
- #
113
- # Enumerate through each thread identifier.
114
- #
115
- def each_thread(&block)
116
- get_threads.each(&block)
117
- end
118
-
119
- #
120
- # Returns an array of thread identifiers.
121
- #
122
- def get_threads
123
- request = Packet.create_request('stdapi_sys_process_thread_get_threads')
124
- threads = []
125
-
126
- request.add_tlv(TLV_TYPE_PID, process.pid)
127
-
128
- response = process.client.send_request(request)
129
-
130
- response.each(TLV_TYPE_THREAD_ID) { |thr|
131
- threads << thr.value
132
- }
133
-
134
- return threads
135
- end
23
+ ##
24
+ #
25
+ # Constructor
26
+ #
27
+ ##
28
+
29
+ #
30
+ # Initializes a thread instance that operates in the context of the
31
+ # supplied process instance.
32
+ #
33
+ def initialize(process)
34
+ self.process = process
35
+ end
36
+
37
+ ##
38
+ #
39
+ # Process thread interaction
40
+ #
41
+ ##
42
+
43
+ #
44
+ # Opens an existing thread that is running within the context
45
+ # of the process and returns a Sys::Thread instance.
46
+ #
47
+ def open(tid, access = THREAD_ALL)
48
+ request = Packet.create_request('stdapi_sys_process_thread_open')
49
+ real = 0
50
+
51
+ # Translate access
52
+ if (access & THREAD_READ)
53
+ real |= THREAD_GET_CONTEXT | THREAD_QUERY_INFORMATION | SYNCHRONIZE
54
+ end
55
+
56
+ if (access & THREAD_WRITE)
57
+ real |= THREAD_SET_CONTEXT | THREAD_SET_INFORMATION | THREAD_SET_THREAD_TOKEN | THREAD_IMPERSONATE | THREAD_DIRECT_IMPERSONATION
58
+ end
59
+
60
+ if (access & THREAD_EXECUTE)
61
+ real |= THREAD_TERMINATE | THREAD_SUSPEND_RESUME | SYNCHRONIZE
62
+ end
63
+
64
+ # Add the thread identifier and permissions
65
+ request.add_tlv(TLV_TYPE_THREAD_ID, tid)
66
+ request.add_tlv(TLV_TYPE_THREAD_PERMS, real)
67
+
68
+ # Transmit the request
69
+ response = process.client.send_request(request)
70
+
71
+ # Create a thread class instance
72
+ return Rex::Post::Meterpreter::Extensions::Stdapi::Sys::Thread.new(
73
+ process, response.get_tlv_value(TLV_TYPE_THREAD_HANDLE), tid)
74
+ end
75
+
76
+ #
77
+ # Creates a new thread in the context of the process and
78
+ # returns a Sys::Thread instance.
79
+ #
80
+ def create(entry, parameter = nil, suspended = false)
81
+ request = Packet.create_request('stdapi_sys_process_thread_create')
82
+ creation_flags = 0
83
+
84
+ request.add_tlv(TLV_TYPE_PROCESS_HANDLE, process.handle)
85
+ request.add_tlv(TLV_TYPE_ENTRY_POINT, entry)
86
+
87
+ # Are we passing a parameter to the entry point of the thread?
88
+ if (parameter != nil)
89
+ request.add_tlv(TLV_TYPE_ENTRY_PARAMETER, parameter)
90
+ end
91
+
92
+ # Should we create the thread suspended?
93
+ if (suspended)
94
+ creation_flags |= CREATE_SUSPENDED
95
+ end
96
+
97
+ request.add_tlv(TLV_TYPE_CREATION_FLAGS, creation_flags)
98
+
99
+ # Transmit the request
100
+ response = process.client.send_request(request)
101
+
102
+
103
+ thread_id = response.get_tlv_value(TLV_TYPE_THREAD_ID)
104
+ thread_handle = response.get_tlv_value(TLV_TYPE_THREAD_HANDLE)
105
+
106
+ # Create a thread class instance
107
+ return Rex::Post::Meterpreter::Extensions::Stdapi::Sys::Thread.new(
108
+ process, thread_handle, thread_id)
109
+ end
110
+
111
+ #
112
+ # Enumerate through each thread identifier.
113
+ #
114
+ def each_thread(&block)
115
+ get_threads.each(&block)
116
+ end
117
+
118
+ #
119
+ # Returns an array of thread identifiers.
120
+ #
121
+ def get_threads
122
+ request = Packet.create_request('stdapi_sys_process_thread_get_threads')
123
+ threads = []
124
+
125
+ request.add_tlv(TLV_TYPE_PID, process.pid)
126
+
127
+ response = process.client.send_request(request)
128
+
129
+ response.each(TLV_TYPE_THREAD_ID) { |thr|
130
+ threads << thr.value
131
+ }
132
+
133
+ return threads
134
+ end
136
135
 
137
136
  protected
138
- attr_accessor :process # :nodoc:
137
+ attr_accessor :process # :nodoc:
139
138
 
140
139
  end
141
140
 
@@ -1,4 +1,3 @@
1
- #!/usr/bin/env ruby
2
1
  # -*- coding: binary -*-
3
2
 
4
3
  require 'rex/post/process'
@@ -25,303 +24,303 @@ module Sys
25
24
  ###
26
25
  class Registry
27
26
 
28
- class << self
29
- attr_accessor :client
30
- end
27
+ class << self
28
+ attr_accessor :client
29
+ end
31
30
 
32
- ##
33
- #
34
- # Registry key interaction
35
- #
36
- ##
31
+ ##
32
+ #
33
+ # Registry key interaction
34
+ #
35
+ ##
37
36
 
38
- #
39
- # Opens the supplied registry key relative to the root key with
40
- # the supplied permissions. Right now this is merely a wrapper around
41
- # create_key.
42
- #
37
+ #
38
+ # Opens the supplied registry key relative to the root key with
39
+ # the supplied permissions. Right now this is merely a wrapper around
40
+ # create_key.
41
+ #
43
42
 
44
- def Registry.load_key(root_key,base_key,hive_file)
45
- request = Packet.create_request('stdapi_registry_load_key')
46
- request.add_tlv(TLV_TYPE_ROOT_KEY, root_key)
47
- request.add_tlv(TLV_TYPE_BASE_KEY, base_key)
48
- request.add_tlv(TLV_TYPE_FILE_PATH, client.unicode_filter_decode( hive_file ))
43
+ def Registry.load_key(root_key,base_key,hive_file)
44
+ request = Packet.create_request('stdapi_registry_load_key')
45
+ request.add_tlv(TLV_TYPE_ROOT_KEY, root_key)
46
+ request.add_tlv(TLV_TYPE_BASE_KEY, base_key)
47
+ request.add_tlv(TLV_TYPE_FILE_PATH, client.unicode_filter_decode( hive_file ))
49
48
 
50
- response = client.send_request(request)
51
- return response.get_tlv(TLV_TYPE_RESULT).value
52
- end
49
+ response = client.send_request(request)
50
+ return response.get_tlv(TLV_TYPE_RESULT).value
51
+ end
53
52
 
54
- def Registry.unload_key(root_key,base_key)
55
- request = Packet.create_request('stdapi_registry_unload_key')
56
- request.add_tlv(TLV_TYPE_ROOT_KEY, root_key)
57
- request.add_tlv(TLV_TYPE_BASE_KEY, base_key)
58
- response = client.send_request(request)
59
- return response.get_tlv(TLV_TYPE_RESULT).value
60
- end
53
+ def Registry.unload_key(root_key,base_key)
54
+ request = Packet.create_request('stdapi_registry_unload_key')
55
+ request.add_tlv(TLV_TYPE_ROOT_KEY, root_key)
56
+ request.add_tlv(TLV_TYPE_BASE_KEY, base_key)
57
+ response = client.send_request(request)
58
+ return response.get_tlv(TLV_TYPE_RESULT).value
59
+ end
61
60
 
62
61
 
63
- def Registry.open_key(root_key, base_key, perm = KEY_READ)
64
- # If no base key was provided, just return the root_key.
65
- if (base_key == nil or base_key.length == 0)
66
- return RegistrySubsystem::RegistryKey.new(client, root_key, base_key, perm, root_key)
67
- end
62
+ def Registry.open_key(root_key, base_key, perm = KEY_READ)
63
+ # If no base key was provided, just return the root_key.
64
+ if (base_key == nil or base_key.length == 0)
65
+ return RegistrySubsystem::RegistryKey.new(client, root_key, base_key, perm, root_key)
66
+ end
68
67
 
69
- request = Packet.create_request('stdapi_registry_open_key')
68
+ request = Packet.create_request('stdapi_registry_open_key')
70
69
 
71
- request.add_tlv(TLV_TYPE_ROOT_KEY, root_key)
72
- request.add_tlv(TLV_TYPE_BASE_KEY, base_key)
73
- request.add_tlv(TLV_TYPE_PERMISSION, perm)
70
+ request.add_tlv(TLV_TYPE_ROOT_KEY, root_key)
71
+ request.add_tlv(TLV_TYPE_BASE_KEY, base_key)
72
+ request.add_tlv(TLV_TYPE_PERMISSION, perm)
74
73
 
75
- response = client.send_request(request)
74
+ response = client.send_request(request)
76
75
 
77
- return Rex::Post::Meterpreter::Extensions::Stdapi::Sys::RegistrySubsystem::RegistryKey.new(
78
- client, root_key, base_key, perm, response.get_tlv(TLV_TYPE_HKEY).value)
79
- end
76
+ return Rex::Post::Meterpreter::Extensions::Stdapi::Sys::RegistrySubsystem::RegistryKey.new(
77
+ client, root_key, base_key, perm, response.get_tlv(TLV_TYPE_HKEY).value)
78
+ end
80
79
 
81
- #
82
- # Opens the supplied registry key on the specified remote host. Requires that the
83
- # current process has credentials to access the target and that the target has the
84
- # remote registry service running.
85
- #
86
- def Registry.open_remote_key(target_host, root_key)
80
+ #
81
+ # Opens the supplied registry key on the specified remote host. Requires that the
82
+ # current process has credentials to access the target and that the target has the
83
+ # remote registry service running.
84
+ #
85
+ def Registry.open_remote_key(target_host, root_key)
87
86
 
88
- request = Packet.create_request('stdapi_registry_open_remote_key')
87
+ request = Packet.create_request('stdapi_registry_open_remote_key')
89
88
 
90
- request.add_tlv(TLV_TYPE_TARGET_HOST, target_host)
91
- request.add_tlv(TLV_TYPE_ROOT_KEY, root_key)
89
+ request.add_tlv(TLV_TYPE_TARGET_HOST, target_host)
90
+ request.add_tlv(TLV_TYPE_ROOT_KEY, root_key)
92
91
 
93
92
 
94
- response = client.send_request(request)
93
+ response = client.send_request(request)
95
94
 
96
- return Rex::Post::Meterpreter::Extensions::Stdapi::Sys::RegistrySubsystem::RemoteRegistryKey.new(
97
- client, target_host, root_key, response.get_tlv(TLV_TYPE_HKEY).value)
98
- end
95
+ return Rex::Post::Meterpreter::Extensions::Stdapi::Sys::RegistrySubsystem::RemoteRegistryKey.new(
96
+ client, target_host, root_key, response.get_tlv(TLV_TYPE_HKEY).value)
97
+ end
99
98
 
100
- #
101
- # Creates the supplied registry key or opens it if it already exists.
102
- #
103
- def Registry.create_key(root_key, base_key, perm = KEY_READ)
104
- request = Packet.create_request('stdapi_registry_create_key')
99
+ #
100
+ # Creates the supplied registry key or opens it if it already exists.
101
+ #
102
+ def Registry.create_key(root_key, base_key, perm = KEY_READ)
103
+ request = Packet.create_request('stdapi_registry_create_key')
105
104
 
106
- request.add_tlv(TLV_TYPE_ROOT_KEY, root_key)
107
- request.add_tlv(TLV_TYPE_BASE_KEY, base_key)
108
- request.add_tlv(TLV_TYPE_PERMISSION, perm)
105
+ request.add_tlv(TLV_TYPE_ROOT_KEY, root_key)
106
+ request.add_tlv(TLV_TYPE_BASE_KEY, base_key)
107
+ request.add_tlv(TLV_TYPE_PERMISSION, perm)
109
108
 
110
- response = client.send_request(request)
109
+ response = client.send_request(request)
111
110
 
112
- return Rex::Post::Meterpreter::Extensions::Stdapi::Sys::RegistrySubsystem::RegistryKey.new(
113
- client, root_key, base_key, perm, response.get_tlv(TLV_TYPE_HKEY).value)
114
- end
111
+ return Rex::Post::Meterpreter::Extensions::Stdapi::Sys::RegistrySubsystem::RegistryKey.new(
112
+ client, root_key, base_key, perm, response.get_tlv(TLV_TYPE_HKEY).value)
113
+ end
115
114
 
116
- #
117
- # Deletes the supplied registry key.
118
- #
119
- def Registry.delete_key(root_key, base_key, recursive = true)
120
- request = Packet.create_request('stdapi_registry_delete_key')
121
- flags = 0
115
+ #
116
+ # Deletes the supplied registry key.
117
+ #
118
+ def Registry.delete_key(root_key, base_key, recursive = true)
119
+ request = Packet.create_request('stdapi_registry_delete_key')
120
+ flags = 0
122
121
 
123
- if (recursive)
124
- flags |= DELETE_KEY_FLAG_RECURSIVE
125
- end
122
+ if (recursive)
123
+ flags |= DELETE_KEY_FLAG_RECURSIVE
124
+ end
126
125
 
127
- request.add_tlv(TLV_TYPE_ROOT_KEY, root_key)
128
- request.add_tlv(TLV_TYPE_BASE_KEY, base_key)
129
- request.add_tlv(TLV_TYPE_FLAGS, flags)
126
+ request.add_tlv(TLV_TYPE_ROOT_KEY, root_key)
127
+ request.add_tlv(TLV_TYPE_BASE_KEY, base_key)
128
+ request.add_tlv(TLV_TYPE_FLAGS, flags)
130
129
 
131
- if (client.send_request(request) != nil)
132
- return true
133
- end
130
+ if (client.send_request(request) != nil)
131
+ return true
132
+ end
134
133
 
135
- return false
136
- end
134
+ return false
135
+ end
137
136
 
138
- #
139
- # Closes the supplied registry key.
140
- #
141
- def Registry.close_key(hkey)
142
- request = Packet.create_request('stdapi_registry_close_key')
137
+ #
138
+ # Closes the supplied registry key.
139
+ #
140
+ def Registry.close_key(hkey)
141
+ request = Packet.create_request('stdapi_registry_close_key')
143
142
 
144
- request.add_tlv(TLV_TYPE_HKEY, hkey)
143
+ request.add_tlv(TLV_TYPE_HKEY, hkey)
145
144
 
146
- client.send_packet(request)
145
+ client.send_packet(request)
147
146
 
148
- return true
149
- end
147
+ return true
148
+ end
150
149
 
151
- #
152
- # Enumerates the supplied registry key returning an array of key names.
153
- #
154
- def Registry.enum_key(hkey)
155
- keys = []
156
- request = Packet.create_request('stdapi_registry_enum_key')
150
+ #
151
+ # Enumerates the supplied registry key returning an array of key names.
152
+ #
153
+ def Registry.enum_key(hkey)
154
+ keys = []
155
+ request = Packet.create_request('stdapi_registry_enum_key')
157
156
 
158
- request.add_tlv(TLV_TYPE_HKEY, hkey)
157
+ request.add_tlv(TLV_TYPE_HKEY, hkey)
159
158
 
160
- response = client.send_request(request)
159
+ response = client.send_request(request)
161
160
 
162
- # Enumerate through all of the registry keys
163
- response.each(TLV_TYPE_KEY_NAME) { |key_name|
164
- keys << key_name.value
165
- }
161
+ # Enumerate through all of the registry keys
162
+ response.each(TLV_TYPE_KEY_NAME) { |key_name|
163
+ keys << key_name.value
164
+ }
166
165
 
167
- return keys
168
- end
166
+ return keys
167
+ end
169
168
 
170
- ##
171
- #
172
- # Registry value interaction
173
- #
174
- ##
169
+ ##
170
+ #
171
+ # Registry value interaction
172
+ #
173
+ ##
175
174
 
176
- #
177
- # Sets the registry value relative to the supplied hkey.
178
- #
179
- def Registry.set_value(hkey, name, type, data)
180
- request = Packet.create_request('stdapi_registry_set_value')
181
-
182
- request.add_tlv(TLV_TYPE_HKEY, hkey)
183
- request.add_tlv(TLV_TYPE_VALUE_NAME, name)
184
- request.add_tlv(TLV_TYPE_VALUE_TYPE, type)
185
-
186
- if (type == REG_SZ)
187
- data += "\x00"
188
- elsif (type == REG_DWORD)
189
- data = [ data.to_i ].pack("V")
190
- end
191
-
192
- request.add_tlv(TLV_TYPE_VALUE_DATA, data)
193
-
194
- response = client.send_request(request)
195
-
196
- return true
197
- end
198
-
199
- #
200
- # Queries the registry value supplied in name and returns an
201
- # initialized RegistryValue instance if a match is found.
202
- #
203
- def Registry.query_value(hkey, name)
204
- request = Packet.create_request('stdapi_registry_query_value')
205
-
206
- request.add_tlv(TLV_TYPE_HKEY, hkey)
207
- request.add_tlv(TLV_TYPE_VALUE_NAME, name)
208
-
209
- response = client.send_request(request)
210
-
211
- data = response.get_tlv(TLV_TYPE_VALUE_DATA).value;
212
- type = response.get_tlv(TLV_TYPE_VALUE_TYPE).value;
213
-
214
- if (type == REG_SZ)
215
- data = data[0..-2]
216
- elsif (type == REG_DWORD)
217
- data = data.unpack("N")[0]
218
- end
219
-
220
- return Rex::Post::Meterpreter::Extensions::Stdapi::Sys::RegistrySubsystem::RegistryValue.new(
221
- client, hkey, name, type, data)
222
- end
223
-
224
- #
225
- # Deletes the registry value supplied in name from the supplied
226
- # registry key.
227
- #
228
- def Registry.delete_value(hkey, name)
229
- request = Packet.create_request('stdapi_registry_delete_value')
230
-
231
- request.add_tlv(TLV_TYPE_HKEY, hkey)
232
- request.add_tlv(TLV_TYPE_VALUE_NAME, name)
233
-
234
- if (client.send_request(request) != nil)
235
- return true
236
- end
237
-
238
- return false
239
- end
240
-
241
- #
242
- # Queries the registry class name and returns a string
243
- #
244
- def Registry.query_class(hkey)
245
- request = Packet.create_request('stdapi_registry_query_class')
246
-
247
- request.add_tlv(TLV_TYPE_HKEY, hkey)
248
-
249
- response = client.send_request(request)
250
- cls = response.get_tlv(TLV_TYPE_VALUE_DATA)
251
- return nil if not cls
252
- data = cls.value.gsub(/\x00.*/, '')
253
- return data
254
- end
255
-
256
- #
257
- # Enumerates all of the values at the supplied hkey including their
258
- # names. An array of RegistryValue's is returned.
259
- #
260
- def Registry.enum_value(hkey)
261
- request = Packet.create_request('stdapi_registry_enum_value')
262
- values = []
263
-
264
- request.add_tlv(TLV_TYPE_HKEY, hkey)
265
-
266
- response = client.send_request(request)
267
-
268
- response.each(TLV_TYPE_VALUE_NAME) { |value_name|
269
- values << Rex::Post::Meterpreter::Extensions::Stdapi::Sys::RegistrySubsystem::RegistryValue.new(
270
- client, hkey, value_name.value)
271
- }
272
-
273
- return values
274
- end
275
-
276
- #
277
- # Return the key value associated with the supplied string. This is useful
278
- # for converting HKLM as a string into its actual integer representation.
279
- #
280
- def self.key2str(key)
281
- if (key == 'HKLM' or key == 'HKEY_LOCAL_MACHINE')
282
- return HKEY_LOCAL_MACHINE
283
- elsif (key == 'HKCU' or key == 'HKEY_CURRENT_USER')
284
- return HKEY_CURRENT_USER
285
- elsif (key == 'HKU' or key == 'HKEY_USERS')
286
- return HKEY_USERS
287
- elsif (key == 'HKCR' or key == 'HKEY_CLASSES_ROOT')
288
- return HKEY_CLASSES_ROOT
289
- elsif (key == 'HKEY_CURRENT_CONFIG')
290
- return HKEY_CURRENT_CONFIG
291
- elsif (key == 'HKEY_PERFORMANCE_DATA')
292
- return HKEY_PERFORMANCE_DATA
293
- elsif (key == 'HKEY_DYN_DATA')
294
- return HKEY_DYN_DATA
295
- else
296
- raise ArgumentError, "Unknown key: #{key}"
297
- end
298
- end
299
-
300
- #
301
- # Returns the integer value associated with the supplied registry value
302
- # type (like REG_SZ).
303
- #
304
- def self.type2str(type)
305
- return REG_SZ if (type == 'REG_SZ')
306
- return REG_DWORD if (type == 'REG_DWORD')
307
- return REG_BINARY if (type == 'REG_BINARY')
308
- return REG_EXPAND_SZ if (type == 'REG_EXPAND_SZ')
309
- return REG_NONE if (type == 'REG_NONE')
310
- return nil
311
- end
312
-
313
- #
314
- # Split the supplied full registry key into its root key and base key. For
315
- # instance, passing HKLM\Software\Dog will return [ HKEY_LOCAL_MACHINE,
316
- # 'Software\Dog' ]
317
- #
318
- def self.splitkey(str)
319
- if (str =~ /^(.+?)\\(.*)$/)
320
- [ key2str($1), $2 ]
321
- else
322
- [ key2str(str), nil ]
323
- end
324
- end
175
+ #
176
+ # Sets the registry value relative to the supplied hkey.
177
+ #
178
+ def Registry.set_value(hkey, name, type, data)
179
+ request = Packet.create_request('stdapi_registry_set_value')
180
+
181
+ request.add_tlv(TLV_TYPE_HKEY, hkey)
182
+ request.add_tlv(TLV_TYPE_VALUE_NAME, name)
183
+ request.add_tlv(TLV_TYPE_VALUE_TYPE, type)
184
+
185
+ if (type == REG_SZ)
186
+ data += "\x00"
187
+ elsif (type == REG_DWORD)
188
+ data = [ data.to_i ].pack("V")
189
+ end
190
+
191
+ request.add_tlv(TLV_TYPE_VALUE_DATA, data)
192
+
193
+ response = client.send_request(request)
194
+
195
+ return true
196
+ end
197
+
198
+ #
199
+ # Queries the registry value supplied in name and returns an
200
+ # initialized RegistryValue instance if a match is found.
201
+ #
202
+ def Registry.query_value(hkey, name)
203
+ request = Packet.create_request('stdapi_registry_query_value')
204
+
205
+ request.add_tlv(TLV_TYPE_HKEY, hkey)
206
+ request.add_tlv(TLV_TYPE_VALUE_NAME, name)
207
+
208
+ response = client.send_request(request)
209
+
210
+ data = response.get_tlv(TLV_TYPE_VALUE_DATA).value;
211
+ type = response.get_tlv(TLV_TYPE_VALUE_TYPE).value;
212
+
213
+ if (type == REG_SZ)
214
+ data = data[0..-2]
215
+ elsif (type == REG_DWORD)
216
+ data = data.unpack("N")[0]
217
+ end
218
+
219
+ return Rex::Post::Meterpreter::Extensions::Stdapi::Sys::RegistrySubsystem::RegistryValue.new(
220
+ client, hkey, name, type, data)
221
+ end
222
+
223
+ #
224
+ # Deletes the registry value supplied in name from the supplied
225
+ # registry key.
226
+ #
227
+ def Registry.delete_value(hkey, name)
228
+ request = Packet.create_request('stdapi_registry_delete_value')
229
+
230
+ request.add_tlv(TLV_TYPE_HKEY, hkey)
231
+ request.add_tlv(TLV_TYPE_VALUE_NAME, name)
232
+
233
+ if (client.send_request(request) != nil)
234
+ return true
235
+ end
236
+
237
+ return false
238
+ end
239
+
240
+ #
241
+ # Queries the registry class name and returns a string
242
+ #
243
+ def Registry.query_class(hkey)
244
+ request = Packet.create_request('stdapi_registry_query_class')
245
+
246
+ request.add_tlv(TLV_TYPE_HKEY, hkey)
247
+
248
+ response = client.send_request(request)
249
+ cls = response.get_tlv(TLV_TYPE_VALUE_DATA)
250
+ return nil if not cls
251
+ data = cls.value.gsub(/\x00.*/n, '')
252
+ return data
253
+ end
254
+
255
+ #
256
+ # Enumerates all of the values at the supplied hkey including their
257
+ # names. An array of RegistryValue's is returned.
258
+ #
259
+ def Registry.enum_value(hkey)
260
+ request = Packet.create_request('stdapi_registry_enum_value')
261
+ values = []
262
+
263
+ request.add_tlv(TLV_TYPE_HKEY, hkey)
264
+
265
+ response = client.send_request(request)
266
+
267
+ response.each(TLV_TYPE_VALUE_NAME) { |value_name|
268
+ values << Rex::Post::Meterpreter::Extensions::Stdapi::Sys::RegistrySubsystem::RegistryValue.new(
269
+ client, hkey, value_name.value)
270
+ }
271
+
272
+ return values
273
+ end
274
+
275
+ #
276
+ # Return the key value associated with the supplied string. This is useful
277
+ # for converting HKLM as a string into its actual integer representation.
278
+ #
279
+ def self.key2str(key)
280
+ if (key == 'HKLM' or key == 'HKEY_LOCAL_MACHINE')
281
+ return HKEY_LOCAL_MACHINE
282
+ elsif (key == 'HKCU' or key == 'HKEY_CURRENT_USER')
283
+ return HKEY_CURRENT_USER
284
+ elsif (key == 'HKU' or key == 'HKEY_USERS')
285
+ return HKEY_USERS
286
+ elsif (key == 'HKCR' or key == 'HKEY_CLASSES_ROOT')
287
+ return HKEY_CLASSES_ROOT
288
+ elsif (key == 'HKEY_CURRENT_CONFIG')
289
+ return HKEY_CURRENT_CONFIG
290
+ elsif (key == 'HKEY_PERFORMANCE_DATA')
291
+ return HKEY_PERFORMANCE_DATA
292
+ elsif (key == 'HKEY_DYN_DATA')
293
+ return HKEY_DYN_DATA
294
+ else
295
+ raise ArgumentError, "Unknown key: #{key}"
296
+ end
297
+ end
298
+
299
+ #
300
+ # Returns the integer value associated with the supplied registry value
301
+ # type (like REG_SZ).
302
+ #
303
+ def self.type2str(type)
304
+ return REG_SZ if (type == 'REG_SZ')
305
+ return REG_DWORD if (type == 'REG_DWORD')
306
+ return REG_BINARY if (type == 'REG_BINARY')
307
+ return REG_EXPAND_SZ if (type == 'REG_EXPAND_SZ')
308
+ return REG_NONE if (type == 'REG_NONE')
309
+ return nil
310
+ end
311
+
312
+ #
313
+ # Split the supplied full registry key into its root key and base key. For
314
+ # instance, passing HKLM\Software\Dog will return [ HKEY_LOCAL_MACHINE,
315
+ # 'Software\Dog' ]
316
+ #
317
+ def self.splitkey(str)
318
+ if (str =~ /^(.+?)\\(.*)$/)
319
+ [ key2str($1), $2 ]
320
+ else
321
+ [ key2str(str), nil ]
322
+ end
323
+ end
325
324
 
326
325
  end
327
326