librex 0.0.4 → 0.0.5

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 (389) hide show
  1. data/README.md +12 -0
  2. data/lib/rex.rb +0 -0
  3. data/lib/rex.rb.ts.rb +0 -0
  4. data/lib/rex/LICENSE +0 -0
  5. data/lib/rex/arch.rb +0 -0
  6. data/lib/rex/arch/sparc.rb +0 -0
  7. data/lib/rex/arch/sparc.rb.ut.rb +0 -0
  8. data/lib/rex/arch/x86.rb +0 -0
  9. data/lib/rex/arch/x86.rb.ut.rb +0 -0
  10. data/lib/rex/assembly/nasm.rb +0 -0
  11. data/lib/rex/assembly/nasm.rb.ut.rb +0 -0
  12. data/lib/rex/codepage.map +0 -0
  13. data/lib/rex/compat.rb +0 -0
  14. data/lib/rex/constants.rb +0 -0
  15. data/lib/rex/elfparsey.rb +0 -0
  16. data/lib/rex/elfparsey/elf.rb +0 -0
  17. data/lib/rex/elfparsey/elfbase.rb +2 -4
  18. data/lib/rex/elfparsey/exceptions.rb +0 -0
  19. data/lib/rex/elfscan.rb +0 -0
  20. data/lib/rex/elfscan/scanner.rb +0 -0
  21. data/lib/rex/elfscan/search.rb +10 -10
  22. data/lib/rex/encoder/alpha2.rb +0 -0
  23. data/lib/rex/encoder/alpha2/alpha_mixed.rb +0 -0
  24. data/lib/rex/encoder/alpha2/alpha_upper.rb +0 -0
  25. data/lib/rex/encoder/alpha2/generic.rb +0 -0
  26. data/lib/rex/encoder/alpha2/unicode_mixed.rb +0 -0
  27. data/lib/rex/encoder/alpha2/unicode_upper.rb +0 -0
  28. data/lib/rex/encoder/ndr.rb +0 -0
  29. data/lib/rex/encoder/ndr.rb.ut.rb +0 -0
  30. data/lib/rex/encoder/nonalpha.rb +0 -0
  31. data/lib/rex/encoder/nonupper.rb +0 -0
  32. data/lib/rex/encoder/xdr.rb +0 -0
  33. data/lib/rex/encoder/xdr.rb.ut.rb +0 -0
  34. data/lib/rex/encoder/xor.rb +0 -0
  35. data/lib/rex/encoder/xor/dword.rb +0 -0
  36. data/lib/rex/encoder/xor/dword_additive.rb +0 -0
  37. data/lib/rex/encoders/xor_dword.rb +0 -0
  38. data/lib/rex/encoders/xor_dword_additive.rb +0 -0
  39. data/lib/rex/encoders/xor_dword_additive.rb.ut.rb +0 -0
  40. data/lib/rex/encoding/xor.rb +0 -0
  41. data/lib/rex/encoding/xor.rb.ts.rb +0 -0
  42. data/lib/rex/encoding/xor/byte.rb +0 -0
  43. data/lib/rex/encoding/xor/byte.rb.ut.rb +0 -0
  44. data/lib/rex/encoding/xor/dword.rb +0 -0
  45. data/lib/rex/encoding/xor/dword.rb.ut.rb +0 -0
  46. data/lib/rex/encoding/xor/dword_additive.rb +0 -0
  47. data/lib/rex/encoding/xor/dword_additive.rb.ut.rb +0 -0
  48. data/lib/rex/encoding/xor/exceptions.rb +0 -0
  49. data/lib/rex/encoding/xor/generic.rb +0 -0
  50. data/lib/rex/encoding/xor/generic.rb.ut.rb +0 -0
  51. data/lib/rex/encoding/xor/qword.rb +0 -0
  52. data/lib/rex/encoding/xor/word.rb +0 -0
  53. data/lib/rex/encoding/xor/word.rb.ut.rb +0 -0
  54. data/lib/rex/exceptions.rb +0 -0
  55. data/lib/rex/exceptions.rb.ut.rb +0 -0
  56. data/lib/rex/exploitation/cmdstager.rb +0 -0
  57. data/lib/rex/exploitation/cmdstager/base.rb +6 -1
  58. data/lib/rex/exploitation/cmdstager/debug_asm.rb +0 -0
  59. data/lib/rex/exploitation/cmdstager/debug_write.rb +0 -0
  60. data/lib/rex/exploitation/cmdstager/tftp.rb +8 -8
  61. data/lib/rex/exploitation/cmdstager/vbs.rb +0 -0
  62. data/lib/rex/exploitation/egghunter.rb +143 -36
  63. data/lib/rex/exploitation/egghunter.rb.ut.rb +0 -0
  64. data/lib/rex/exploitation/encryptjs.rb +0 -0
  65. data/lib/rex/exploitation/heaplib.js.b64 +0 -0
  66. data/lib/rex/exploitation/heaplib.rb +0 -0
  67. data/lib/rex/exploitation/javascriptosdetect.rb +114 -15
  68. data/lib/rex/exploitation/obfuscatejs.rb +0 -0
  69. data/lib/rex/exploitation/omelet.rb +320 -0
  70. data/lib/rex/exploitation/omelet.rb.ut.rb +13 -0
  71. data/lib/rex/exploitation/opcodedb.rb +0 -0
  72. data/lib/rex/exploitation/opcodedb.rb.ut.rb +0 -0
  73. data/lib/rex/exploitation/seh.rb +0 -0
  74. data/lib/rex/exploitation/seh.rb.ut.rb +0 -0
  75. data/lib/rex/file.rb +1 -1
  76. data/lib/rex/file.rb.ut.rb +0 -0
  77. data/lib/rex/image_source.rb +0 -0
  78. data/lib/rex/image_source/disk.rb +0 -0
  79. data/lib/rex/image_source/image_source.rb +0 -0
  80. data/lib/rex/image_source/memory.rb +0 -0
  81. data/lib/rex/io/bidirectional_pipe.rb +0 -0
  82. data/lib/rex/io/datagram_abstraction.rb +0 -0
  83. data/lib/rex/io/stream.rb +1 -1
  84. data/lib/rex/io/stream_abstraction.rb +0 -0
  85. data/lib/rex/io/stream_server.rb +0 -0
  86. data/lib/rex/job_container.rb +0 -1
  87. data/lib/rex/logging.rb +0 -0
  88. data/lib/rex/logging/log_dispatcher.rb +0 -0
  89. data/lib/rex/logging/log_sink.rb +0 -0
  90. data/lib/rex/logging/sinks/flatfile.rb +0 -0
  91. data/lib/rex/logging/sinks/stderr.rb +0 -0
  92. data/lib/rex/machparsey.rb +0 -0
  93. data/lib/rex/machparsey/exceptions.rb +0 -0
  94. data/lib/rex/machparsey/machbase.rb +0 -0
  95. data/lib/rex/machscan.rb +0 -0
  96. data/lib/rex/machscan/scanner.rb +0 -0
  97. data/lib/rex/mime.rb +0 -0
  98. data/lib/rex/mime/header.rb +0 -0
  99. data/lib/rex/mime/message.rb +0 -0
  100. data/lib/rex/mime/part.rb +0 -0
  101. data/lib/rex/nop/opty2.rb +0 -0
  102. data/lib/rex/nop/opty2.rb.ut.rb +0 -0
  103. data/lib/rex/nop/opty2_tables.rb +0 -0
  104. data/lib/rex/ole.rb +0 -0
  105. data/lib/rex/ole/clsid.rb +0 -0
  106. data/lib/rex/ole/difat.rb +0 -0
  107. data/lib/rex/ole/directory.rb +0 -0
  108. data/lib/rex/ole/direntry.rb +0 -0
  109. data/lib/rex/ole/docs/dependencies.txt +8 -0
  110. data/lib/rex/ole/docs/references.txt +1 -0
  111. data/lib/rex/ole/fat.rb +0 -0
  112. data/lib/rex/ole/header.rb +3 -3
  113. data/lib/rex/ole/minifat.rb +0 -0
  114. data/lib/rex/ole/storage.rb +4 -4
  115. data/lib/rex/ole/stream.rb +0 -0
  116. data/lib/rex/ole/substorage.rb +0 -0
  117. data/lib/rex/ole/util.rb +0 -0
  118. data/lib/rex/parser/arguments.rb +0 -0
  119. data/lib/rex/parser/arguments.rb.ut.rb +0 -0
  120. data/lib/rex/parser/ini.rb +0 -0
  121. data/lib/rex/parser/ini.rb.ut.rb +0 -0
  122. data/lib/rex/parser/nexpose_xml.rb +0 -0
  123. data/lib/rex/parser/nmap_xml.rb +0 -0
  124. data/lib/rex/payloads.rb +0 -0
  125. data/lib/rex/payloads/win32.rb +0 -0
  126. data/lib/rex/payloads/win32/common.rb +0 -0
  127. data/lib/rex/payloads/win32/kernel.rb +0 -0
  128. data/lib/rex/payloads/win32/kernel/common.rb +0 -0
  129. data/lib/rex/payloads/win32/kernel/migration.rb +0 -0
  130. data/lib/rex/payloads/win32/kernel/recovery.rb +0 -0
  131. data/lib/rex/peparsey.rb +0 -0
  132. data/lib/rex/peparsey/exceptions.rb +0 -0
  133. data/lib/rex/peparsey/pe.rb +7 -1
  134. data/lib/rex/peparsey/pe_memdump.rb +0 -0
  135. data/lib/rex/peparsey/pebase.rb +27 -2
  136. data/lib/rex/peparsey/section.rb +0 -0
  137. data/lib/rex/pescan.rb +0 -0
  138. data/lib/rex/pescan/analyze.rb +0 -0
  139. data/lib/rex/pescan/scanner.rb +0 -0
  140. data/lib/rex/pescan/search.rb +0 -0
  141. data/lib/rex/platforms.rb +0 -0
  142. data/lib/rex/platforms/windows.rb +0 -0
  143. data/lib/rex/poly.rb +0 -0
  144. data/lib/rex/poly/block.rb +0 -0
  145. data/lib/rex/poly/register.rb +0 -0
  146. data/lib/rex/poly/register/x86.rb +0 -0
  147. data/lib/rex/post.rb +0 -0
  148. data/lib/rex/post/dir.rb +0 -0
  149. data/lib/rex/post/file.rb +0 -0
  150. data/lib/rex/post/file_stat.rb +0 -0
  151. data/lib/rex/post/gen.pl +0 -0
  152. data/lib/rex/post/io.rb +0 -0
  153. data/lib/rex/post/meterpreter.rb +0 -0
  154. data/lib/rex/post/meterpreter/channel.rb +0 -0
  155. data/lib/rex/post/meterpreter/channel_container.rb +0 -0
  156. data/lib/rex/post/meterpreter/channels/pool.rb +0 -0
  157. data/lib/rex/post/meterpreter/channels/pools/file.rb +0 -0
  158. data/lib/rex/post/meterpreter/channels/pools/stream_pool.rb +0 -0
  159. data/lib/rex/post/meterpreter/channels/stream.rb +0 -0
  160. data/lib/rex/post/meterpreter/client.rb +3 -0
  161. data/lib/rex/post/meterpreter/client_core.rb +0 -0
  162. data/lib/rex/post/meterpreter/dependencies.rb +0 -0
  163. data/lib/rex/post/meterpreter/extension.rb +0 -0
  164. data/lib/rex/post/meterpreter/extensions/espia/espia.rb +0 -0
  165. data/lib/rex/post/meterpreter/extensions/espia/tlv.rb +0 -0
  166. data/lib/rex/post/meterpreter/extensions/incognito/incognito.rb +0 -0
  167. data/lib/rex/post/meterpreter/extensions/incognito/tlv.rb +0 -0
  168. data/lib/rex/post/meterpreter/extensions/networkpug/networkpug.rb +57 -0
  169. data/lib/rex/post/meterpreter/extensions/networkpug/tlv.rb +15 -0
  170. data/lib/rex/post/meterpreter/extensions/priv/fs.rb +0 -0
  171. data/lib/rex/post/meterpreter/extensions/priv/passwd.rb +0 -0
  172. data/lib/rex/post/meterpreter/extensions/priv/priv.rb +0 -0
  173. data/lib/rex/post/meterpreter/extensions/priv/tlv.rb +0 -0
  174. data/lib/rex/post/meterpreter/extensions/sniffer/sniffer.rb +2 -1
  175. data/lib/rex/post/meterpreter/extensions/sniffer/tlv.rb +12 -10
  176. data/lib/rex/post/meterpreter/extensions/stdapi/constants.rb +0 -0
  177. data/lib/rex/post/meterpreter/extensions/stdapi/fs/dir.rb +0 -0
  178. data/lib/rex/post/meterpreter/extensions/stdapi/fs/file.rb +31 -0
  179. data/lib/rex/post/meterpreter/extensions/stdapi/fs/file_stat.rb +0 -0
  180. data/lib/rex/post/meterpreter/extensions/stdapi/fs/io.rb +0 -0
  181. data/lib/rex/post/meterpreter/extensions/stdapi/net/config.rb +0 -0
  182. data/lib/rex/post/meterpreter/extensions/stdapi/net/interface.rb +0 -0
  183. data/lib/rex/post/meterpreter/extensions/stdapi/net/route.rb +0 -0
  184. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/tcp_server_channel.rb +0 -0
  185. data/lib/rex/post/meterpreter/extensions/{railgun → stdapi/railgun}/api_constants.rb +38106 -38105
  186. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_advapi32.rb +1804 -0
  187. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_iphlpapi.rb +96 -0
  188. data/lib/rex/post/meterpreter/extensions/{railgun → stdapi/railgun/def}/def_kernel32.rb +3848 -3678
  189. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_ntdll.rb +153 -0
  190. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_shell32.rb +21 -0
  191. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_user32.rb +3169 -0
  192. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_ws2_32.rb +599 -0
  193. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/model.rb +540 -0
  194. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/multicall.rb +308 -0
  195. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/railgun.rb +196 -0
  196. data/lib/rex/post/meterpreter/extensions/{railgun → stdapi/railgun}/tlv.rb +6 -9
  197. data/lib/rex/post/meterpreter/extensions/stdapi/stdapi.rb +5 -0
  198. data/lib/rex/post/meterpreter/extensions/stdapi/sys/config.rb +0 -0
  199. data/lib/rex/post/meterpreter/extensions/stdapi/sys/event_log.rb +0 -0
  200. data/lib/rex/post/meterpreter/extensions/stdapi/sys/event_log_subsystem/event_record.rb +0 -0
  201. data/lib/rex/post/meterpreter/extensions/stdapi/sys/power.rb +0 -0
  202. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process.rb +0 -0
  203. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/image.rb +0 -0
  204. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/io.rb +0 -0
  205. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/memory.rb +0 -0
  206. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/thread.rb +0 -0
  207. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry.rb +0 -0
  208. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_key.rb +0 -0
  209. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_value.rb +0 -0
  210. data/lib/rex/post/meterpreter/extensions/stdapi/sys/thread.rb +0 -0
  211. data/lib/rex/post/meterpreter/extensions/stdapi/tlv.rb +6 -0
  212. data/lib/rex/post/meterpreter/extensions/stdapi/ui.rb +0 -0
  213. data/lib/rex/post/meterpreter/inbound_packet_handler.rb +0 -0
  214. data/lib/rex/post/meterpreter/object_aliases.rb +0 -0
  215. data/lib/rex/post/meterpreter/packet.rb +23 -1
  216. data/lib/rex/post/meterpreter/packet_dispatcher.rb +13 -2
  217. data/lib/rex/post/meterpreter/packet_parser.rb +0 -0
  218. data/lib/rex/post/meterpreter/packet_response_waiter.rb +17 -10
  219. data/lib/rex/post/meterpreter/ui/console.rb +0 -0
  220. data/lib/rex/post/meterpreter/ui/console/command_dispatcher.rb +0 -0
  221. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/core.rb +12 -7
  222. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/espia.rb +0 -0
  223. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/incognito.rb +0 -0
  224. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/networkpug.rb +221 -0
  225. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv.rb +0 -0
  226. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/elevate.rb +0 -0
  227. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/passwd.rb +0 -0
  228. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/timestomp.rb +0 -0
  229. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/sniffer.rb +4 -3
  230. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi.rb +0 -0
  231. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/fs.rb +56 -1
  232. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/net.rb +22 -0
  233. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/sys.rb +0 -0
  234. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/ui.rb +0 -0
  235. data/lib/rex/post/meterpreter/ui/console/interactive_channel.rb +0 -0
  236. data/lib/rex/post/permission.rb +0 -0
  237. data/lib/rex/post/process.rb +0 -0
  238. data/lib/rex/post/thread.rb +0 -0
  239. data/lib/rex/post/ui.rb +0 -0
  240. data/lib/rex/proto.rb +0 -0
  241. data/lib/rex/proto.rb.ts.rb +0 -0
  242. data/lib/rex/proto/dcerpc.rb +0 -0
  243. data/lib/rex/proto/dcerpc.rb.ts.rb +0 -0
  244. data/lib/rex/proto/dcerpc/client.rb +3 -1
  245. data/lib/rex/proto/dcerpc/exceptions.rb +0 -0
  246. data/lib/rex/proto/dcerpc/handle.rb +0 -0
  247. data/lib/rex/proto/dcerpc/handle.rb.ut.rb +0 -0
  248. data/lib/rex/proto/dcerpc/ndr.rb +0 -0
  249. data/lib/rex/proto/dcerpc/ndr.rb.ut.rb +0 -0
  250. data/lib/rex/proto/dcerpc/packet.rb +0 -0
  251. data/lib/rex/proto/dcerpc/packet.rb.ut.rb +0 -0
  252. data/lib/rex/proto/dcerpc/response.rb.ut.rb +0 -0
  253. data/lib/rex/proto/dcerpc/uuid.rb +0 -0
  254. data/lib/rex/proto/dcerpc/uuid.rb.ut.rb +0 -0
  255. data/lib/rex/proto/dhcp.rb +7 -0
  256. data/lib/rex/proto/dhcp/constants.rb +33 -0
  257. data/lib/rex/proto/dhcp/server.rb +285 -0
  258. data/lib/rex/proto/drda.rb +0 -0
  259. data/lib/rex/proto/drda.rb.ts.rb +0 -0
  260. data/lib/rex/proto/drda/constants.rb +0 -0
  261. data/lib/rex/proto/drda/constants.rb.ut.rb +0 -0
  262. data/lib/rex/proto/drda/packet.rb +0 -0
  263. data/lib/rex/proto/drda/packet.rb.ut.rb +0 -0
  264. data/lib/rex/proto/drda/utils.rb +0 -0
  265. data/lib/rex/proto/drda/utils.rb.ut.rb +0 -0
  266. data/lib/rex/proto/http.rb +0 -0
  267. data/lib/rex/proto/http.rb.ts.rb +0 -0
  268. data/lib/rex/proto/http/client.rb +27 -2
  269. data/lib/rex/proto/http/client.rb.ut.rb +4 -2
  270. data/lib/rex/proto/http/handler.rb +0 -0
  271. data/lib/rex/proto/http/handler/erb.rb +0 -0
  272. data/lib/rex/proto/http/handler/erb.rb.ut.rb +0 -0
  273. data/lib/rex/proto/http/handler/erb.rb.ut.rb.rhtml +0 -0
  274. data/lib/rex/proto/http/handler/proc.rb +6 -0
  275. data/lib/rex/proto/http/handler/proc.rb.ut.rb +0 -0
  276. data/lib/rex/proto/http/header.rb +0 -0
  277. data/lib/rex/proto/http/header.rb.ut.rb +0 -0
  278. data/lib/rex/proto/http/packet.rb +20 -19
  279. data/lib/rex/proto/http/packet.rb.ut.rb +0 -0
  280. data/lib/rex/proto/http/request.rb +0 -0
  281. data/lib/rex/proto/http/request.rb.ut.rb +0 -0
  282. data/lib/rex/proto/http/response.rb +0 -0
  283. data/lib/rex/proto/http/response.rb.ut.rb +0 -0
  284. data/lib/rex/proto/http/server.rb +5 -3
  285. data/lib/rex/proto/http/server.rb.ut.rb +0 -0
  286. data/lib/rex/proto/proxy/socks4a.rb +440 -0
  287. data/lib/rex/proto/smb.rb +0 -0
  288. data/lib/rex/proto/smb.rb.ts.rb +0 -0
  289. data/lib/rex/proto/smb/client.rb +110 -61
  290. data/lib/rex/proto/smb/client.rb.ut.rb +0 -0
  291. data/lib/rex/proto/smb/constants.rb +5 -3
  292. data/lib/rex/proto/smb/constants.rb.ut.rb +0 -0
  293. data/lib/rex/proto/smb/crypt.rb +0 -0
  294. data/lib/rex/proto/smb/crypt.rb.ut.rb +0 -0
  295. data/lib/rex/proto/smb/exceptions.rb +0 -0
  296. data/lib/rex/proto/smb/simpleclient.rb +0 -0
  297. data/lib/rex/proto/smb/simpleclient.rb.ut.rb +0 -0
  298. data/lib/rex/proto/smb/utils.rb +2 -0
  299. data/lib/rex/proto/smb/utils.rb.ut.rb +0 -0
  300. data/lib/rex/proto/sunrpc.rb +0 -0
  301. data/lib/rex/proto/sunrpc/client.rb +0 -0
  302. data/lib/rex/proto/tftp.rb +10 -1
  303. data/lib/rex/proto/tftp/constants.rb +5 -3
  304. data/lib/rex/proto/tftp/server.rb +79 -9
  305. data/lib/rex/script.rb +0 -0
  306. data/lib/rex/script/base.rb +0 -0
  307. data/lib/rex/script/meterpreter.rb +0 -0
  308. data/lib/rex/script/shell.rb +0 -0
  309. data/lib/rex/service.rb +0 -0
  310. data/lib/rex/service_manager.rb +0 -0
  311. data/lib/rex/service_manager.rb.ut.rb +0 -0
  312. data/lib/rex/services/local_relay.rb +0 -0
  313. data/lib/rex/socket.rb +6 -4
  314. data/lib/rex/socket.rb.ut.rb +0 -0
  315. data/lib/rex/socket/comm.rb +0 -0
  316. data/lib/rex/socket/comm/local.rb +0 -0
  317. data/lib/rex/socket/comm/local.rb.ut.rb +0 -0
  318. data/lib/rex/socket/ip.rb +0 -0
  319. data/lib/rex/socket/parameters.rb +0 -0
  320. data/lib/rex/socket/parameters.rb.ut.rb +0 -0
  321. data/lib/rex/socket/range_walker.rb +0 -0
  322. data/lib/rex/socket/range_walker.rb.ut.rb +0 -0
  323. data/lib/rex/socket/ssl_tcp.rb +1 -1
  324. data/lib/rex/socket/ssl_tcp.rb.ut.rb +0 -0
  325. data/lib/rex/socket/ssl_tcp_server.rb +0 -0
  326. data/lib/rex/socket/ssl_tcp_server.rb.ut.rb +0 -0
  327. data/lib/rex/socket/subnet_walker.rb +0 -0
  328. data/lib/rex/socket/subnet_walker.rb.ut.rb +0 -0
  329. data/lib/rex/socket/switch_board.rb.ut.rb +0 -0
  330. data/lib/rex/socket/tcp.rb +0 -0
  331. data/lib/rex/socket/tcp.rb.ut.rb +0 -0
  332. data/lib/rex/socket/tcp_server.rb +0 -0
  333. data/lib/rex/socket/tcp_server.rb.ut.rb +0 -0
  334. data/lib/rex/socket/udp.rb +0 -0
  335. data/lib/rex/socket/udp.rb.ut.rb +0 -0
  336. data/lib/rex/struct2.rb +0 -0
  337. data/lib/rex/struct2/c_struct.rb +0 -0
  338. data/lib/rex/struct2/c_struct_template.rb +0 -0
  339. data/lib/rex/struct2/constant.rb +0 -0
  340. data/lib/rex/struct2/element.rb +0 -0
  341. data/lib/rex/struct2/generic.rb +0 -0
  342. data/lib/rex/struct2/restraint.rb +0 -0
  343. data/lib/rex/struct2/s_string.rb +0 -0
  344. data/lib/rex/struct2/s_struct.rb +0 -0
  345. data/lib/rex/sync.rb +0 -0
  346. data/lib/rex/sync/event.rb +0 -0
  347. data/lib/rex/sync/read_write_lock.rb +0 -0
  348. data/lib/rex/sync/ref.rb +0 -0
  349. data/lib/rex/sync/thread_safe.rb +0 -0
  350. data/lib/rex/test.rb +0 -0
  351. data/lib/rex/text.rb +13 -3
  352. data/lib/rex/text.rb.ut.rb +9 -4
  353. data/lib/rex/time.rb +0 -0
  354. data/lib/rex/transformer.rb +0 -0
  355. data/lib/rex/transformer.rb.ut.rb +0 -0
  356. data/lib/rex/ui.rb +0 -0
  357. data/lib/rex/ui/interactive.rb +0 -0
  358. data/lib/rex/ui/output.rb +0 -0
  359. data/lib/rex/ui/output/none.rb +0 -0
  360. data/lib/rex/ui/progress_tracker.rb +0 -0
  361. data/lib/rex/ui/subscriber.rb +0 -0
  362. data/lib/rex/ui/text/color.rb +0 -0
  363. data/lib/rex/ui/text/color.rb.ut.rb +0 -0
  364. data/lib/rex/ui/text/dispatcher_shell.rb +0 -0
  365. data/lib/rex/ui/text/input.rb +0 -0
  366. data/lib/rex/ui/text/input/buffer.rb +0 -0
  367. data/lib/rex/ui/text/input/readline.rb +0 -0
  368. data/lib/rex/ui/text/input/socket.rb +0 -0
  369. data/lib/rex/ui/text/input/stdio.rb +0 -0
  370. data/lib/rex/ui/text/irb_shell.rb +0 -0
  371. data/lib/rex/ui/text/output.rb +0 -0
  372. data/lib/rex/ui/text/output/buffer.rb +0 -0
  373. data/lib/rex/ui/text/output/file.rb +0 -0
  374. data/lib/rex/ui/text/output/socket.rb +0 -0
  375. data/lib/rex/ui/text/output/stdio.rb +0 -0
  376. data/lib/rex/ui/text/progress_tracker.rb +0 -0
  377. data/lib/rex/ui/text/progress_tracker.rb.ut.rb +0 -0
  378. data/lib/rex/ui/text/shell.rb +9 -6
  379. data/lib/rex/ui/text/table.rb +5 -0
  380. data/lib/rex/ui/text/table.rb.ut.rb +0 -0
  381. data/lib/rex/zip.rb +0 -0
  382. data/lib/rex/zip/archive.rb +29 -1
  383. data/lib/rex/zip/blocks.rb +0 -0
  384. data/lib/rex/zip/entry.rb +5 -1
  385. metadata +369 -413
  386. data/README +0 -8
  387. data/lib/rex/post/meterpreter/extensions/railgun/api.rb +0 -9303
  388. data/lib/rex/post/meterpreter/extensions/railgun/railgun.rb +0 -815
  389. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/railgun.rb +0 -57
File without changes
File without changes
@@ -321,7 +321,7 @@ EVADE = Rex::Proto::SMB::Evasions
321
321
  end
322
322
 
323
323
  if (pkt['Payload']['SMB'].v['WordCount'] >= 18)
324
- res = SMB_NTTRANS_RES_PKT.make_struct
324
+ res = CONST::SMB_NTTRANS_RES_PKT.make_struct
325
325
  res.from_s(data)
326
326
  return res
327
327
  end
@@ -407,7 +407,7 @@ EVADE = Rex::Proto::SMB::Evasions
407
407
  end
408
408
 
409
409
  # Request a SMB session over NetBIOS
410
- def session_request(name = '*SMBSERVER')
410
+ def session_request(name = '*SMBSERVER', do_recv = true)
411
411
 
412
412
  name ||= '*SMBSERVER'
413
413
 
@@ -420,7 +420,9 @@ EVADE = Rex::Proto::SMB::Evasions
420
420
  pkt['Payload'].v['Payload'] = data
421
421
 
422
422
  # Most SMB implementations can't handle this being fragmented
423
- self.smb_send(pkt.to_s, EVADE::EVASION_NONE)
423
+ ret = self.smb_send(pkt.to_s, EVADE::EVASION_NONE)
424
+ return ret if not do_recv
425
+
424
426
  res = self.smb_recv
425
427
 
426
428
  ack = CONST::NBRAW_PKT.make_struct
@@ -434,7 +436,7 @@ EVADE = Rex::Proto::SMB::Evasions
434
436
  end
435
437
 
436
438
  # Negotiate a SMB dialect
437
- def negotiate(extended=true)
439
+ def negotiate(extended=true, do_recv = true)
438
440
 
439
441
  dialects = ['LANMAN1.0', 'LM1.2X002' ]
440
442
 
@@ -458,7 +460,9 @@ EVADE = Rex::Proto::SMB::Evasions
458
460
 
459
461
  pkt['Payload'].v['Payload'] = data
460
462
 
461
- self.smb_send(pkt.to_s)
463
+ ret = self.smb_send(pkt.to_s)
464
+ return ret if not do_recv
465
+
462
466
  ack = self.smb_recv_parse(CONST::SMB_COM_NEGOTIATE)
463
467
 
464
468
  idx = ack['Payload'].v['Dialect']
@@ -507,9 +511,33 @@ EVADE = Rex::Proto::SMB::Evasions
507
511
  # buf[16, buf.length - 16]
508
512
  end
509
513
 
510
- if (ack['Payload'].v['ServerDate'] > 0)
511
- stamp = UTILS.time_smb_to_unix(ack['Payload'].v['ServerDate'],ack['Payload'].v['ServerTime'])
514
+ # The number of 100-nanosecond intervals that have elapsed since January 1, 1601, in
515
+ # Coordinated Universal Time (UTC) format.
516
+ # We convert it to a friendly Time object here
517
+ self.system_time = UTILS.time_smb_to_unix(ack['Payload'].v['SystemTimeHigh'],ack['Payload'].v['SystemTimeLow'])
518
+ self.system_time = ::Time.at( self.system_time )
519
+
520
+ # A signed 16-bit signed integer that represents the server's time zone, in minutes,
521
+ # from UTC. The time zone of the server MUST be expressed in minutes, plus or minus,
522
+ # from UTC.
523
+ # NOTE: althought the spec says +/- it doesn't say that it should be inverted :-/
524
+ system_zone = ack['Payload'].v['ServerTimeZone']
525
+ # Convert the ServerTimeZone to _seconds_ and back into a signed integer :-/
526
+ if (system_zone & 0x8000) == 0x8000
527
+ system_zone = (( (~system_zone) & 0x0FFF ) + 1 )
528
+ else
529
+ system_zone *= -1
512
530
  end
531
+ self.system_zone = system_zone * 60
532
+
533
+ # XXX: this is being commented out because ruby prior to 1.9.2 doesn't
534
+ # seem to support representing non-utc or local times (eg, a time in
535
+ # another timezone) If you know a way to do it in pre-1.9.2 please
536
+ # tell us!
537
+ =begin
538
+ # Adjust the system_time object to reflect the remote timezone
539
+ self.system_time = self.system_time.utc.localtime(system_zone)
540
+ =end
513
541
 
514
542
  return ack
515
543
  end
@@ -534,7 +562,7 @@ EVADE = Rex::Proto::SMB::Evasions
534
562
  end
535
563
 
536
564
  # Authenticate using clear-text passwords
537
- def session_setup_clear(user = '', pass = '', domain = '')
565
+ def session_setup_clear(user = '', pass = '', domain = '', do_recv = true)
538
566
 
539
567
  data = [ pass, user, domain, self.native_os, self.native_lm ].collect{ |a| a + "\x00" }.join('');
540
568
 
@@ -554,7 +582,9 @@ EVADE = Rex::Proto::SMB::Evasions
554
582
  pkt['Payload'].v['SessionKey'] = self.session_id
555
583
  pkt['Payload'].v['Payload'] = data
556
584
 
557
- self.smb_send(pkt.to_s)
585
+ ret = self.smb_send(pkt.to_s)
586
+ return ret if not do_recv
587
+
558
588
  ack = self.smb_recv_parse(CONST::SMB_COM_SESSION_SETUP_ANDX)
559
589
 
560
590
  if (ack['Payload'].v['Action'] != 1 and user.length > 0)
@@ -572,7 +602,7 @@ EVADE = Rex::Proto::SMB::Evasions
572
602
  end
573
603
 
574
604
  # Authenticate using NTLMv1
575
- def session_setup_ntlmv1(user = '', pass = '', domain = '')
605
+ def session_setup_ntlmv1(user = '', pass = '', domain = '', do_recv = true)
576
606
 
577
607
  raise XCEPT::NTLM1MissingChallenge if not self.challenge_key
578
608
 
@@ -609,7 +639,9 @@ EVADE = Rex::Proto::SMB::Evasions
609
639
  pkt['Payload'].v['SessionKey'] = self.session_id
610
640
  pkt['Payload'].v['Payload'] = data
611
641
 
612
- self.smb_send(pkt.to_s)
642
+ ret = self.smb_send(pkt.to_s)
643
+ return ret if not do_recv
644
+
613
645
  ack = self.smb_recv_parse(CONST::SMB_COM_SESSION_SETUP_ANDX)
614
646
 
615
647
  if (ack['Payload'].v['Action'] != 1 and user.length > 0)
@@ -629,7 +661,7 @@ EVADE = Rex::Proto::SMB::Evasions
629
661
 
630
662
 
631
663
  # Authenticate using NTLMv1 with a precomputed hash pair
632
- def session_setup_ntlmv1_prehash(user, domain, hash_lm, hash_nt)
664
+ def session_setup_ntlmv1_prehash(user, domain, hash_lm, hash_nt, do_recv = true)
633
665
 
634
666
  data = ''
635
667
  data << hash_lm
@@ -656,7 +688,9 @@ EVADE = Rex::Proto::SMB::Evasions
656
688
  pkt['Payload'].v['SessionKey'] = self.session_id
657
689
  pkt['Payload'].v['Payload'] = data
658
690
 
659
- self.smb_send(pkt.to_s)
691
+ ret = self.smb_send(pkt.to_s)
692
+ return ret if not do_recv
693
+
660
694
  ack = self.smb_recv_parse(CONST::SMB_COM_SESSION_SETUP_ANDX)
661
695
 
662
696
  if (ack['Payload'].v['Action'] != 1 and user.length > 0)
@@ -675,7 +709,7 @@ EVADE = Rex::Proto::SMB::Evasions
675
709
  end
676
710
 
677
711
  # Authenticate using extended security negotiation (NTLMv2)
678
- def session_setup_ntlmv2(user = '', pass = '', domain = '', name = nil)
712
+ def session_setup_ntlmv2(user = '', pass = '', domain = '', name = nil, do_recv = true)
679
713
 
680
714
  if (name == nil)
681
715
  name = Rex::Text.rand_text_alphanumeric(16)
@@ -703,7 +737,9 @@ EVADE = Rex::Proto::SMB::Evasions
703
737
  pkt['Payload'].v['SessionKey'] = self.session_id
704
738
  pkt['Payload'].v['Payload'] = blob + native_data
705
739
 
706
- self.smb_send(pkt.to_s)
740
+ ret = self.smb_send(pkt.to_s)
741
+ return ret if not do_recv
742
+
707
743
  ack = self.smb_recv_parse(CONST::SMB_COM_SESSION_SETUP_ANDX, true)
708
744
 
709
745
 
@@ -804,7 +840,9 @@ EVADE = Rex::Proto::SMB::Evasions
804
840
  pkt['Payload'].v['SessionKey'] = self.session_id
805
841
  pkt['Payload'].v['Payload'] = blob + native_data
806
842
 
843
+ # NOTE: if do_recv is set to false, we cant reach here...
807
844
  self.smb_send(pkt.to_s)
845
+
808
846
  ack = self.smb_recv_parse(CONST::SMB_COM_SESSION_SETUP_ANDX, true)
809
847
 
810
848
  # Make sure that authentication succeeded
@@ -831,7 +869,7 @@ EVADE = Rex::Proto::SMB::Evasions
831
869
 
832
870
 
833
871
  # An exploit helper function for sending arbitrary SPNEGO blobs
834
- def session_setup_ntlmv2_blob(blob = '')
872
+ def session_setup_ntlmv2_blob(blob = '', do_recv = true)
835
873
  native_data = ''
836
874
  native_data << self.native_os + "\x00"
837
875
  native_data << self.native_lm + "\x00"
@@ -853,13 +891,15 @@ EVADE = Rex::Proto::SMB::Evasions
853
891
  pkt['Payload'].v['SessionKey'] = self.session_id
854
892
  pkt['Payload'].v['Payload'] = blob + native_data
855
893
 
856
- self.smb_send(pkt.to_s)
894
+ ret = self.smb_send(pkt.to_s)
895
+ return ret if not do_recv
896
+
857
897
  self.smb_recv_parse(CONST::SMB_COM_SESSION_SETUP_ANDX, false)
858
898
  end
859
899
 
860
900
 
861
901
  # Authenticate using extended security negotiation (NTLMv2), but stop half-way, using the temporary ID
862
- def session_setup_ntlmv2_temp(domain = '', name = nil)
902
+ def session_setup_ntlmv2_temp(domain = '', name = nil, do_recv = true)
863
903
 
864
904
  if (name == nil)
865
905
  name = Rex::Text.rand_text_alphanumeric(16)
@@ -887,7 +927,9 @@ EVADE = Rex::Proto::SMB::Evasions
887
927
  pkt['Payload'].v['SessionKey'] = self.session_id
888
928
  pkt['Payload'].v['Payload'] = blob + native_data
889
929
 
890
- self.smb_send(pkt.to_s)
930
+ ret = self.smb_send(pkt.to_s)
931
+ return ret if not do_recv
932
+
891
933
  ack = self.smb_recv_parse(CONST::SMB_COM_SESSION_SETUP_ANDX, true)
892
934
 
893
935
  # The server doesn't know about NTLM_NEGOTIATE, try ntlmv1
@@ -930,7 +972,7 @@ EVADE = Rex::Proto::SMB::Evasions
930
972
  end
931
973
 
932
974
  # Connect to a specified share with an optional password
933
- def tree_connect(share = 'IPC$', pass = '')
975
+ def tree_connect(share = 'IPC$', pass = '', do_recv = true)
934
976
 
935
977
  data = [ pass, share, '?????' ].collect{ |a| a + "\x00" }.join('');
936
978
 
@@ -946,7 +988,8 @@ EVADE = Rex::Proto::SMB::Evasions
946
988
  pkt['Payload'].v['Capabilities'] = 64
947
989
  pkt['Payload'].v['Payload'] = data
948
990
 
949
- self.smb_send(pkt.to_s)
991
+ ret = self.smb_send(pkt.to_s)
992
+ return ret if not do_recv
950
993
 
951
994
  ack = self.smb_recv_parse(CONST::SMB_COM_TREE_CONNECT_ANDX)
952
995
 
@@ -958,7 +1001,7 @@ EVADE = Rex::Proto::SMB::Evasions
958
1001
  end
959
1002
 
960
1003
  # Disconnect from the current tree
961
- def tree_disconnect(tree_id = self.last_tree_id)
1004
+ def tree_disconnect(tree_id = self.last_tree_id, do_recv = true)
962
1005
 
963
1006
  pkt = CONST::SMB_TREE_DISCONN_PKT.make_struct
964
1007
  self.smb_defaults(pkt['Payload']['SMB'])
@@ -969,7 +1012,8 @@ EVADE = Rex::Proto::SMB::Evasions
969
1012
  pkt['Payload']['SMB'].v['WordCount'] = 0
970
1013
  pkt['Payload']['SMB'].v['TreeID'] = tree_id
971
1014
 
972
- self.smb_send(pkt.to_s)
1015
+ ret = self.smb_send(pkt.to_s)
1016
+ return ret if not do_recv
973
1017
 
974
1018
  ack = self.smb_recv_parse(CONST::SMB_COM_TREE_DISCONNECT)
975
1019
 
@@ -986,7 +1030,7 @@ EVADE = Rex::Proto::SMB::Evasions
986
1030
  end
987
1031
 
988
1032
  # Creates a file or opens an existing pipe
989
- def create(filename, disposition = 1, impersonation = 2)
1033
+ def create(filename, disposition = 1, impersonation = 2, do_recv = true)
990
1034
 
991
1035
  pkt = CONST::SMB_CREATE_PKT.make_struct
992
1036
  self.smb_defaults(pkt['Payload']['SMB'])
@@ -1006,7 +1050,8 @@ EVADE = Rex::Proto::SMB::Evasions
1006
1050
  pkt['Payload'].v['Disposition'] = disposition
1007
1051
  pkt['Payload'].v['Payload'] = filename + "\x00"
1008
1052
 
1009
- self.smb_send(pkt.to_s)
1053
+ ret = self.smb_send(pkt.to_s)
1054
+ return ret if not do_recv
1010
1055
 
1011
1056
  ack = self.smb_recv_parse(CONST::SMB_COM_NT_CREATE_ANDX)
1012
1057
 
@@ -1019,7 +1064,7 @@ EVADE = Rex::Proto::SMB::Evasions
1019
1064
  end
1020
1065
 
1021
1066
  # Deletes a file from a share
1022
- def delete(filename, tree_id = self.last_tree_id)
1067
+ def delete(filename, tree_id = self.last_tree_id, do_recv = true)
1023
1068
 
1024
1069
  pkt = CONST::SMB_DELETE_PKT.make_struct
1025
1070
  self.smb_defaults(pkt['Payload']['SMB'])
@@ -1034,7 +1079,8 @@ EVADE = Rex::Proto::SMB::Evasions
1034
1079
  pkt['Payload'].v['BufferFormat'] = 4
1035
1080
  pkt['Payload'].v['Payload'] = filename + "\x00"
1036
1081
 
1037
- self.smb_send(pkt.to_s)
1082
+ ret = self.smb_send(pkt.to_s)
1083
+ return ret if not do_recv
1038
1084
 
1039
1085
  ack = self.smb_recv_parse(CONST::SMB_COM_DELETE)
1040
1086
 
@@ -1042,7 +1088,7 @@ EVADE = Rex::Proto::SMB::Evasions
1042
1088
  end
1043
1089
 
1044
1090
  # Opens an existing file or creates a new one
1045
- def open(filename, mode = 0x12, access = 0x42)
1091
+ def open(filename, mode = 0x12, access = 0x42, do_recv = true)
1046
1092
 
1047
1093
  pkt = CONST::SMB_OPEN_PKT.make_struct
1048
1094
  self.smb_defaults(pkt['Payload']['SMB'])
@@ -1058,7 +1104,8 @@ EVADE = Rex::Proto::SMB::Evasions
1058
1104
  pkt['Payload'].v['OpenFunction'] = mode
1059
1105
  pkt['Payload'].v['Payload'] = filename + "\x00"
1060
1106
 
1061
- self.smb_send(pkt.to_s)
1107
+ ret = self.smb_send(pkt.to_s)
1108
+ return ret if not do_recv
1062
1109
 
1063
1110
  ack = self.smb_recv_parse(CONST::SMB_COM_OPEN_ANDX)
1064
1111
 
@@ -1071,7 +1118,7 @@ EVADE = Rex::Proto::SMB::Evasions
1071
1118
  end
1072
1119
 
1073
1120
  # Closes an open file handle
1074
- def close(file_id = self.last_file_id, tree_id = self.last_tree_id)
1121
+ def close(file_id = self.last_file_id, tree_id = self.last_tree_id, do_recv = true)
1075
1122
 
1076
1123
  pkt = CONST::SMB_CLOSE_PKT.make_struct
1077
1124
  self.smb_defaults(pkt['Payload']['SMB'])
@@ -1085,7 +1132,8 @@ EVADE = Rex::Proto::SMB::Evasions
1085
1132
  pkt['Payload'].v['FileID'] = file_id
1086
1133
  pkt['Payload'].v['LastWrite'] = -1
1087
1134
 
1088
- self.smb_send(pkt.to_s)
1135
+ ret = self.smb_send(pkt.to_s)
1136
+ return ret if not do_recv
1089
1137
 
1090
1138
  ack = self.smb_recv_parse(CONST::SMB_COM_CLOSE)
1091
1139
 
@@ -1094,7 +1142,7 @@ EVADE = Rex::Proto::SMB::Evasions
1094
1142
 
1095
1143
 
1096
1144
  # Writes data to an open file handle
1097
- def write(file_id = self.last_file_id, offset = 0, data = '')
1145
+ def write(file_id = self.last_file_id, offset = 0, data = '', do_recv = true)
1098
1146
 
1099
1147
  pkt = CONST::SMB_WRITE_PKT.make_struct
1100
1148
  self.smb_defaults(pkt['Payload']['SMB'])
@@ -1119,7 +1167,8 @@ EVADE = Rex::Proto::SMB::Evasions
1119
1167
  pkt['Payload'].v['DataOffset'] = data_offset + filler.length
1120
1168
  pkt['Payload'].v['Payload'] = filler + data
1121
1169
 
1122
- self.smb_send(pkt.to_s)
1170
+ ret = self.smb_send(pkt.to_s)
1171
+ return ret if not do_recv
1123
1172
 
1124
1173
  ack = self.smb_recv_parse(CONST::SMB_COM_WRITE_ANDX)
1125
1174
 
@@ -1128,7 +1177,7 @@ EVADE = Rex::Proto::SMB::Evasions
1128
1177
 
1129
1178
 
1130
1179
  # Reads data from an open file handle
1131
- def read(file_id = self.last_file_id, offset = 0, data_length = 64000)
1180
+ def read(file_id = self.last_file_id, offset = 0, data_length = 64000, do_recv = true)
1132
1181
 
1133
1182
  pkt = CONST::SMB_READ_PKT.make_struct
1134
1183
  self.smb_defaults(pkt['Payload']['SMB'])
@@ -1146,7 +1195,8 @@ EVADE = Rex::Proto::SMB::Evasions
1146
1195
  pkt['Payload'].v['MinCount'] = data_length
1147
1196
  pkt['Payload'].v['Reserved2'] = -1
1148
1197
 
1149
- self.smb_send(pkt.to_s)
1198
+ ret = self.smb_send(pkt.to_s)
1199
+ return ret if not do_recv
1150
1200
 
1151
1201
  ack = self.smb_recv_parse(CONST::SMB_COM_READ_ANDX, true)
1152
1202
 
@@ -1182,7 +1232,7 @@ EVADE = Rex::Proto::SMB::Evasions
1182
1232
  end
1183
1233
 
1184
1234
  # Perform a transaction against a given pipe name
1185
- def trans(pipe, param = '', body = '', setup_count = 0, setup_data = '', no_response = nil)
1235
+ def trans(pipe, param = '', body = '', setup_count = 0, setup_data = '', no_response = false, do_recv = true)
1186
1236
 
1187
1237
  # Null-terminate the pipe parameter if needed
1188
1238
  if (pipe[-1,1] != "\x00")
@@ -1242,12 +1292,10 @@ EVADE = Rex::Proto::SMB::Evasions
1242
1292
  pkt['Payload'].v['Flags'] = 2
1243
1293
  end
1244
1294
 
1245
- response = self.smb_send(pkt.to_s)
1246
- if no_response
1247
- return response
1248
- end
1295
+ ret = self.smb_send(pkt.to_s)
1296
+ return ret if no_response or not do_recv
1249
1297
 
1250
- return self.smb_recv_parse(CONST::SMB_COM_TRANSACTION)
1298
+ self.smb_recv_parse(CONST::SMB_COM_TRANSACTION)
1251
1299
  end
1252
1300
 
1253
1301
 
@@ -1255,7 +1303,7 @@ EVADE = Rex::Proto::SMB::Evasions
1255
1303
  # Perform a transaction against a given pipe name
1256
1304
  # Difference from trans: sets MaxParam/MaxData to zero
1257
1305
  # This is required to trigger mailslot bug :-(
1258
- def trans_maxzero(pipe, param = '', body = '', setup_count = 0, setup_data = '', no_response = nil)
1306
+ def trans_maxzero(pipe, param = '', body = '', setup_count = 0, setup_data = '', no_response = false, do_recv = true)
1259
1307
 
1260
1308
  # Null-terminate the pipe parameter if needed
1261
1309
  if (pipe[-1] != 0)
@@ -1315,17 +1363,15 @@ EVADE = Rex::Proto::SMB::Evasions
1315
1363
  pkt['Payload'].v['Flags'] = 2
1316
1364
  end
1317
1365
 
1318
- response = self.smb_send(pkt.to_s)
1319
- if no_response
1320
- return response
1321
- end
1366
+ ret = self.smb_send(pkt.to_s)
1367
+ return ret if no_response or not do_recv
1322
1368
 
1323
- return self.smb_recv_parse(CONST::SMB_COM_TRANSACTION)
1369
+ self.smb_recv_parse(CONST::SMB_COM_TRANSACTION)
1324
1370
  end
1325
1371
 
1326
1372
 
1327
1373
  # Perform a transaction against a given pipe name (no null terminator)
1328
- def trans_nonull(pipe, param = '', body = '', setup_count = 0, setup_data = '', no_response = nil)
1374
+ def trans_nonull(pipe, param = '', body = '', setup_count = 0, setup_data = '', no_response = false, do_recv = true)
1329
1375
 
1330
1376
  pkt = CONST::SMB_TRANS_PKT.make_struct
1331
1377
  self.smb_defaults(pkt['Payload']['SMB'])
@@ -1380,16 +1426,14 @@ EVADE = Rex::Proto::SMB::Evasions
1380
1426
  pkt['Payload'].v['Flags'] = 2
1381
1427
  end
1382
1428
 
1383
- response = self.smb_send(pkt.to_s)
1384
- if no_response
1385
- return response
1386
- end
1429
+ ret = self.smb_send(pkt.to_s)
1430
+ return ret if no_response or not do_recv
1387
1431
 
1388
- return self.smb_recv_parse(CONST::SMB_COM_TRANSACTION)
1432
+ self.smb_recv_parse(CONST::SMB_COM_TRANSACTION)
1389
1433
  end
1390
1434
 
1391
1435
  # Perform a transaction2 request using the specified subcommand, parameters, and data
1392
- def trans2(subcommand, param = '', body = '')
1436
+ def trans2(subcommand, param = '', body = '', do_recv = true)
1393
1437
 
1394
1438
  setup_count = 1
1395
1439
  setup_data = [subcommand].pack('v')
@@ -1419,10 +1463,11 @@ EVADE = Rex::Proto::SMB::Evasions
1419
1463
  pkt['Payload'].v['SetupCount'] = setup_count
1420
1464
  pkt['Payload'].v['SetupData'] = setup_data
1421
1465
 
1422
-
1423
1466
  pkt['Payload'].v['Payload'] = data
1424
1467
 
1425
- self.smb_send(pkt.to_s)
1468
+ ret = self.smb_send(pkt.to_s)
1469
+ return ret if not do_recv
1470
+
1426
1471
  ack = self.smb_recv_parse(CONST::SMB_COM_TRANSACTION2)
1427
1472
 
1428
1473
  return ack
@@ -1430,7 +1475,7 @@ EVADE = Rex::Proto::SMB::Evasions
1430
1475
 
1431
1476
 
1432
1477
  # Perform a nttransaction request using the specified subcommand, parameters, and data
1433
- def nttrans(subcommand, param = '', body = '', setup_count = 0, setup_data = '')
1478
+ def nttrans(subcommand, param = '', body = '', setup_count = 0, setup_data = '', do_recv = true)
1434
1479
 
1435
1480
  data = param + body
1436
1481
 
@@ -1460,13 +1505,15 @@ EVADE = Rex::Proto::SMB::Evasions
1460
1505
 
1461
1506
  pkt['Payload'].v['Payload'] = data
1462
1507
 
1463
- self.smb_send(pkt.to_s)
1508
+ ret = self.smb_send(pkt.to_s)
1509
+ return ret if not do_recv
1510
+
1464
1511
  ack = self.smb_recv_parse(CONST::SMB_COM_NT_TRANSACT)
1465
1512
  return ack
1466
1513
  end
1467
1514
 
1468
1515
  # Perform a nttransaction request using the specified subcommand, parameters, and data
1469
- def nttrans_secondary(param = '', body = '')
1516
+ def nttrans_secondary(param = '', body = '', do_recv = true)
1470
1517
 
1471
1518
  data = param + body
1472
1519
 
@@ -1491,7 +1538,9 @@ EVADE = Rex::Proto::SMB::Evasions
1491
1538
 
1492
1539
  pkt['Payload'].v['Payload'] = data
1493
1540
 
1494
- self.smb_send(pkt.to_s)
1541
+ ret = self.smb_send(pkt.to_s)
1542
+ return ret if not do_recv
1543
+
1495
1544
  ack = self.smb_recv_parse(CONST::SMB_COM_NT_TRANSACT_SECONDARY)
1496
1545
  return ack
1497
1546
  end
@@ -1708,6 +1757,7 @@ EVADE = Rex::Proto::SMB::Evasions
1708
1757
 
1709
1758
  # public read/write methods
1710
1759
  attr_accessor :native_os, :native_lm, :encrypt_passwords, :extended_security, :read_timeout, :evasion_opts
1760
+ attr_accessor :system_time, :system_zone
1711
1761
 
1712
1762
  # public read methods
1713
1763
  attr_reader :dialect, :session_id, :challenge_key, :peer_native_lm, :peer_native_os
@@ -1730,4 +1780,3 @@ end
1730
1780
  end
1731
1781
  end
1732
1782
  end
1733
-