librex 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (376) hide show
  1. data/README +0 -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 +0 -0
  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 +0 -0
  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 +0 -0
  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 +0 -0
  61. data/lib/rex/exploitation/cmdstager/vbs.rb +0 -0
  62. data/lib/rex/exploitation/egghunter.rb +0 -0
  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 +2 -2
  68. data/lib/rex/exploitation/obfuscatejs.rb +0 -0
  69. data/lib/rex/exploitation/opcodedb.rb +0 -0
  70. data/lib/rex/exploitation/opcodedb.rb.ut.rb +0 -0
  71. data/lib/rex/exploitation/seh.rb +0 -0
  72. data/lib/rex/exploitation/seh.rb.ut.rb +0 -0
  73. data/lib/rex/file.rb +0 -0
  74. data/lib/rex/file.rb.ut.rb +0 -0
  75. data/lib/rex/image_source.rb +0 -0
  76. data/lib/rex/image_source/disk.rb +0 -0
  77. data/lib/rex/image_source/image_source.rb +0 -0
  78. data/lib/rex/image_source/memory.rb +0 -0
  79. data/lib/rex/io/bidirectional_pipe.rb +0 -0
  80. data/lib/rex/io/datagram_abstraction.rb +0 -0
  81. data/lib/rex/io/stream.rb +13 -15
  82. data/lib/rex/io/stream_abstraction.rb +0 -0
  83. data/lib/rex/io/stream_server.rb +0 -0
  84. data/lib/rex/job_container.rb +10 -25
  85. data/lib/rex/logging.rb +0 -0
  86. data/lib/rex/logging/log_dispatcher.rb +0 -0
  87. data/lib/rex/logging/log_sink.rb +0 -0
  88. data/lib/rex/logging/sinks/flatfile.rb +0 -0
  89. data/lib/rex/logging/sinks/stderr.rb +0 -0
  90. data/lib/rex/machparsey.rb +0 -0
  91. data/lib/rex/machparsey/exceptions.rb +0 -0
  92. data/lib/rex/machparsey/mach.rb +1 -1
  93. data/lib/rex/machparsey/machbase.rb +0 -0
  94. data/lib/rex/machscan.rb +0 -0
  95. data/lib/rex/machscan/scanner.rb +0 -0
  96. data/lib/rex/mime.rb +0 -0
  97. data/lib/rex/mime/header.rb +0 -0
  98. data/lib/rex/mime/message.rb +0 -0
  99. data/lib/rex/mime/part.rb +0 -0
  100. data/lib/rex/nop/opty2.rb +0 -0
  101. data/lib/rex/nop/opty2.rb.ut.rb +0 -0
  102. data/lib/rex/nop/opty2_tables.rb +0 -0
  103. data/lib/rex/ole.rb +0 -0
  104. data/lib/rex/ole/clsid.rb +0 -0
  105. data/lib/rex/ole/difat.rb +0 -0
  106. data/lib/rex/ole/directory.rb +0 -0
  107. data/lib/rex/ole/direntry.rb +0 -0
  108. data/lib/rex/ole/fat.rb +0 -0
  109. data/lib/rex/ole/header.rb +0 -0
  110. data/lib/rex/ole/minifat.rb +0 -0
  111. data/lib/rex/ole/storage.rb +0 -0
  112. data/lib/rex/ole/stream.rb +0 -0
  113. data/lib/rex/ole/substorage.rb +0 -0
  114. data/lib/rex/ole/util.rb +0 -0
  115. data/lib/rex/parser/arguments.rb +0 -0
  116. data/lib/rex/parser/arguments.rb.ut.rb +0 -0
  117. data/lib/rex/parser/ini.rb +0 -0
  118. data/lib/rex/parser/ini.rb.ut.rb +0 -0
  119. data/lib/rex/parser/nexpose_xml.rb +0 -0
  120. data/lib/rex/parser/nmap_xml.rb +0 -0
  121. data/lib/rex/payloads.rb +0 -0
  122. data/lib/rex/payloads/win32.rb +0 -0
  123. data/lib/rex/payloads/win32/common.rb +0 -0
  124. data/lib/rex/payloads/win32/kernel.rb +0 -0
  125. data/lib/rex/payloads/win32/kernel/common.rb +0 -0
  126. data/lib/rex/payloads/win32/kernel/migration.rb +0 -0
  127. data/lib/rex/payloads/win32/kernel/recovery.rb +0 -0
  128. data/lib/rex/payloads/win32/kernel/stager.rb +26 -3
  129. data/lib/rex/peparsey.rb +0 -0
  130. data/lib/rex/peparsey/exceptions.rb +0 -0
  131. data/lib/rex/peparsey/pe.rb +0 -0
  132. data/lib/rex/peparsey/pe_memdump.rb +0 -0
  133. data/lib/rex/peparsey/pebase.rb +0 -0
  134. data/lib/rex/peparsey/section.rb +0 -0
  135. data/lib/rex/pescan.rb +0 -0
  136. data/lib/rex/pescan/analyze.rb +0 -0
  137. data/lib/rex/pescan/scanner.rb +0 -0
  138. data/lib/rex/pescan/search.rb +0 -0
  139. data/lib/rex/platforms.rb +0 -0
  140. data/lib/rex/platforms/windows.rb +0 -0
  141. data/lib/rex/poly.rb +0 -0
  142. data/lib/rex/poly/block.rb +0 -0
  143. data/lib/rex/poly/register.rb +0 -0
  144. data/lib/rex/poly/register/x86.rb +0 -0
  145. data/lib/rex/post.rb +0 -0
  146. data/lib/rex/post/dir.rb +0 -0
  147. data/lib/rex/post/file.rb +0 -0
  148. data/lib/rex/post/file_stat.rb +0 -0
  149. data/lib/rex/post/gen.pl +0 -0
  150. data/lib/rex/post/io.rb +0 -0
  151. data/lib/rex/post/meterpreter.rb +0 -0
  152. data/lib/rex/post/meterpreter/channel.rb +0 -0
  153. data/lib/rex/post/meterpreter/channel_container.rb +0 -0
  154. data/lib/rex/post/meterpreter/channels/pool.rb +0 -0
  155. data/lib/rex/post/meterpreter/channels/pools/file.rb +0 -0
  156. data/lib/rex/post/meterpreter/channels/pools/stream_pool.rb +0 -0
  157. data/lib/rex/post/meterpreter/channels/stream.rb +0 -0
  158. data/lib/rex/post/meterpreter/client.rb +0 -0
  159. data/lib/rex/post/meterpreter/client_core.rb +0 -0
  160. data/lib/rex/post/meterpreter/dependencies.rb +0 -0
  161. data/lib/rex/post/meterpreter/extension.rb +0 -0
  162. data/lib/rex/post/meterpreter/extensions/espia/espia.rb +0 -0
  163. data/lib/rex/post/meterpreter/extensions/espia/tlv.rb +0 -0
  164. data/lib/rex/post/meterpreter/extensions/incognito/incognito.rb +0 -0
  165. data/lib/rex/post/meterpreter/extensions/incognito/tlv.rb +0 -0
  166. data/lib/rex/post/meterpreter/extensions/priv/fs.rb +0 -0
  167. data/lib/rex/post/meterpreter/extensions/priv/passwd.rb +0 -0
  168. data/lib/rex/post/meterpreter/extensions/priv/priv.rb +0 -0
  169. data/lib/rex/post/meterpreter/extensions/priv/tlv.rb +0 -0
  170. data/lib/rex/post/meterpreter/extensions/railgun/api.rb +9303 -0
  171. data/lib/rex/post/meterpreter/extensions/railgun/api_constants.rb +38105 -0
  172. data/lib/rex/post/meterpreter/extensions/railgun/def_kernel32.rb +3678 -0
  173. data/lib/rex/post/meterpreter/extensions/railgun/railgun.rb +815 -0
  174. data/lib/rex/post/meterpreter/extensions/railgun/tlv.rb +54 -0
  175. data/lib/rex/post/meterpreter/extensions/sniffer/sniffer.rb +0 -0
  176. data/lib/rex/post/meterpreter/extensions/sniffer/tlv.rb +0 -0
  177. data/lib/rex/post/meterpreter/extensions/stdapi/constants.rb +0 -0
  178. data/lib/rex/post/meterpreter/extensions/stdapi/fs/dir.rb +0 -0
  179. data/lib/rex/post/meterpreter/extensions/stdapi/fs/file.rb +0 -0
  180. data/lib/rex/post/meterpreter/extensions/stdapi/fs/file_stat.rb +0 -0
  181. data/lib/rex/post/meterpreter/extensions/stdapi/fs/io.rb +0 -0
  182. data/lib/rex/post/meterpreter/extensions/stdapi/net/config.rb +0 -0
  183. data/lib/rex/post/meterpreter/extensions/stdapi/net/interface.rb +0 -0
  184. data/lib/rex/post/meterpreter/extensions/stdapi/net/route.rb +0 -0
  185. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket.rb +7 -7
  186. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/tcp_client_channel.rb +21 -8
  187. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/tcp_server_channel.rb +0 -0
  188. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/udp_channel.rb +33 -17
  189. data/lib/rex/post/meterpreter/extensions/stdapi/stdapi.rb +0 -0
  190. data/lib/rex/post/meterpreter/extensions/stdapi/sys/config.rb +0 -0
  191. data/lib/rex/post/meterpreter/extensions/stdapi/sys/event_log.rb +0 -0
  192. data/lib/rex/post/meterpreter/extensions/stdapi/sys/event_log_subsystem/event_record.rb +0 -0
  193. data/lib/rex/post/meterpreter/extensions/stdapi/sys/power.rb +0 -0
  194. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process.rb +0 -0
  195. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/image.rb +0 -0
  196. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/io.rb +0 -0
  197. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/memory.rb +0 -0
  198. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/thread.rb +0 -0
  199. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry.rb +0 -0
  200. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_key.rb +0 -0
  201. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_value.rb +0 -0
  202. data/lib/rex/post/meterpreter/extensions/stdapi/sys/thread.rb +0 -0
  203. data/lib/rex/post/meterpreter/extensions/stdapi/tlv.rb +0 -0
  204. data/lib/rex/post/meterpreter/extensions/stdapi/ui.rb +0 -0
  205. data/lib/rex/post/meterpreter/inbound_packet_handler.rb +0 -0
  206. data/lib/rex/post/meterpreter/object_aliases.rb +0 -0
  207. data/lib/rex/post/meterpreter/packet.rb +0 -0
  208. data/lib/rex/post/meterpreter/packet_dispatcher.rb +0 -0
  209. data/lib/rex/post/meterpreter/packet_parser.rb +0 -0
  210. data/lib/rex/post/meterpreter/packet_response_waiter.rb +0 -0
  211. data/lib/rex/post/meterpreter/ui/console.rb +0 -0
  212. data/lib/rex/post/meterpreter/ui/console/command_dispatcher.rb +0 -0
  213. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/core.rb +0 -0
  214. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/espia.rb +0 -0
  215. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/incognito.rb +0 -0
  216. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv.rb +0 -0
  217. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/elevate.rb +0 -0
  218. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/passwd.rb +0 -0
  219. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/timestomp.rb +0 -0
  220. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/railgun.rb +57 -0
  221. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/sniffer.rb +0 -0
  222. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi.rb +0 -0
  223. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/fs.rb +0 -0
  224. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/net.rb +0 -0
  225. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/sys.rb +0 -0
  226. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/ui.rb +0 -0
  227. data/lib/rex/post/meterpreter/ui/console/interactive_channel.rb +0 -0
  228. data/lib/rex/post/permission.rb +0 -0
  229. data/lib/rex/post/process.rb +0 -0
  230. data/lib/rex/post/thread.rb +0 -0
  231. data/lib/rex/post/ui.rb +0 -0
  232. data/lib/rex/proto.rb +0 -0
  233. data/lib/rex/proto.rb.ts.rb +0 -0
  234. data/lib/rex/proto/dcerpc.rb +0 -0
  235. data/lib/rex/proto/dcerpc.rb.ts.rb +0 -0
  236. data/lib/rex/proto/dcerpc/client.rb +45 -44
  237. data/lib/rex/proto/dcerpc/exceptions.rb +0 -0
  238. data/lib/rex/proto/dcerpc/handle.rb +0 -0
  239. data/lib/rex/proto/dcerpc/handle.rb.ut.rb +0 -0
  240. data/lib/rex/proto/dcerpc/ndr.rb +0 -0
  241. data/lib/rex/proto/dcerpc/ndr.rb.ut.rb +0 -0
  242. data/lib/rex/proto/dcerpc/packet.rb +0 -0
  243. data/lib/rex/proto/dcerpc/packet.rb.ut.rb +0 -0
  244. data/lib/rex/proto/dcerpc/response.rb +32 -31
  245. data/lib/rex/proto/dcerpc/response.rb.ut.rb +0 -0
  246. data/lib/rex/proto/dcerpc/uuid.rb +0 -0
  247. data/lib/rex/proto/dcerpc/uuid.rb.ut.rb +0 -0
  248. data/lib/rex/proto/drda.rb +0 -0
  249. data/lib/rex/proto/drda.rb.ts.rb +0 -0
  250. data/lib/rex/proto/drda/constants.rb +0 -0
  251. data/lib/rex/proto/drda/constants.rb.ut.rb +0 -0
  252. data/lib/rex/proto/drda/packet.rb +0 -0
  253. data/lib/rex/proto/drda/packet.rb.ut.rb +0 -0
  254. data/lib/rex/proto/drda/utils.rb +0 -0
  255. data/lib/rex/proto/drda/utils.rb.ut.rb +0 -0
  256. data/lib/rex/proto/http.rb +0 -0
  257. data/lib/rex/proto/http.rb.ts.rb +0 -0
  258. data/lib/rex/proto/http/client.rb +1 -1
  259. data/lib/rex/proto/http/client.rb.ut.rb +0 -0
  260. data/lib/rex/proto/http/handler.rb +0 -0
  261. data/lib/rex/proto/http/handler/erb.rb +0 -0
  262. data/lib/rex/proto/http/handler/erb.rb.ut.rb +0 -0
  263. data/lib/rex/proto/http/handler/erb.rb.ut.rb.rhtml +0 -0
  264. data/lib/rex/proto/http/handler/proc.rb +0 -0
  265. data/lib/rex/proto/http/handler/proc.rb.ut.rb +0 -0
  266. data/lib/rex/proto/http/header.rb +0 -0
  267. data/lib/rex/proto/http/header.rb.ut.rb +0 -0
  268. data/lib/rex/proto/http/packet.rb +0 -0
  269. data/lib/rex/proto/http/packet.rb.ut.rb +0 -0
  270. data/lib/rex/proto/http/request.rb +0 -0
  271. data/lib/rex/proto/http/request.rb.ut.rb +0 -0
  272. data/lib/rex/proto/http/response.rb +0 -0
  273. data/lib/rex/proto/http/response.rb.ut.rb +0 -0
  274. data/lib/rex/proto/http/server.rb +0 -0
  275. data/lib/rex/proto/http/server.rb.ut.rb +0 -0
  276. data/lib/rex/proto/smb.rb +0 -0
  277. data/lib/rex/proto/smb.rb.ts.rb +0 -0
  278. data/lib/rex/proto/smb/client.rb +1 -1
  279. data/lib/rex/proto/smb/client.rb.ut.rb +0 -0
  280. data/lib/rex/proto/smb/constants.rb +0 -0
  281. data/lib/rex/proto/smb/constants.rb.ut.rb +0 -0
  282. data/lib/rex/proto/smb/crypt.rb +0 -0
  283. data/lib/rex/proto/smb/crypt.rb.ut.rb +0 -0
  284. data/lib/rex/proto/smb/evasions.rb +18 -17
  285. data/lib/rex/proto/smb/exceptions.rb +0 -0
  286. data/lib/rex/proto/smb/simpleclient.rb +0 -0
  287. data/lib/rex/proto/smb/simpleclient.rb.ut.rb +0 -0
  288. data/lib/rex/proto/smb/utils.rb +0 -0
  289. data/lib/rex/proto/smb/utils.rb.ut.rb +0 -0
  290. data/lib/rex/proto/sunrpc.rb +0 -0
  291. data/lib/rex/proto/sunrpc/client.rb +0 -0
  292. data/lib/rex/proto/tftp.rb +0 -0
  293. data/lib/rex/proto/tftp/constants.rb +0 -0
  294. data/lib/rex/proto/tftp/server.rb +212 -37
  295. data/lib/rex/script.rb +0 -0
  296. data/lib/rex/script/base.rb +0 -0
  297. data/lib/rex/script/meterpreter.rb +0 -0
  298. data/lib/rex/script/shell.rb +0 -0
  299. data/lib/rex/service.rb +0 -0
  300. data/lib/rex/service_manager.rb +0 -0
  301. data/lib/rex/service_manager.rb.ut.rb +0 -0
  302. data/lib/rex/services/local_relay.rb +0 -0
  303. data/lib/rex/socket.rb +25 -0
  304. data/lib/rex/socket.rb.ut.rb +0 -0
  305. data/lib/rex/socket/comm.rb +0 -0
  306. data/lib/rex/socket/comm/local.rb +0 -0
  307. data/lib/rex/socket/comm/local.rb.ut.rb +0 -0
  308. data/lib/rex/socket/ip.rb +0 -0
  309. data/lib/rex/socket/parameters.rb +0 -0
  310. data/lib/rex/socket/parameters.rb.ut.rb +0 -0
  311. data/lib/rex/socket/range_walker.rb +0 -0
  312. data/lib/rex/socket/range_walker.rb.ut.rb +0 -0
  313. data/lib/rex/socket/ssl_tcp.rb +0 -0
  314. data/lib/rex/socket/ssl_tcp.rb.ut.rb +0 -0
  315. data/lib/rex/socket/ssl_tcp_server.rb +0 -0
  316. data/lib/rex/socket/ssl_tcp_server.rb.ut.rb +0 -0
  317. data/lib/rex/socket/subnet_walker.rb +0 -0
  318. data/lib/rex/socket/subnet_walker.rb.ut.rb +0 -0
  319. data/lib/rex/socket/switch_board.rb +11 -5
  320. data/lib/rex/socket/switch_board.rb.ut.rb +0 -0
  321. data/lib/rex/socket/tcp.rb +0 -0
  322. data/lib/rex/socket/tcp.rb.ut.rb +0 -0
  323. data/lib/rex/socket/tcp_server.rb +0 -0
  324. data/lib/rex/socket/tcp_server.rb.ut.rb +0 -0
  325. data/lib/rex/socket/udp.rb +0 -0
  326. data/lib/rex/socket/udp.rb.ut.rb +0 -0
  327. data/lib/rex/struct2.rb +0 -0
  328. data/lib/rex/struct2/c_struct.rb +0 -0
  329. data/lib/rex/struct2/c_struct_template.rb +0 -0
  330. data/lib/rex/struct2/constant.rb +0 -0
  331. data/lib/rex/struct2/element.rb +0 -0
  332. data/lib/rex/struct2/generic.rb +0 -0
  333. data/lib/rex/struct2/restraint.rb +0 -0
  334. data/lib/rex/struct2/s_string.rb +0 -0
  335. data/lib/rex/struct2/s_struct.rb +0 -0
  336. data/lib/rex/sync.rb +0 -0
  337. data/lib/rex/sync/event.rb +0 -0
  338. data/lib/rex/sync/read_write_lock.rb +0 -0
  339. data/lib/rex/sync/ref.rb +0 -0
  340. data/lib/rex/sync/thread_safe.rb +0 -0
  341. data/lib/rex/test.rb +0 -0
  342. data/lib/rex/text.rb +15 -4
  343. data/lib/rex/text.rb.ut.rb +3 -0
  344. data/lib/rex/time.rb +0 -0
  345. data/lib/rex/transformer.rb +0 -0
  346. data/lib/rex/transformer.rb.ut.rb +0 -0
  347. data/lib/rex/ui.rb +0 -0
  348. data/lib/rex/ui/interactive.rb +0 -0
  349. data/lib/rex/ui/output.rb +0 -0
  350. data/lib/rex/ui/output/none.rb +0 -0
  351. data/lib/rex/ui/progress_tracker.rb +0 -0
  352. data/lib/rex/ui/subscriber.rb +0 -0
  353. data/lib/rex/ui/text/color.rb +0 -0
  354. data/lib/rex/ui/text/color.rb.ut.rb +0 -0
  355. data/lib/rex/ui/text/dispatcher_shell.rb +0 -0
  356. data/lib/rex/ui/text/input.rb +0 -0
  357. data/lib/rex/ui/text/input/buffer.rb +0 -0
  358. data/lib/rex/ui/text/input/readline.rb +0 -0
  359. data/lib/rex/ui/text/input/socket.rb +0 -0
  360. data/lib/rex/ui/text/input/stdio.rb +0 -0
  361. data/lib/rex/ui/text/irb_shell.rb +0 -0
  362. data/lib/rex/ui/text/output.rb +0 -0
  363. data/lib/rex/ui/text/output/buffer.rb +0 -0
  364. data/lib/rex/ui/text/output/file.rb +0 -0
  365. data/lib/rex/ui/text/output/socket.rb +0 -0
  366. data/lib/rex/ui/text/output/stdio.rb +0 -0
  367. data/lib/rex/ui/text/progress_tracker.rb +0 -0
  368. data/lib/rex/ui/text/progress_tracker.rb.ut.rb +0 -0
  369. data/lib/rex/ui/text/shell.rb +0 -0
  370. data/lib/rex/ui/text/table.rb +0 -0
  371. data/lib/rex/ui/text/table.rb.ut.rb +0 -0
  372. data/lib/rex/zip.rb +0 -0
  373. data/lib/rex/zip/archive.rb +0 -0
  374. data/lib/rex/zip/blocks.rb +0 -0
  375. data/lib/rex/zip/entry.rb +0 -0
  376. metadata +414 -347
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -366,7 +366,7 @@ class Client
366
366
  tries = 0
367
367
  begin
368
368
  # XXX This doesn't deal with chunked encoding or "Content-type: text/html; charset=..."
369
- while tries < 20 and resp.headers["Content-Type"]== "text/html" and rblob !~ /<\/html>/i
369
+ while tries < 1000 and resp.headers["Content-Type"]== "text/html" and rblob !~ /<\/html>/i
370
370
  buff = conn.get_once(-1, 0.05)
371
371
  break if not buff
372
372
  rblob += buff
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -43,8 +43,8 @@ EVADE = Rex::Proto::SMB::Evasions
43
43
 
44
44
  # Read a SMB packet from the socket
45
45
  def smb_recv
46
- data = socket.get_once(-1, self.read_timeout)
47
46
 
47
+ data = socket.timed_read(4, self.read_timeout)
48
48
  if (data.nil? or data.length < 4)
49
49
  raise XCEPT::NoReply
50
50
  end
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -11,55 +11,56 @@ EVASION_HIGH = 2
11
11
  EVASION_MAX = 3
12
12
 
13
13
  # Add bogus filler at the end of the SMB packet and before the data
14
- def self.make_offset_filler(level, max_size = 60000, min_size = 512)
14
+ def self.make_offset_filler(level, max_size = 60000, min_size = 512)
15
15
 
16
16
  if (max_size < 0)
17
17
  max_size = 4096
18
18
  end
19
-
19
+
20
20
  if (min_size < max_size)
21
21
  min_size = max_size - 1
22
22
  end
23
-
24
- case level
25
- when nil, EVASION_NONE
26
- return ''
23
+
24
+ case level.to_i
27
25
  when EVASION_LOW
28
26
  Rex::Text.rand_text(32)
29
27
  when EVASION_HIGH
30
28
  Rex::Text.rand_text( rand(max_size - min_size) + min_size )
31
29
  when EVASION_MAX
32
30
  Rex::Text.rand_text( rand(max_size) )
31
+ else EVASION_NONE
32
+ return ''
33
33
  end
34
34
  end
35
-
35
+
36
36
  # Obscures a named pipe pathname via leading and trailing slashes
37
37
  def self.make_named_pipe_path(level, pipe)
38
- case level
39
- when nil, EVASION_NONE
40
- return '\\' + pipe
38
+ case level.to_i
41
39
  when EVASION_LOW
42
40
  return ('\\' * (1024 + rand(512))) + pipe
43
41
  when EVASION_HIGH, EVASION_MAX
44
42
  return ('\\' * (1024 + rand(512))) + pipe + ('\\' * (1024 + rand(512)))
45
- end
43
+ else
44
+ return '\\' + pipe
45
+ end
46
46
  end
47
-
47
+
48
48
  # Obscures the TransactNamedPipe \PIPE\ string
49
49
  def self.make_trans_named_pipe_name(level)
50
- case level
51
- when nil, EVASION_NONE
52
- return '\\PIPE\\'
50
+ case level.to_i
53
51
  when EVASION_LOW
54
52
  return ('\\' * (256 - rand(64)) + 'PIPE\\')
55
53
  when EVASION_HIGH
56
54
  return Rex::Text.rand_text(512 - rand(128))
57
55
  when EVASION_MAX
58
56
  return Rex::Text.rand_text(1024 - rand(256))
57
+ else
58
+ return '\\PIPE\\'
59
59
  end
60
- end
60
+ end
61
61
 
62
62
  end
63
63
  end
64
64
  end
65
- end
65
+ end
66
+
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -1,4 +1,4 @@
1
- # $Id: server.rb 9375 2010-05-26 22:39:56Z jduck $
1
+ # $Id: server.rb 9742 2010-07-08 23:34:29Z jduck $
2
2
  require 'rex/socket'
3
3
  require 'rex/proto/tftp'
4
4
 
@@ -30,8 +30,11 @@ class Server
30
30
  self.context = context
31
31
  self.sock = nil
32
32
  @shutting_down = false
33
+ @output_dir = nil
34
+ @tftproot = nil
33
35
 
34
36
  self.files = []
37
+ self.uploaded = []
35
38
  self.transfers = []
36
39
  end
37
40
 
@@ -75,14 +78,31 @@ class Server
75
78
  #
76
79
  # Register a filename and content for a client to request
77
80
  #
78
- def register_file(fn, content)
81
+ def register_file(fn, content, once = false)
79
82
  self.files << {
80
83
  :name => fn,
81
- :data => content
84
+ :data => content,
85
+ :once => once
82
86
  }
83
87
  end
84
88
 
85
89
 
90
+ #
91
+ # Register an entire directory to serve files from
92
+ #
93
+ def set_tftproot(rootdir)
94
+ @tftproot = rootdir if File.directory?(rootdir)
95
+ end
96
+
97
+
98
+ #
99
+ # Register a directory to write uploaded files to
100
+ #
101
+ def set_output_dir(outdir)
102
+ @output_dir = outdir if File.directory?(outdir)
103
+ end
104
+
105
+
86
106
  #
87
107
  # Send an error packet w/the specified code and string
88
108
  #
@@ -110,22 +130,94 @@ class Server
110
130
  # Find the hash entry for a file that may be offered
111
131
  #
112
132
  def find_file(fname)
133
+ # Files served via register_file() take precedence.
113
134
  self.files.each do |f|
114
135
  if (fname == f[:name])
115
136
  return f
116
137
  end
117
138
  end
139
+
140
+ # Now, if we have a tftproot, see if it can serve from it
141
+ if @tftproot
142
+ return find_file_in_root(fname)
143
+ end
144
+
118
145
  nil
119
146
  end
120
147
 
121
148
 
149
+ #
150
+ # Find the file in the specified tftp root and add a temporary
151
+ # entry to the files hash.
152
+ #
153
+ def find_file_in_root(fname)
154
+ fn = File.expand_path(File.join(@tftproot, fname))
155
+
156
+ # Don't allow directory traversal
157
+ return nil if fn.index(@tftproot) != 0
158
+
159
+ return nil if not File.file?(fn) or not File.readable?(fn)
160
+
161
+ # Read the file contents, and register it as being served once
162
+ data = data = File.open(fn, "rb") { |fd| fd.read(fd.stat.size) }
163
+ register_file(fname, data, true)
164
+
165
+ # Return the last file in the array
166
+ return self.files[-1]
167
+ end
168
+
169
+
122
170
  attr_accessor :listen_host, :listen_port, :context
123
- attr_accessor :sock, :files, :transfers
171
+ attr_accessor :sock, :files, :transfers, :uploaded
124
172
  attr_accessor :thread
125
173
 
126
174
 
127
175
  protected
128
176
 
177
+ def find_transfer(type, from, block)
178
+ self.transfers.each do |tr|
179
+ if (tr[:type] == type and tr[:from] == from and tr[:block] == block)
180
+ return tr
181
+ end
182
+ end
183
+ nil
184
+ end
185
+
186
+
187
+ def save_output(tr)
188
+ self.uploaded << tr[:file]
189
+ if @output_dir
190
+ fn = tr[:file][:name].split(File::SEPARATOR)[-1]
191
+ if fn
192
+ fn = File.join(@output_dir, fn)
193
+ File.open(fn, "wb") { |fd|
194
+ fd.write(tr[:file][:data])
195
+ }
196
+ end
197
+ end
198
+ end
199
+
200
+
201
+ def check_retransmission(tr)
202
+ elapsed = Time.now - tr[:last_sent]
203
+ if (elapsed >= 3)
204
+ # max retries reached?
205
+ if (tr[:retries] < 3)
206
+ #if (tr[:type] == OpRead)
207
+ # puts "[-] ack timed out, resending block"
208
+ #else
209
+ # puts "[-] block timed out, resending ack"
210
+ #end
211
+ tr[:last_sent] = nil
212
+ tr[:retries] += 1
213
+ else
214
+ #puts "[-] maximum tries reached, terminating transfer"
215
+ self.transfers.delete(tr)
216
+ end
217
+ end
218
+ end
219
+
220
+
129
221
  #
130
222
  # See if there is anything to do.. If so, dispatch it.
131
223
  #
@@ -154,31 +246,48 @@ protected
154
246
  # Check to see if transfers need maintenance
155
247
  #
156
248
  self.transfers.each do |tr|
157
- # Are we awaiting an ack?
158
- if (tr[:last_sent])
159
- elapsed = Time.now - tr[:last_sent]
160
- if (elapsed >= 3)
161
- # max retries reached?
162
- if (tr[:retries] < 3)
163
- #puts "[-] ack timed out, resending block"
164
- tr[:last_sent] = nil
165
- tr[:retries] += 1
249
+ # We handle RRQ and WRQ separately
250
+ #
251
+ if (tr[:type] == OpRead)
252
+ # Are we awaiting an ack?
253
+ if (tr[:last_sent])
254
+ check_retransmission(tr)
255
+ elsif (w != nil and w[0] == self.sock)
256
+ # No ack waiting, send next block..
257
+ chunk = tr[:file][:data].slice(tr[:offset], 512)
258
+ if (chunk and chunk.length >= 0)
259
+ pkt = [OpData, tr[:block]].pack('nn')
260
+ pkt << chunk
261
+
262
+ send_packet(tr[:from], pkt)
263
+ tr[:last_sent] = Time.now
264
+
265
+ # If the file is a one-serve, mark it as started
266
+ tr[:file][:started] = true if (tr[:file][:once])
166
267
  else
167
- #puts "[-] maximum tries reached, terminating transfer"
168
- self.transfers.delete(tr)
268
+ # No more chunks.. transfer is most likely done.
269
+ # However, we can only delete it once the last chunk has been
270
+ # acked.
169
271
  end
170
272
  end
171
- elsif (w != nil and w[0] == self.sock)
172
- # No ack waiting, send next block..
173
- chunk = tr[:file][:data].slice(tr[:offset], 512)
174
- if (chunk and chunk.length >= 0)
175
- pkt = [OpData, tr[:block]].pack('nn')
176
- pkt << chunk
273
+ else
274
+ # Are we awaiting data?
275
+ if (tr[:last_sent])
276
+ check_retransmission(tr)
277
+ elsif (w != nil and w[0] == self.sock)
278
+ # Not waiting for data, send an ack..
279
+ #puts "[*] sending ack for block %d" % [tr[:block]]
280
+ pkt = [OpAck, tr[:block]].pack('nn')
281
+
177
282
  send_packet(tr[:from], pkt)
178
283
  tr[:last_sent] = Time.now
179
- else
180
- # no more chunks.. transfer is most likely done.
181
- self.transfers.delete(tr)
284
+
285
+ # If we had a 0-511 byte chunk, we're done.
286
+ if (tr[:last_size] and tr[:last_size] < 512)
287
+ #puts "[*] Transfer complete, saving output"
288
+ save_output(tr)
289
+ self.transfers.delete(tr)
290
+ end
182
291
  end
183
292
  end
184
293
  end
@@ -186,6 +295,13 @@ protected
186
295
  end
187
296
 
188
297
 
298
+ def next_block(tr)
299
+ tr[:block] += 1
300
+ tr[:last_sent] = nil
301
+ tr[:retries] = 0
302
+ end
303
+
304
+
189
305
  #
190
306
  # Dispatch a packet that we received
191
307
  #
@@ -194,6 +310,7 @@ protected
194
310
  op = buf.unpack('n')[0]
195
311
  buf.slice!(0,2)
196
312
 
313
+ #XXX: todo - create call backs for status
197
314
  #start = "[*] TFTP - %s:%u - %s" % [from[0], from[1], OPCODES[op]]
198
315
 
199
316
  case op
@@ -205,34 +322,93 @@ protected
205
322
  #puts "%s %s %s" % [start, fn, mode]
206
323
 
207
324
  if (not @shutting_down) and (file = self.find_file(fn))
325
+ if (file[:once] and file[:started])
326
+ send_error(from, ErrFileNotFound)
327
+ else
328
+ self.transfers << {
329
+ :type => OpRead,
330
+ :from => from,
331
+ :file => file,
332
+ :block => 1,
333
+ :offset => 0,
334
+ :last_sent => nil,
335
+ :retries => 0
336
+ }
337
+ end
338
+ else
339
+ #puts "[-] file not found!"
340
+ send_error(from, ErrFileNotFound)
341
+ end
342
+
343
+ when OpWrite
344
+ # Process WRQ packets
345
+ fn = TFTP::get_string(buf)
346
+ mode = TFTP::get_string(buf).downcase
347
+
348
+ #puts "%s %s %s" % [start, fn, mode]
349
+
350
+ if (not @shutting_down) and (@output_dir)
208
351
  self.transfers << {
352
+ :type => OpWrite,
209
353
  :from => from,
210
- :file => file,
211
- :block => 1,
212
- :offset => 0,
354
+ :file => { :name => fn, :data => '' },
355
+ :block => 0, # WRQ starts at 0
213
356
  :last_sent => nil,
214
357
  :retries => 0
215
358
  }
216
359
  else
217
- #puts "[-] file not found!"
218
- send_error(from, ErrFileNotFound)
360
+ send_error(from, ErrIllegalOperation)
219
361
  end
220
362
 
221
363
  when OpAck
222
364
  # Process ACK packets
223
365
  block = buf.unpack('n')[0]
366
+
224
367
  #puts "%s %d" % [start, block]
225
368
 
226
- self.transfers.each do |tr|
227
- if (from == tr[:from] and block == tr[:block])
228
- # acked! send the next block
229
- tr[:block] += 1
230
- tr[:offset] += 512
231
- tr[:last_sent] = nil
232
- tr[:retries] = 0
369
+ tr = find_transfer(OpRead, from, block)
370
+ if not tr
371
+ # If we didn't find it, send an error.
372
+ send_error(from, ErrUnknownTransferId)
373
+ else
374
+ # acked! send the next block
375
+ tr[:offset] += 512
376
+ next_block(tr)
377
+
378
+ # If the transfer is finished, delete it
379
+ if (tr[:offset] > tr[:file][:data].length)
380
+ #puts "[*] Transfer complete"
381
+ self.transfers.delete(tr)
382
+
383
+ # if the file is a one-serve, delete it from the files array
384
+ if tr[:file][:once]
385
+ #puts "[*] Removed one-serve file: #{tr[:file][:name]}"
386
+ self.files.delete(tr[:file])
387
+ end
233
388
  end
234
389
  end
235
390
 
391
+ when OpData
392
+ # Process Data packets
393
+ block = buf.unpack('n')[0]
394
+ data = buf.slice(2, buf.length)
395
+
396
+ #puts "%s %d %d bytes" % [start, block, data.length]
397
+
398
+ tr = find_transfer(OpWrite, from, (block-1))
399
+ if not tr
400
+ # If we didn't find it, send an error.
401
+ send_error(from, ErrUnknownTransferId)
402
+ else
403
+ tr[:file][:data] << data
404
+ tr[:last_size] = data.length
405
+ next_block(tr)
406
+
407
+ # Similar to RRQ transfers, we cannot detect that the
408
+ # transfer finished here. We must do so after transmitting
409
+ # the final ACK.
410
+ end
411
+
236
412
  else
237
413
  # Other packets are unsupported
238
414
  #puts start
@@ -246,4 +422,3 @@ end
246
422
  end
247
423
  end
248
424
  end
249
-