librex 0.0.20 → 0.0.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (435) hide show
  1. data/Rakefile +1 -0
  2. data/lib/rex/LICENSE +29 -0
  3. data/lib/rex/arch.rb +103 -0
  4. data/lib/rex/arch/sparc.rb +75 -0
  5. data/lib/rex/arch/sparc.rb.ut.rb +18 -0
  6. data/lib/rex/arch/x86.rb +513 -0
  7. data/lib/rex/arch/x86.rb.ut.rb +93 -0
  8. data/lib/rex/assembly/nasm.rb +104 -0
  9. data/lib/rex/assembly/nasm.rb.ut.rb +22 -0
  10. data/lib/rex/codepage.map +104 -0
  11. data/lib/rex/compat.rb +311 -0
  12. data/lib/rex/constants.rb +113 -0
  13. data/lib/rex/elfparsey.rb +11 -0
  14. data/lib/rex/elfparsey/elf.rb +123 -0
  15. data/lib/rex/elfparsey/elfbase.rb +258 -0
  16. data/lib/rex/elfparsey/exceptions.rb +27 -0
  17. data/lib/rex/elfscan.rb +12 -0
  18. data/lib/rex/elfscan/scanner.rb +207 -0
  19. data/lib/rex/elfscan/search.rb +46 -0
  20. data/lib/rex/encoder/alpha2.rb +31 -0
  21. data/lib/rex/encoder/alpha2/alpha_mixed.rb +68 -0
  22. data/lib/rex/encoder/alpha2/alpha_upper.rb +79 -0
  23. data/lib/rex/encoder/alpha2/generic.rb +114 -0
  24. data/lib/rex/encoder/alpha2/unicode_mixed.rb +117 -0
  25. data/lib/rex/encoder/alpha2/unicode_upper.rb +129 -0
  26. data/lib/rex/encoder/ndr.rb +89 -0
  27. data/lib/rex/encoder/ndr.rb.ut.rb +44 -0
  28. data/lib/rex/encoder/nonalpha.rb +61 -0
  29. data/lib/rex/encoder/nonupper.rb +64 -0
  30. data/lib/rex/encoder/xdr.rb +106 -0
  31. data/lib/rex/encoder/xdr.rb.ut.rb +29 -0
  32. data/lib/rex/encoder/xor.rb +69 -0
  33. data/lib/rex/encoder/xor/dword.rb +13 -0
  34. data/lib/rex/encoder/xor/dword_additive.rb +13 -0
  35. data/lib/rex/encoders/xor_dword.rb +35 -0
  36. data/lib/rex/encoders/xor_dword_additive.rb +53 -0
  37. data/lib/rex/encoders/xor_dword_additive.rb.ut.rb +12 -0
  38. data/lib/rex/encoding/xor.rb +20 -0
  39. data/lib/rex/encoding/xor.rb.ts.rb +14 -0
  40. data/lib/rex/encoding/xor/byte.rb +15 -0
  41. data/lib/rex/encoding/xor/byte.rb.ut.rb +21 -0
  42. data/lib/rex/encoding/xor/dword.rb +21 -0
  43. data/lib/rex/encoding/xor/dword.rb.ut.rb +15 -0
  44. data/lib/rex/encoding/xor/dword_additive.rb +92 -0
  45. data/lib/rex/encoding/xor/dword_additive.rb.ut.rb +15 -0
  46. data/lib/rex/encoding/xor/exceptions.rb +17 -0
  47. data/lib/rex/encoding/xor/generic.rb +146 -0
  48. data/lib/rex/encoding/xor/generic.rb.ut.rb +120 -0
  49. data/lib/rex/encoding/xor/qword.rb +15 -0
  50. data/lib/rex/encoding/xor/word.rb +21 -0
  51. data/lib/rex/encoding/xor/word.rb.ut.rb +13 -0
  52. data/lib/rex/exceptions.rb +275 -0
  53. data/lib/rex/exceptions.rb.ut.rb +44 -0
  54. data/lib/rex/exploitation/cmdstager.rb +9 -0
  55. data/lib/rex/exploitation/cmdstager/base.rb +175 -0
  56. data/lib/rex/exploitation/cmdstager/debug_asm.rb +142 -0
  57. data/lib/rex/exploitation/cmdstager/debug_write.rb +136 -0
  58. data/lib/rex/exploitation/cmdstager/tftp.rb +63 -0
  59. data/lib/rex/exploitation/cmdstager/vbs.rb +128 -0
  60. data/lib/rex/exploitation/egghunter.rb +277 -0
  61. data/lib/rex/exploitation/egghunter.rb.ut.rb +25 -0
  62. data/lib/rex/exploitation/encryptjs.rb +77 -0
  63. data/lib/rex/exploitation/heaplib.js.b64 +331 -0
  64. data/lib/rex/exploitation/heaplib.rb +94 -0
  65. data/lib/rex/exploitation/javascriptosdetect.rb +897 -0
  66. data/lib/rex/exploitation/obfuscatejs.rb +335 -0
  67. data/lib/rex/exploitation/omelet.rb +320 -0
  68. data/lib/rex/exploitation/omelet.rb.ut.rb +13 -0
  69. data/lib/rex/exploitation/opcodedb.rb +818 -0
  70. data/lib/rex/exploitation/opcodedb.rb.ut.rb +279 -0
  71. data/lib/rex/exploitation/seh.rb +92 -0
  72. data/lib/rex/exploitation/seh.rb.ut.rb +19 -0
  73. data/lib/rex/file.rb +112 -0
  74. data/lib/rex/file.rb.ut.rb +16 -0
  75. data/lib/rex/image_source.rb +12 -0
  76. data/lib/rex/image_source/disk.rb +60 -0
  77. data/lib/rex/image_source/image_source.rb +46 -0
  78. data/lib/rex/image_source/memory.rb +37 -0
  79. data/lib/rex/io/bidirectional_pipe.rb +157 -0
  80. data/lib/rex/io/datagram_abstraction.rb +35 -0
  81. data/lib/rex/io/ring_buffer.rb +364 -0
  82. data/lib/rex/io/stream.rb +319 -0
  83. data/lib/rex/io/stream_abstraction.rb +197 -0
  84. data/lib/rex/io/stream_server.rb +211 -0
  85. data/lib/rex/job_container.rb +187 -0
  86. data/lib/rex/logging.rb +4 -0
  87. data/lib/rex/logging/log_dispatcher.rb +179 -0
  88. data/lib/rex/logging/log_sink.rb +42 -0
  89. data/lib/rex/logging/sinks/flatfile.rb +55 -0
  90. data/lib/rex/logging/sinks/stderr.rb +43 -0
  91. data/lib/rex/machparsey.rb +9 -0
  92. data/lib/rex/machparsey/exceptions.rb +34 -0
  93. data/lib/rex/machparsey/mach.rb +209 -0
  94. data/lib/rex/machparsey/machbase.rb +408 -0
  95. data/lib/rex/machscan.rb +9 -0
  96. data/lib/rex/machscan/scanner.rb +217 -0
  97. data/lib/rex/mime.rb +9 -0
  98. data/lib/rex/mime/header.rb +77 -0
  99. data/lib/rex/mime/message.rb +144 -0
  100. data/lib/rex/mime/part.rb +20 -0
  101. data/lib/rex/nop/opty2.rb +108 -0
  102. data/lib/rex/nop/opty2.rb.ut.rb +23 -0
  103. data/lib/rex/nop/opty2_tables.rb +300 -0
  104. data/lib/rex/ole.rb +205 -0
  105. data/lib/rex/ole/clsid.rb +47 -0
  106. data/lib/rex/ole/difat.rb +141 -0
  107. data/lib/rex/ole/directory.rb +231 -0
  108. data/lib/rex/ole/direntry.rb +240 -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 +99 -0
  112. data/lib/rex/ole/header.rb +204 -0
  113. data/lib/rex/ole/minifat.rb +77 -0
  114. data/lib/rex/ole/propset.rb +144 -0
  115. data/lib/rex/ole/samples/create_ole.rb +27 -0
  116. data/lib/rex/ole/samples/dir.rb +35 -0
  117. data/lib/rex/ole/samples/dump_stream.rb +34 -0
  118. data/lib/rex/ole/samples/ole_info.rb +23 -0
  119. data/lib/rex/ole/storage.rb +395 -0
  120. data/lib/rex/ole/stream.rb +53 -0
  121. data/lib/rex/ole/substorage.rb +49 -0
  122. data/lib/rex/ole/util.rb +157 -0
  123. data/lib/rex/parser/arguments.rb +97 -0
  124. data/lib/rex/parser/arguments.rb.ut.rb +67 -0
  125. data/lib/rex/parser/ini.rb +185 -0
  126. data/lib/rex/parser/ini.rb.ut.rb +29 -0
  127. data/lib/rex/parser/ip360_aspl_xml.rb +102 -0
  128. data/lib/rex/parser/ip360_xml.rb +97 -0
  129. data/lib/rex/parser/nessus_xml.rb +118 -0
  130. data/lib/rex/parser/netsparker_xml.rb +94 -0
  131. data/lib/rex/parser/nexpose_xml.rb +136 -0
  132. data/lib/rex/parser/nmap_xml.rb +137 -0
  133. data/lib/rex/parser/retina_xml.rb +109 -0
  134. data/lib/rex/payloads.rb +1 -0
  135. data/lib/rex/payloads/win32.rb +2 -0
  136. data/lib/rex/payloads/win32/common.rb +26 -0
  137. data/lib/rex/payloads/win32/kernel.rb +53 -0
  138. data/lib/rex/payloads/win32/kernel/common.rb +54 -0
  139. data/lib/rex/payloads/win32/kernel/migration.rb +12 -0
  140. data/lib/rex/payloads/win32/kernel/recovery.rb +50 -0
  141. data/lib/rex/payloads/win32/kernel/stager.rb +194 -0
  142. data/lib/rex/peparsey.rb +12 -0
  143. data/lib/rex/peparsey/exceptions.rb +32 -0
  144. data/lib/rex/peparsey/pe.rb +212 -0
  145. data/lib/rex/peparsey/pe_memdump.rb +63 -0
  146. data/lib/rex/peparsey/pebase.rb +1680 -0
  147. data/lib/rex/peparsey/section.rb +136 -0
  148. data/lib/rex/pescan.rb +13 -0
  149. data/lib/rex/pescan/analyze.rb +309 -0
  150. data/lib/rex/pescan/scanner.rb +206 -0
  151. data/lib/rex/pescan/search.rb +56 -0
  152. data/lib/rex/platforms.rb +1 -0
  153. data/lib/rex/platforms/windows.rb +51 -0
  154. data/lib/rex/poly.rb +132 -0
  155. data/lib/rex/poly/block.rb +477 -0
  156. data/lib/rex/poly/register.rb +100 -0
  157. data/lib/rex/poly/register/x86.rb +40 -0
  158. data/lib/rex/post.rb +8 -0
  159. data/lib/rex/post/dir.rb +51 -0
  160. data/lib/rex/post/file.rb +172 -0
  161. data/lib/rex/post/file_stat.rb +220 -0
  162. data/lib/rex/post/gen.pl +13 -0
  163. data/lib/rex/post/io.rb +182 -0
  164. data/lib/rex/post/meterpreter.rb +4 -0
  165. data/lib/rex/post/meterpreter/channel.rb +445 -0
  166. data/lib/rex/post/meterpreter/channel_container.rb +54 -0
  167. data/lib/rex/post/meterpreter/channels/pool.rb +160 -0
  168. data/lib/rex/post/meterpreter/channels/pools/file.rb +62 -0
  169. data/lib/rex/post/meterpreter/channels/pools/stream_pool.rb +103 -0
  170. data/lib/rex/post/meterpreter/channels/stream.rb +87 -0
  171. data/lib/rex/post/meterpreter/client.rb +364 -0
  172. data/lib/rex/post/meterpreter/client_core.rb +274 -0
  173. data/lib/rex/post/meterpreter/dependencies.rb +3 -0
  174. data/lib/rex/post/meterpreter/extension.rb +32 -0
  175. data/lib/rex/post/meterpreter/extensions/espia/espia.rb +58 -0
  176. data/lib/rex/post/meterpreter/extensions/espia/tlv.rb +16 -0
  177. data/lib/rex/post/meterpreter/extensions/incognito/incognito.rb +94 -0
  178. data/lib/rex/post/meterpreter/extensions/incognito/tlv.rb +21 -0
  179. data/lib/rex/post/meterpreter/extensions/networkpug/networkpug.rb +57 -0
  180. data/lib/rex/post/meterpreter/extensions/networkpug/tlv.rb +15 -0
  181. data/lib/rex/post/meterpreter/extensions/priv/fs.rb +118 -0
  182. data/lib/rex/post/meterpreter/extensions/priv/passwd.rb +61 -0
  183. data/lib/rex/post/meterpreter/extensions/priv/priv.rb +111 -0
  184. data/lib/rex/post/meterpreter/extensions/priv/tlv.rb +28 -0
  185. data/lib/rex/post/meterpreter/extensions/sniffer/sniffer.rb +101 -0
  186. data/lib/rex/post/meterpreter/extensions/sniffer/tlv.rb +26 -0
  187. data/lib/rex/post/meterpreter/extensions/stdapi/constants.rb +333 -0
  188. data/lib/rex/post/meterpreter/extensions/stdapi/fs/dir.rb +282 -0
  189. data/lib/rex/post/meterpreter/extensions/stdapi/fs/file.rb +266 -0
  190. data/lib/rex/post/meterpreter/extensions/stdapi/fs/file_stat.rb +103 -0
  191. data/lib/rex/post/meterpreter/extensions/stdapi/fs/io.rb +48 -0
  192. data/lib/rex/post/meterpreter/extensions/stdapi/net/config.rb +144 -0
  193. data/lib/rex/post/meterpreter/extensions/stdapi/net/interface.rb +73 -0
  194. data/lib/rex/post/meterpreter/extensions/stdapi/net/route.rb +56 -0
  195. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket.rb +137 -0
  196. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/tcp_client_channel.rb +180 -0
  197. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/tcp_server_channel.rb +167 -0
  198. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/udp_channel.rb +208 -0
  199. data/lib/rex/post/meterpreter/extensions/stdapi/railgun.rb.ts.rb +6 -0
  200. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/api_constants.rb +38106 -0
  201. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/api_constants.rb.ut.rb +31 -0
  202. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/buffer_item.rb +47 -0
  203. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/buffer_item.rb.ut.rb +36 -0
  204. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_advapi32.rb +1818 -0
  205. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_iphlpapi.rb +96 -0
  206. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_kernel32.rb +3848 -0
  207. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_netapi32.rb +26 -0
  208. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_ntdll.rb +153 -0
  209. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_shell32.rb +21 -0
  210. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_user32.rb +3169 -0
  211. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_ws2_32.rb +599 -0
  212. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll.rb +318 -0
  213. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_function.rb +100 -0
  214. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_function.rb.ut.rb +42 -0
  215. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_helper.rb +148 -0
  216. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_helper.rb.ut.rb +127 -0
  217. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/multicall.rb +309 -0
  218. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/railgun.rb +204 -0
  219. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/tlv.rb +51 -0
  220. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/util.rb +630 -0
  221. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/win_const_manager.rb +75 -0
  222. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/win_const_manager.rb.ut.rb +103 -0
  223. data/lib/rex/post/meterpreter/extensions/stdapi/stdapi.rb +149 -0
  224. data/lib/rex/post/meterpreter/extensions/stdapi/sys/config.rb +97 -0
  225. data/lib/rex/post/meterpreter/extensions/stdapi/sys/event_log.rb +192 -0
  226. data/lib/rex/post/meterpreter/extensions/stdapi/sys/event_log_subsystem/event_record.rb +41 -0
  227. data/lib/rex/post/meterpreter/extensions/stdapi/sys/power.rb +61 -0
  228. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process.rb +370 -0
  229. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/image.rb +129 -0
  230. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/io.rb +55 -0
  231. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/memory.rb +336 -0
  232. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/thread.rb +141 -0
  233. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry.rb +279 -0
  234. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_key.rb +193 -0
  235. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_value.rb +102 -0
  236. data/lib/rex/post/meterpreter/extensions/stdapi/sys/thread.rb +180 -0
  237. data/lib/rex/post/meterpreter/extensions/stdapi/tlv.rb +211 -0
  238. data/lib/rex/post/meterpreter/extensions/stdapi/ui.rb +227 -0
  239. data/lib/rex/post/meterpreter/extensions/stdapi/webcam/webcam.rb +63 -0
  240. data/lib/rex/post/meterpreter/inbound_packet_handler.rb +30 -0
  241. data/lib/rex/post/meterpreter/object_aliases.rb +83 -0
  242. data/lib/rex/post/meterpreter/packet.rb +688 -0
  243. data/lib/rex/post/meterpreter/packet_dispatcher.rb +431 -0
  244. data/lib/rex/post/meterpreter/packet_parser.rb +94 -0
  245. data/lib/rex/post/meterpreter/packet_response_waiter.rb +83 -0
  246. data/lib/rex/post/meterpreter/ui/console.rb +137 -0
  247. data/lib/rex/post/meterpreter/ui/console/command_dispatcher.rb +62 -0
  248. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/core.rb +730 -0
  249. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/espia.rb +108 -0
  250. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/incognito.rb +241 -0
  251. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/networkpug.rb +231 -0
  252. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv.rb +61 -0
  253. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/elevate.rb +98 -0
  254. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/passwd.rb +51 -0
  255. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/timestomp.rb +132 -0
  256. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/sniffer.rb +187 -0
  257. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi.rb +65 -0
  258. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/fs.rb +442 -0
  259. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/net.rb +298 -0
  260. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/sys.rb +486 -0
  261. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/ui.rb +315 -0
  262. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/webcam.rb +157 -0
  263. data/lib/rex/post/meterpreter/ui/console/interactive_channel.rb +95 -0
  264. data/lib/rex/post/permission.rb +26 -0
  265. data/lib/rex/post/process.rb +57 -0
  266. data/lib/rex/post/thread.rb +57 -0
  267. data/lib/rex/post/ui.rb +52 -0
  268. data/lib/rex/proto.rb +13 -0
  269. data/lib/rex/proto.rb.ts.rb +8 -0
  270. data/lib/rex/proto/dcerpc.rb +6 -0
  271. data/lib/rex/proto/dcerpc.rb.ts.rb +9 -0
  272. data/lib/rex/proto/dcerpc/client.rb +361 -0
  273. data/lib/rex/proto/dcerpc/client.rb.ut.rb +491 -0
  274. data/lib/rex/proto/dcerpc/exceptions.rb +150 -0
  275. data/lib/rex/proto/dcerpc/handle.rb +47 -0
  276. data/lib/rex/proto/dcerpc/handle.rb.ut.rb +85 -0
  277. data/lib/rex/proto/dcerpc/ndr.rb +72 -0
  278. data/lib/rex/proto/dcerpc/ndr.rb.ut.rb +41 -0
  279. data/lib/rex/proto/dcerpc/packet.rb +253 -0
  280. data/lib/rex/proto/dcerpc/packet.rb.ut.rb +56 -0
  281. data/lib/rex/proto/dcerpc/response.rb +187 -0
  282. data/lib/rex/proto/dcerpc/response.rb.ut.rb +15 -0
  283. data/lib/rex/proto/dcerpc/uuid.rb +84 -0
  284. data/lib/rex/proto/dcerpc/uuid.rb.ut.rb +46 -0
  285. data/lib/rex/proto/dhcp.rb +7 -0
  286. data/lib/rex/proto/dhcp/constants.rb +33 -0
  287. data/lib/rex/proto/dhcp/server.rb +292 -0
  288. data/lib/rex/proto/drda.rb +5 -0
  289. data/lib/rex/proto/drda.rb.ts.rb +17 -0
  290. data/lib/rex/proto/drda/constants.rb +49 -0
  291. data/lib/rex/proto/drda/constants.rb.ut.rb +23 -0
  292. data/lib/rex/proto/drda/packet.rb +252 -0
  293. data/lib/rex/proto/drda/packet.rb.ut.rb +109 -0
  294. data/lib/rex/proto/drda/utils.rb +123 -0
  295. data/lib/rex/proto/drda/utils.rb.ut.rb +84 -0
  296. data/lib/rex/proto/http.rb +5 -0
  297. data/lib/rex/proto/http.rb.ts.rb +12 -0
  298. data/lib/rex/proto/http/client.rb +821 -0
  299. data/lib/rex/proto/http/client.rb.ut.rb +95 -0
  300. data/lib/rex/proto/http/handler.rb +46 -0
  301. data/lib/rex/proto/http/handler/erb.rb +128 -0
  302. data/lib/rex/proto/http/handler/erb.rb.ut.rb +21 -0
  303. data/lib/rex/proto/http/handler/erb.rb.ut.rb.rhtml +1 -0
  304. data/lib/rex/proto/http/handler/proc.rb +60 -0
  305. data/lib/rex/proto/http/handler/proc.rb.ut.rb +24 -0
  306. data/lib/rex/proto/http/header.rb +161 -0
  307. data/lib/rex/proto/http/header.rb.ut.rb +46 -0
  308. data/lib/rex/proto/http/packet.rb +407 -0
  309. data/lib/rex/proto/http/packet.rb.ut.rb +165 -0
  310. data/lib/rex/proto/http/request.rb +356 -0
  311. data/lib/rex/proto/http/request.rb.ut.rb +214 -0
  312. data/lib/rex/proto/http/response.rb +90 -0
  313. data/lib/rex/proto/http/response.rb.ut.rb +149 -0
  314. data/lib/rex/proto/http/server.rb +369 -0
  315. data/lib/rex/proto/http/server.rb.ut.rb +79 -0
  316. data/lib/rex/proto/ntlm.rb +7 -0
  317. data/lib/rex/proto/ntlm.rb.ut.rb +177 -0
  318. data/lib/rex/proto/ntlm/base.rb +326 -0
  319. data/lib/rex/proto/ntlm/constants.rb +74 -0
  320. data/lib/rex/proto/ntlm/crypt.rb +415 -0
  321. data/lib/rex/proto/ntlm/exceptions.rb +16 -0
  322. data/lib/rex/proto/ntlm/message.rb +536 -0
  323. data/lib/rex/proto/ntlm/utils.rb +764 -0
  324. data/lib/rex/proto/proxy/socks4a.rb +440 -0
  325. data/lib/rex/proto/rfb.rb +19 -0
  326. data/lib/rex/proto/rfb.rb.ut.rb +37 -0
  327. data/lib/rex/proto/rfb/cipher.rb +84 -0
  328. data/lib/rex/proto/rfb/client.rb +207 -0
  329. data/lib/rex/proto/rfb/constants.rb +52 -0
  330. data/lib/rex/proto/smb.rb +7 -0
  331. data/lib/rex/proto/smb.rb.ts.rb +8 -0
  332. data/lib/rex/proto/smb/client.rb +1952 -0
  333. data/lib/rex/proto/smb/client.rb.ut.rb +223 -0
  334. data/lib/rex/proto/smb/constants.rb +1047 -0
  335. data/lib/rex/proto/smb/constants.rb.ut.rb +18 -0
  336. data/lib/rex/proto/smb/crypt.rb +36 -0
  337. data/lib/rex/proto/smb/evasions.rb +66 -0
  338. data/lib/rex/proto/smb/exceptions.rb +858 -0
  339. data/lib/rex/proto/smb/simpleclient.rb +306 -0
  340. data/lib/rex/proto/smb/simpleclient.rb.ut.rb +128 -0
  341. data/lib/rex/proto/smb/utils.rb +103 -0
  342. data/lib/rex/proto/smb/utils.rb.ut.rb +20 -0
  343. data/lib/rex/proto/sunrpc.rb +1 -0
  344. data/lib/rex/proto/sunrpc/client.rb +195 -0
  345. data/lib/rex/proto/tftp.rb +12 -0
  346. data/lib/rex/proto/tftp/constants.rb +39 -0
  347. data/lib/rex/proto/tftp/server.rb +497 -0
  348. data/lib/rex/proto/tftp/server.rb.ut.rb +28 -0
  349. data/lib/rex/script.rb +42 -0
  350. data/lib/rex/script/base.rb +59 -0
  351. data/lib/rex/script/meterpreter.rb +15 -0
  352. data/lib/rex/script/shell.rb +9 -0
  353. data/lib/rex/service.rb +48 -0
  354. data/lib/rex/service_manager.rb +141 -0
  355. data/lib/rex/service_manager.rb.ut.rb +32 -0
  356. data/lib/rex/services/local_relay.rb +423 -0
  357. data/lib/rex/socket.rb +684 -0
  358. data/lib/rex/socket.rb.ut.rb +107 -0
  359. data/lib/rex/socket/comm.rb +119 -0
  360. data/lib/rex/socket/comm/local.rb +412 -0
  361. data/lib/rex/socket/comm/local.rb.ut.rb +75 -0
  362. data/lib/rex/socket/ip.rb +130 -0
  363. data/lib/rex/socket/parameters.rb +345 -0
  364. data/lib/rex/socket/parameters.rb.ut.rb +51 -0
  365. data/lib/rex/socket/range_walker.rb +346 -0
  366. data/lib/rex/socket/range_walker.rb.ut.rb +55 -0
  367. data/lib/rex/socket/ssl_tcp.rb +184 -0
  368. data/lib/rex/socket/ssl_tcp.rb.ut.rb +39 -0
  369. data/lib/rex/socket/ssl_tcp_server.rb +122 -0
  370. data/lib/rex/socket/ssl_tcp_server.rb.ut.rb +61 -0
  371. data/lib/rex/socket/subnet_walker.rb +75 -0
  372. data/lib/rex/socket/subnet_walker.rb.ut.rb +28 -0
  373. data/lib/rex/socket/switch_board.rb +278 -0
  374. data/lib/rex/socket/switch_board.rb.ut.rb +52 -0
  375. data/lib/rex/socket/tcp.rb +76 -0
  376. data/lib/rex/socket/tcp.rb.ut.rb +64 -0
  377. data/lib/rex/socket/tcp_server.rb +66 -0
  378. data/lib/rex/socket/tcp_server.rb.ut.rb +44 -0
  379. data/lib/rex/socket/udp.rb +164 -0
  380. data/lib/rex/socket/udp.rb.ut.rb +44 -0
  381. data/lib/rex/struct2.rb +5 -0
  382. data/lib/rex/struct2/c_struct.rb +181 -0
  383. data/lib/rex/struct2/c_struct_template.rb +39 -0
  384. data/lib/rex/struct2/constant.rb +26 -0
  385. data/lib/rex/struct2/element.rb +44 -0
  386. data/lib/rex/struct2/generic.rb +73 -0
  387. data/lib/rex/struct2/restraint.rb +54 -0
  388. data/lib/rex/struct2/s_string.rb +72 -0
  389. data/lib/rex/struct2/s_struct.rb +111 -0
  390. data/lib/rex/sync.rb +6 -0
  391. data/lib/rex/sync/event.rb +94 -0
  392. data/lib/rex/sync/read_write_lock.rb +176 -0
  393. data/lib/rex/sync/ref.rb +57 -0
  394. data/lib/rex/sync/thread_safe.rb +82 -0
  395. data/lib/rex/test.rb +35 -0
  396. data/lib/rex/text.rb +1163 -0
  397. data/lib/rex/text.rb.ut.rb +190 -0
  398. data/lib/rex/thread_factory.rb +42 -0
  399. data/lib/rex/time.rb +65 -0
  400. data/lib/rex/transformer.rb +115 -0
  401. data/lib/rex/transformer.rb.ut.rb +38 -0
  402. data/lib/rex/ui.rb +21 -0
  403. data/lib/rex/ui/interactive.rb +298 -0
  404. data/lib/rex/ui/output.rb +78 -0
  405. data/lib/rex/ui/output/none.rb +18 -0
  406. data/lib/rex/ui/progress_tracker.rb +96 -0
  407. data/lib/rex/ui/subscriber.rb +149 -0
  408. data/lib/rex/ui/text/color.rb +97 -0
  409. data/lib/rex/ui/text/color.rb.ut.rb +18 -0
  410. data/lib/rex/ui/text/dispatcher_shell.rb +467 -0
  411. data/lib/rex/ui/text/input.rb +117 -0
  412. data/lib/rex/ui/text/input/buffer.rb +75 -0
  413. data/lib/rex/ui/text/input/readline.rb +129 -0
  414. data/lib/rex/ui/text/input/socket.rb +95 -0
  415. data/lib/rex/ui/text/input/stdio.rb +45 -0
  416. data/lib/rex/ui/text/irb_shell.rb +57 -0
  417. data/lib/rex/ui/text/output.rb +80 -0
  418. data/lib/rex/ui/text/output/buffer.rb +61 -0
  419. data/lib/rex/ui/text/output/file.rb +43 -0
  420. data/lib/rex/ui/text/output/socket.rb +43 -0
  421. data/lib/rex/ui/text/output/stdio.rb +40 -0
  422. data/lib/rex/ui/text/progress_tracker.rb +56 -0
  423. data/lib/rex/ui/text/progress_tracker.rb.ut.rb +34 -0
  424. data/lib/rex/ui/text/shell.rb +328 -0
  425. data/lib/rex/ui/text/table.rb +279 -0
  426. data/lib/rex/ui/text/table.rb.ut.rb +55 -0
  427. data/lib/rex/zip.rb +93 -0
  428. data/lib/rex/zip/archive.rb +184 -0
  429. data/lib/rex/zip/blocks.rb +182 -0
  430. data/lib/rex/zip/entry.rb +104 -0
  431. data/lib/rex/zip/samples/comment.rb +32 -0
  432. data/lib/rex/zip/samples/mkwar.rb +138 -0
  433. data/lib/rex/zip/samples/mkzip.rb +19 -0
  434. data/lib/rex/zip/samples/recursive.rb +58 -0
  435. metadata +434 -1
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $:.unshift(File.join(File.dirname(__FILE__), '..', '..'))
4
+
5
+ require 'test/unit'
6
+ require 'rex/parser/ini'
7
+
8
+ class Rex::Parser::Ini::UnitTest < Test::Unit::TestCase
9
+
10
+ Klass = Rex::Parser::Ini
11
+ TestIni = <<END
12
+ [group1]
13
+ cat=dog
14
+ bird=frog
15
+
16
+ [group2]
17
+ salad=cake
18
+ END
19
+
20
+ def test_parse
21
+ ini = Klass.from_s(TestIni)
22
+
23
+ assert_equal('dog', ini['group1']['cat'])
24
+ assert_equal('frog', ini['group1']['bird'])
25
+ assert_equal('cake', ini['group2']['salad'])
26
+ assert_equal(TestIni + "\n", ini.to_s)
27
+ end
28
+
29
+ end
@@ -0,0 +1,102 @@
1
+ require 'rexml/document'
2
+ require 'rex/ui'
3
+
4
+ module Rex
5
+ module Parser
6
+
7
+
8
+ class IP360ASPLXMLStreamParser
9
+
10
+ @vulnid = nil
11
+ @appid = nil
12
+ @location = nil
13
+
14
+ attr_accessor :on_found_aspl
15
+
16
+ def initialize(&block)
17
+ reset_state
18
+ on_found_aspl = block if block
19
+ end
20
+
21
+ def reset_state
22
+ @aspl = {'vulns' => {'name' => { }, 'cve' => { }, 'bid' => { } },
23
+ 'oses' => {'name' => { } } }
24
+ @state = :generic_state
25
+ end
26
+
27
+ def tag_start(name, attributes)
28
+ case name
29
+ when "vulns"
30
+ @location = "vulns"
31
+ when "vuln"
32
+ @vulnid = attributes['id'].strip
33
+ when "name"
34
+ @state = :is_name
35
+ when "advisories"
36
+ @c = ""
37
+ @cfirst = 1
38
+ @b = ""
39
+ @bfirst = 1
40
+ @x = Hash.new
41
+ when "publisher"
42
+ @state = :is_pub
43
+ when "id"
44
+ @state = :is_refid
45
+ when "operatingSystems"
46
+ @location = "os"
47
+ when "operatingSystem"
48
+ @osid = attributes['id'].strip
49
+ end
50
+ end
51
+
52
+ def text(str)
53
+ case @state
54
+ when :is_name
55
+ @aspl['vulns']['name'][@vulnid] = str if @location == "vulns"
56
+ @aspl['oses'][@osid] = str if @location == "os"
57
+ when :is_pub
58
+ @x['pub'] = str
59
+ when :is_refid
60
+ @x['refid'] = str
61
+ end
62
+ end
63
+
64
+ def tag_end(name)
65
+ case name
66
+ when "ontology"
67
+ on_found_aspl.call(@aspl) if on_found_aspl
68
+ reset_state
69
+ when "advisory"
70
+ if (@x['pub'] =~ /CVE/)
71
+ if (@cfirst == 0)
72
+ @c += ","
73
+ end
74
+ @c += @x['refid']
75
+ @cfirst = 0
76
+ elsif (@x['pub'] =~ /BugTraq/)
77
+ if (@bfirst == 0)
78
+ @b += ","
79
+ end
80
+ @b += @x['refid']
81
+ @bfirst = 0
82
+ end
83
+ when "advisories"
84
+ @aspl['vulns']['cve'][@vulnid] = @c
85
+ @aspl['vulns']['bid'][@vulnid] = @b
86
+ @c = ""
87
+ @b = ""
88
+ end
89
+ @state = :generic_state
90
+ end
91
+
92
+ # We don't need these methods, but they're necessary to keep REXML happy
93
+ #
94
+ def xmldecl(version, encoding, standalone); end
95
+ def cdata; end
96
+ def comment(str); end
97
+ def instruction(name, instruction); end
98
+ def attlist; end
99
+ end
100
+
101
+ end
102
+ end
@@ -0,0 +1,97 @@
1
+ require 'rexml/document'
2
+ require 'rex/ui'
3
+
4
+ module Rex
5
+ module Parser
6
+
7
+
8
+ class IP360XMLStreamParser
9
+
10
+ attr_accessor :on_found_host
11
+
12
+ def initialize(&block)
13
+ reset_state
14
+ on_found_host = block if block
15
+ end
16
+
17
+ def reset_state
18
+ @host = {'hname' => nil, 'hid' => nil, 'addr' => nil, 'mac' => nil, 'os' => nil,
19
+ 'vulns' => ['vuln' => {'vulnid' => nil, 'port' => nil, 'proto' => nil} ],
20
+ 'apps' => ['app' => {'appid' => nil, 'svcid' => nil, 'port' => nil, 'proto' => nil } ],
21
+ }
22
+ @state = :generic_state
23
+ end
24
+
25
+ def tag_start(name, attributes)
26
+ case name
27
+ when "host"
28
+ @host['hid'] = attributes['persistent_id']
29
+ when "ip"
30
+ @state = :is_ip
31
+ when "dnsName"
32
+ @state = :is_fqdn
33
+ when "macAddress"
34
+ @state = :is_mac
35
+ when "os"
36
+ @host['os'] = attributes['id']
37
+ when "vulnerability"
38
+ @x = Hash.new
39
+ @x['vulnid'] = attributes['id']
40
+ when "port"
41
+ @state = :is_port
42
+ when "protocol"
43
+ @state = :is_proto
44
+ when "application"
45
+ @y = Hash.new
46
+ @y['appid'] = attributes['application_id']
47
+ @y['svcid'] = attributes['svcid']
48
+ @y['port'] = attributes['port']
49
+ @y['proto'] = attributes['protocol']
50
+ @host['apps'].push @y
51
+ end
52
+ end
53
+
54
+ def text(str)
55
+ case @state
56
+ when :is_fqdn
57
+ @host['hname'] = str
58
+ when :is_ip
59
+ @host['addr'] = str
60
+ when :is_mac
61
+ @host['mac'] = str
62
+ when :is_port
63
+ @x['port'] = str
64
+ when :is_proto
65
+ @x['proto'] = str
66
+ end
67
+ end
68
+
69
+ def tag_end(name)
70
+ case name
71
+ when "host"
72
+ on_found_host.call(@host) if on_found_host
73
+ reset_state
74
+ when "vulnerability"
75
+ @host['vulns'].push @x
76
+ end
77
+ @state = :generic_state
78
+ end
79
+
80
+ def cdata(d)
81
+ #do nothing
82
+ end
83
+
84
+ # We don't need these methods, but they're necessary to keep REXML happy
85
+ #
86
+ def xmldecl(version, encoding, standalone) # :nodoc:
87
+ end
88
+ def comment(str) # :nodoc:
89
+ end
90
+ def instruction(name, instruction) # :nodoc:
91
+ end
92
+ def attlist # :nodoc:
93
+ end
94
+ end
95
+
96
+ end
97
+ end
@@ -0,0 +1,118 @@
1
+ require 'rexml/document'
2
+ require 'rex/ui'
3
+
4
+ module Rex
5
+ module Parser
6
+
7
+
8
+ class NessusXMLStreamParser
9
+
10
+ attr_accessor :on_found_host
11
+
12
+ def initialize(&block)
13
+ reset_state
14
+ on_found_host = block if block
15
+ end
16
+
17
+ def reset_state
18
+ @host = {'hname' => nil, 'addr' => nil, 'mac' => nil, 'os' => nil, 'ports' => [
19
+ 'port' => {'port' => nil, 'svc_name' => nil, 'proto' => nil, 'severity' => nil,
20
+ 'nasl' => nil, 'description' => nil, 'cve' => [], 'bid' => [], 'xref' => [], 'msf' => nil } ] }
21
+ @state = :generic_state
22
+ end
23
+
24
+ def tag_start(name, attributes)
25
+ case name
26
+ when "tag"
27
+ if attributes['name'] == "mac-address"
28
+ @state = :is_mac
29
+ end
30
+ if attributes['name'] == "host-fqdn"
31
+ @state = :is_fqdn
32
+ end
33
+ if attributes['name'] == "ip-addr"
34
+ @state = :is_ip
35
+ end
36
+ if attributes['name'] == "host-ip"
37
+ @state = :is_ip
38
+ end
39
+ if attributes['name'] == "operating-system"
40
+ @state = :is_os
41
+ end
42
+ when "ReportHost"
43
+ @host['hname'] = attributes['name']
44
+ when "ReportItem"
45
+ @cve = Array.new
46
+ @bid = Array.new
47
+ @xref = Array.new
48
+ @x = Hash.new
49
+ @x['nasl'] = attributes['pluginID']
50
+ @x['port'] = attributes['port']
51
+ @x['proto'] = attributes['protocol']
52
+ @x['svc_name'] = attributes['svc_name']
53
+ @x['severity'] = attributes['severity']
54
+ when "description"
55
+ @state = :is_desc
56
+ when "cve"
57
+ @state = :is_cve
58
+ when "bid"
59
+ @state = :is_bid
60
+ when "xref"
61
+ @state = :is_xref
62
+ when "solution"
63
+ @state = :is_solution
64
+ when "metasploit_name"
65
+ @state = :msf
66
+ end
67
+ end
68
+
69
+ def text(str)
70
+ case @state
71
+ when :is_fqdn
72
+ @host['hname'] = str
73
+ when :is_ip
74
+ @host['addr'] = str
75
+ when :is_os
76
+ @host['os'] = str
77
+ when :is_mac
78
+ @host['mac'] = str
79
+ when :is_desc
80
+ @x['description'] = str
81
+ when :is_cve
82
+ @cve.push str
83
+ when :is_bid
84
+ @bid.push str
85
+ when :is_xref
86
+ @xref.push str
87
+ when :msf
88
+ #p str
89
+ @x['msf'] = str
90
+ end
91
+ end
92
+
93
+ def tag_end(name)
94
+ case name
95
+ when "ReportHost"
96
+ on_found_host.call(@host) if on_found_host
97
+ reset_state
98
+ when "ReportItem"
99
+ @x['cve'] = @cve
100
+ @x['bid'] = @bid
101
+ @x['xref'] = @xref
102
+ @host['ports'].push @x
103
+ end
104
+ @state = :generic_state
105
+ end
106
+
107
+ # We don't need these methods, but they're necessary to keep REXML happy
108
+ #
109
+ def xmldecl(version, encoding, standalone); end
110
+ def cdata; end
111
+ def comment(str); end
112
+ def instruction(name, instruction); end
113
+ def attlist; end
114
+ end
115
+
116
+ end
117
+ end
118
+
@@ -0,0 +1,94 @@
1
+ module Rex
2
+ module Parser
3
+
4
+
5
+ class NetSparkerXMLStreamParser
6
+
7
+ attr_accessor :on_found_vuln
8
+
9
+ def initialize(on_found_vuln = nil)
10
+ self.on_found_vuln = on_found_vuln if on_found_vuln
11
+ reset_state
12
+ end
13
+
14
+ def reset_state
15
+ @state = :generic_state
16
+ @vuln = {'info' => []}
17
+ @attr = {}
18
+ end
19
+
20
+ def tag_start(name, attributes)
21
+ @state = "in_#{name.downcase}".intern
22
+ @attr = attributes
23
+
24
+ case name
25
+ when "vulnerability"
26
+ @vuln['confirmed'] = attributes['confirmed']
27
+ end
28
+ end
29
+
30
+ def text(str)
31
+ case @state
32
+ when :in_url
33
+ @vuln['url'] ||= ""
34
+ @vuln['url'] += str
35
+ when :in_type
36
+ @vuln['type'] ||= ""
37
+ @vuln['type'] += str
38
+ when :in_severity
39
+ @vuln['severity'] ||= ""
40
+ @vuln['severity'] += str
41
+ when :in_vulnerableparametertype
42
+ @vuln["vparam_type"] ||= ""
43
+ @vuln["vparam_type"] += str
44
+ when :in_vulnerableparameter
45
+ @vuln["vparam_name"] ||= ""
46
+ @vuln["vparam_name"] += str
47
+ when :in_vulnerableparametervalue
48
+ @vuln["vparam_value"] ||= ""
49
+ @vuln["vparam_value"] += str
50
+ when :in_rawrequest
51
+ @vuln["request"] ||= ""
52
+ @vuln["request"] += str
53
+ when :in_rawresponse
54
+ @vuln["response"] ||= ""
55
+ @vuln["response"] += str
56
+ when :in_info
57
+ # <info name="Identified Internal Path(s)">C:\AppServ\www\test-apps\dokeos\main\inc\banner.inc.php</info>
58
+ if not str.to_s.strip.empty?
59
+ @vuln['info'] << [@attr['name'] || "Information", str]
60
+ end
61
+ when :in_netsparker
62
+ when :in_target
63
+ when :in_scantime
64
+ when :generic_state
65
+ when :in_vulnerability
66
+ when :in_extrainformation
67
+ else
68
+ # $stderr.puts "unknown state: #{@state}"
69
+ end
70
+ end
71
+
72
+ def tag_end(name)
73
+ case name
74
+ when "vulnerability"
75
+ @vuln.keys.each do |k|
76
+ @vuln[k] = @vuln[k].strip if @vuln[k].kind_of?(::String)
77
+ end
78
+ on_found_vuln.call(@vuln) if on_found_vuln
79
+ reset_state
80
+ end
81
+ end
82
+
83
+ # We don't need these methods, but they're necessary to keep REXML happy
84
+ def xmldecl(version, encoding, standalone); end
85
+ def cdata; end
86
+ def comment(str); end
87
+ def instruction(name, instruction); end
88
+ def attlist; end
89
+ end
90
+ end
91
+ end
92
+
93
+ __END__
94
+
@@ -0,0 +1,136 @@
1
+ module Rex
2
+ module Parser
3
+
4
+ # XXX doesn't tie services to vulns
5
+ class NexposeXMLStreamParser
6
+
7
+ attr_accessor :callback
8
+
9
+ def initialize(callback = nil)
10
+ reset_state
11
+ self.callback = callback if callback
12
+ end
13
+
14
+ def reset_state
15
+ @state = :generic_state
16
+ @host = { "status" => nil, "endpoints" => [], "names" => [], "vulns" => {} }
17
+ @vuln = { "refs" => [] }
18
+ end
19
+
20
+ def tag_start(name, attributes)
21
+ case name
22
+ when "node"
23
+ @host["hardware-address"] = attributes["hardware-address"]
24
+ @host["addr"] = attributes["address"]
25
+ @host["status"] = attributes["status"]
26
+ when "os"
27
+ # Take only the highest certainty
28
+ if not @host["os_certainty"] or (@host["os_certainty"].to_f < attributes["certainty"].to_f)
29
+ @host["os_vendor"] = attributes["vendor"]
30
+ @host["os_family"] = attributes["family"]
31
+ @host["os_product"] = attributes["product"]
32
+ @host["arch"] = attributes["arch"]
33
+ @host["os_certainty"] = attributes["certainty"]
34
+ end
35
+ when "name"
36
+ #@host["names"].push attributes["name"]
37
+ @state = :in_name
38
+ when "endpoint"
39
+ # This is a port in NeXpose parlance
40
+ @host["endpoints"].push(attributes)
41
+ when "service"
42
+ @state = :in_service
43
+ # Store any service info with the associated port. There shouldn't
44
+ # be any collisions on attribute names here, so just merge them.
45
+ @host["endpoints"].last.merge!(attributes)
46
+ when "fingerprint"
47
+ if @state == :in_service
48
+ @host["endpoints"].last.merge!(attributes)
49
+ end
50
+ when "test"
51
+ if attributes["status"] == "vulnerable-exploited" or attributes["status"] == "vulnerable-version"
52
+ @host["vulns"][attributes["id"]] = attributes.dup
53
+ end
54
+ when "vulnerability"
55
+ @vuln.merge! attributes
56
+ when "reference"
57
+ @state = :in_reference
58
+ @vuln["refs"].push attributes
59
+ end
60
+ end
61
+
62
+ def text(str)
63
+ case @state
64
+ when :in_name
65
+ @host["names"].push str
66
+ when :in_reference
67
+ @vuln["refs"].last["value"] = str
68
+ end
69
+ end
70
+
71
+ def tag_end(name)
72
+ case name
73
+ when "node"
74
+ callback.call(:host, @host) if callback
75
+ reset_state
76
+ when "vulnerability"
77
+ callback.call(:vuln, @vuln) if callback
78
+ reset_state
79
+ when "service","reference"
80
+ @state = :generic_state
81
+ end
82
+ end
83
+
84
+ # We don't need these methods, but they're necessary to keep REXML happy
85
+ def xmldecl(version, encoding, standalone) # :nodoc:
86
+ end
87
+ def cdata # :nodoc:
88
+ end
89
+ def comment(str) # :nodoc:
90
+ end
91
+ def instruction(name, instruction) # :nodoc:
92
+ end
93
+ def attlist # :nodoc:
94
+ end
95
+ end
96
+ end
97
+ end
98
+
99
+ __END__
100
+
101
+ <node address="10.1.1.10" status="alive" hardware-address="0007371F3BE8">
102
+ <names>
103
+ <name>NETBIOSNAME</name>
104
+ <name>hostname.example.com</name>
105
+ </names>
106
+ <fingerprints>
107
+ <os certainty="1.00" device-class="Domain controller" vendor="Microsoft" family="Windows" product="Windows Server 2003, Standard Edition" version="SP2" arch="x86"/>
108
+ <os certainty="0.85" device-class="General" vendor="Microsoft" family="Windows" product="Windows Server 2003"/>
109
+ <os certainty="0.70" vendor="Microsoft" family="Windows" product="Windows Server 2003"/>
110
+ </fingerprints>
111
+ <software>
112
+ <fingerprint certainty="1.00" vendor="Acronis" product="Acronis&#160;True&#160;Image&#160;Echo&#160;Server" version="9.5.8163"/>
113
+ <fingerprint certainty="1.00" vendor="Acronis" product="Acronis&#160;Universal&#160;Restore for Acronis&#160;True&#160;Image&#160;Echo&#160;Server" version="9.5.8076"/>
114
+ <fingerprint certainty="1.00" software-class="Internet Client" vendor="Microsoft" family="Internet Explorer" product="Internet Explorer" version="7.0.5730.11"/>
115
+ <fingerprint certainty="1.00" software-class="Database Client" vendor="Microsoft" family="MDAC" product="MDAC" version="2.8"/>
116
+ <fingerprint certainty="1.00" software-class="Media Client" vendor="Microsoft" family="Windows Media Player" product="Windows Media Player" version="10.0.0.3997"/>
117
+ <fingerprint certainty="1.00" vendor="MySolutions NORDIC" product="NSClient++ (Win32)" version="0.3.4.0"/>
118
+ <fingerprint certainty="1.00" vendor="Symantec Corporation" product="LiveUpdate 3.1 (Symantec Corporation)" version="3.1.0.99"/>
119
+ <fingerprint certainty="1.00" vendor="Symantec Corporation" product="Symantec AntiVirus" version="10.1.5000.5"/>
120
+ </software>
121
+ <tests>
122
+ <test status="not-vulnerable" id="backdoor-ckb.cfaae1e6">
123
+
124
+ <endpoint protocol="tcp" port="139" status="open">
125
+ <services>
126
+ <service name="CIFS">
127
+ <fingerprints>
128
+ <fingerprint certainty="1.00" product="Windows Server 2003 R2 5.2"/>
129
+ </fingerprints>
130
+ <tests>
131
+ </tests>
132
+ </service>
133
+ </services>
134
+ </endpoint>
135
+ </node>
136
+