librex 0.0.68 → 0.0.70

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (528) hide show
  1. checksums.yaml +15 -0
  2. data/README.markdown +1 -1
  3. data/Rakefile +18 -16
  4. data/lib/rex.rb +14 -10
  5. data/lib/rex/LICENSE +2 -2
  6. data/lib/rex/arch.rb +76 -76
  7. data/lib/rex/arch/sparc.rb +57 -58
  8. data/lib/rex/arch/x86.rb +506 -496
  9. data/lib/rex/assembly/nasm.rb +83 -84
  10. data/lib/rex/compat.rb +228 -173
  11. data/lib/rex/constants.rb +47 -37
  12. data/lib/rex/elfparsey.rb +0 -3
  13. data/lib/rex/elfparsey/elf.rb +107 -110
  14. data/lib/rex/elfparsey/elfbase.rb +244 -247
  15. data/lib/rex/elfparsey/exceptions.rb +0 -3
  16. data/lib/rex/elfscan.rb +0 -3
  17. data/lib/rex/elfscan/scanner.rb +184 -166
  18. data/lib/rex/elfscan/search.rb +35 -38
  19. data/lib/rex/encoder/alpha2.rb +1 -2
  20. data/lib/rex/encoder/alpha2/alpha_mixed.rb +52 -53
  21. data/lib/rex/encoder/alpha2/alpha_upper.rb +62 -63
  22. data/lib/rex/encoder/alpha2/generic.rb +77 -78
  23. data/lib/rex/encoder/alpha2/unicode_mixed.rb +101 -97
  24. data/lib/rex/encoder/alpha2/unicode_upper.rb +106 -107
  25. data/lib/rex/encoder/bloxor/bloxor.rb +326 -0
  26. data/lib/rex/encoder/ndr.rb +68 -68
  27. data/lib/rex/encoder/nonalpha.rb +50 -51
  28. data/lib/rex/encoder/nonupper.rb +50 -51
  29. data/lib/rex/encoder/xdr.rb +78 -78
  30. data/lib/rex/encoder/xor.rb +52 -53
  31. data/lib/rex/encoder/xor/dword.rb +1 -2
  32. data/lib/rex/encoder/xor/dword_additive.rb +1 -2
  33. data/lib/rex/encoders/xor_dword.rb +17 -18
  34. data/lib/rex/encoders/xor_dword_additive.rb +35 -36
  35. data/lib/rex/encoding/xor.rb +0 -1
  36. data/lib/rex/encoding/xor/byte.rb +3 -4
  37. data/lib/rex/encoding/xor/dword.rb +3 -4
  38. data/lib/rex/encoding/xor/dword_additive.rb +72 -73
  39. data/lib/rex/encoding/xor/exceptions.rb +2 -3
  40. data/lib/rex/encoding/xor/generic.rb +129 -130
  41. data/lib/rex/encoding/xor/qword.rb +3 -4
  42. data/lib/rex/encoding/xor/word.rb +3 -4
  43. data/lib/rex/exceptions.rb +100 -101
  44. data/lib/rex/exploitation/cmdstager.rb +3 -3
  45. data/lib/rex/exploitation/cmdstager/base.rb +170 -156
  46. data/lib/rex/exploitation/cmdstager/bourne.rb +105 -0
  47. data/lib/rex/exploitation/cmdstager/debug_asm.rb +110 -113
  48. data/lib/rex/exploitation/cmdstager/debug_write.rb +106 -109
  49. data/lib/rex/exploitation/cmdstager/echo.rb +164 -0
  50. data/lib/rex/exploitation/cmdstager/printf.rb +122 -0
  51. data/lib/rex/exploitation/cmdstager/tftp.rb +34 -27
  52. data/lib/rex/exploitation/cmdstager/vbs.rb +95 -98
  53. data/lib/rex/exploitation/egghunter.rb +359 -346
  54. data/lib/rex/exploitation/encryptjs.rb +60 -60
  55. data/lib/rex/exploitation/heaplib.rb +76 -76
  56. data/lib/rex/exploitation/js.rb +6 -0
  57. data/lib/rex/exploitation/js/detect.rb +69 -0
  58. data/lib/rex/exploitation/js/memory.rb +81 -0
  59. data/lib/rex/exploitation/js/network.rb +84 -0
  60. data/lib/rex/exploitation/js/utils.rb +33 -0
  61. data/lib/rex/exploitation/jsobfu.rb +448 -424
  62. data/lib/rex/exploitation/obfuscatejs.rb +301 -301
  63. data/lib/rex/exploitation/omelet.rb +257 -257
  64. data/lib/rex/exploitation/opcodedb.rb +699 -699
  65. data/lib/rex/exploitation/ropdb.rb +189 -0
  66. data/lib/rex/exploitation/seh.rb +68 -68
  67. data/lib/rex/file.rb +96 -49
  68. data/lib/rex/image_source.rb +0 -3
  69. data/lib/rex/image_source/disk.rb +45 -48
  70. data/lib/rex/image_source/image_source.rb +33 -36
  71. data/lib/rex/image_source/memory.rb +17 -20
  72. data/lib/rex/io/bidirectional_pipe.rb +118 -115
  73. data/lib/rex/io/datagram_abstraction.rb +13 -14
  74. data/lib/rex/io/ring_buffer.rb +273 -273
  75. data/lib/rex/io/stream.rb +284 -284
  76. data/lib/rex/io/stream_abstraction.rb +183 -181
  77. data/lib/rex/io/stream_server.rb +193 -193
  78. data/lib/rex/job_container.rb +167 -167
  79. data/lib/rex/logging.rb +0 -1
  80. data/lib/rex/logging/log_dispatcher.rb +113 -113
  81. data/lib/rex/logging/log_sink.rb +17 -17
  82. data/lib/rex/logging/sinks/flatfile.rb +36 -36
  83. data/lib/rex/logging/sinks/stderr.rb +27 -27
  84. data/lib/rex/mac_oui.rb +16572 -16571
  85. data/lib/rex/machparsey.rb +0 -1
  86. data/lib/rex/machparsey/exceptions.rb +0 -1
  87. data/lib/rex/machparsey/mach.rb +160 -161
  88. data/lib/rex/machparsey/machbase.rb +367 -368
  89. data/lib/rex/machscan.rb +0 -1
  90. data/lib/rex/machscan/scanner.rb +175 -176
  91. data/lib/rex/mime/encoding.rb +17 -0
  92. data/lib/rex/mime/header.rb +58 -58
  93. data/lib/rex/mime/message.rb +140 -137
  94. data/lib/rex/mime/part.rb +41 -12
  95. data/lib/rex/nop/opty2.rb +90 -90
  96. data/lib/rex/nop/opty2_tables.rb +273 -273
  97. data/lib/rex/ole.rb +0 -4
  98. data/lib/rex/ole/clsid.rb +26 -30
  99. data/lib/rex/ole/difat.rb +121 -125
  100. data/lib/rex/ole/directory.rb +205 -209
  101. data/lib/rex/ole/direntry.rb +217 -221
  102. data/lib/rex/ole/fat.rb +79 -83
  103. data/lib/rex/ole/header.rb +178 -182
  104. data/lib/rex/ole/minifat.rb +49 -53
  105. data/lib/rex/ole/propset.rb +113 -117
  106. data/lib/rex/ole/samples/create_ole.rb +8 -9
  107. data/lib/rex/ole/samples/dir.rb +10 -11
  108. data/lib/rex/ole/samples/dump_stream.rb +14 -15
  109. data/lib/rex/ole/samples/ole_info.rb +5 -6
  110. data/lib/rex/ole/storage.rb +372 -376
  111. data/lib/rex/ole/stream.rb +33 -37
  112. data/lib/rex/ole/substorage.rb +20 -24
  113. data/lib/rex/ole/util.rb +137 -141
  114. data/lib/rex/parser/acunetix_nokogiri.rb +398 -398
  115. data/lib/rex/parser/apple_backup_manifestdb.rb +116 -116
  116. data/lib/rex/parser/appscan_nokogiri.rb +359 -359
  117. data/lib/rex/parser/arguments.rb +88 -88
  118. data/lib/rex/parser/burp_session_nokogiri.rb +258 -258
  119. data/lib/rex/parser/ci_nokogiri.rb +184 -184
  120. data/lib/rex/parser/foundstone_nokogiri.rb +334 -333
  121. data/lib/rex/parser/fusionvm_nokogiri.rb +94 -94
  122. data/lib/rex/parser/ini.rb +167 -167
  123. data/lib/rex/parser/ip360_aspl_xml.rb +84 -84
  124. data/lib/rex/parser/ip360_xml.rb +77 -77
  125. data/lib/rex/parser/mbsa_nokogiri.rb +224 -224
  126. data/lib/rex/parser/nessus_xml.rb +100 -100
  127. data/lib/rex/parser/netsparker_xml.rb +89 -75
  128. data/lib/rex/parser/nexpose_raw_nokogiri.rb +677 -677
  129. data/lib/rex/parser/nexpose_simple_nokogiri.rb +322 -322
  130. data/lib/rex/parser/nexpose_xml.rb +105 -105
  131. data/lib/rex/parser/nmap_nokogiri.rb +386 -386
  132. data/lib/rex/parser/nmap_xml.rb +116 -116
  133. data/lib/rex/parser/nokogiri_doc_mixin.rb +223 -221
  134. data/lib/rex/parser/openvas_nokogiri.rb +162 -162
  135. data/lib/rex/parser/outpost24_nokogiri.rb +239 -0
  136. data/lib/rex/parser/retina_xml.rb +90 -90
  137. data/lib/rex/parser/unattend.rb +171 -0
  138. data/lib/rex/parser/wapiti_nokogiri.rb +89 -89
  139. data/lib/rex/payloads/win32/common.rb +14 -14
  140. data/lib/rex/payloads/win32/kernel.rb +36 -36
  141. data/lib/rex/payloads/win32/kernel/common.rb +32 -32
  142. data/lib/rex/payloads/win32/kernel/recovery.rb +27 -27
  143. data/lib/rex/payloads/win32/kernel/stager.rb +170 -170
  144. data/lib/rex/peparsey.rb +0 -3
  145. data/lib/rex/peparsey/exceptions.rb +0 -3
  146. data/lib/rex/peparsey/pe.rb +196 -199
  147. data/lib/rex/peparsey/pe_memdump.rb +35 -38
  148. data/lib/rex/peparsey/pebase.rb +1633 -1652
  149. data/lib/rex/peparsey/section.rb +115 -124
  150. data/lib/rex/pescan.rb +0 -3
  151. data/lib/rex/pescan/analyze.rb +351 -351
  152. data/lib/rex/pescan/scanner.rb +182 -182
  153. data/lib/rex/pescan/search.rb +59 -59
  154. data/lib/rex/platforms/windows.rb +37 -37
  155. data/lib/rex/poly.rb +111 -110
  156. data/lib/rex/poly/block.rb +419 -417
  157. data/lib/rex/poly/machine.rb +12 -0
  158. data/lib/rex/poly/machine/machine.rb +829 -0
  159. data/lib/rex/poly/machine/x86.rb +508 -0
  160. data/lib/rex/poly/register.rb +70 -70
  161. data/lib/rex/poly/register/x86.rb +22 -22
  162. data/lib/rex/post.rb +0 -1
  163. data/lib/rex/post/dir.rb +35 -36
  164. data/lib/rex/post/file.rb +140 -141
  165. data/lib/rex/post/file_stat.rb +198 -199
  166. data/lib/rex/post/io.rb +167 -168
  167. data/lib/rex/post/meterpreter.rb +1 -1
  168. data/lib/rex/post/meterpreter/channel.rb +389 -390
  169. data/lib/rex/post/meterpreter/channel_container.rb +33 -34
  170. data/lib/rex/post/meterpreter/channels/pool.rb +129 -130
  171. data/lib/rex/post/meterpreter/channels/pools/file.rb +35 -36
  172. data/lib/rex/post/meterpreter/channels/pools/stream_pool.rb +72 -73
  173. data/lib/rex/post/meterpreter/channels/stream.rb +62 -63
  174. data/lib/rex/post/meterpreter/client.rb +442 -436
  175. data/lib/rex/post/meterpreter/client_core.rb +326 -310
  176. data/lib/rex/post/meterpreter/dependencies.rb +0 -1
  177. data/lib/rex/post/meterpreter/extension.rb +12 -13
  178. data/lib/rex/post/meterpreter/extensions/espia/espia.rb +35 -36
  179. data/lib/rex/post/meterpreter/extensions/extapi/adsi/adsi.rb +71 -0
  180. data/lib/rex/post/meterpreter/extensions/extapi/clipboard/clipboard.rb +169 -0
  181. data/lib/rex/post/meterpreter/extensions/extapi/extapi.rb +45 -0
  182. data/lib/rex/post/meterpreter/extensions/extapi/service/service.rb +104 -0
  183. data/lib/rex/post/meterpreter/extensions/extapi/tlv.rb +77 -0
  184. data/lib/rex/post/meterpreter/extensions/extapi/window/window.rb +56 -0
  185. data/lib/rex/post/meterpreter/extensions/extapi/wmi/wmi.rb +75 -0
  186. data/lib/rex/post/meterpreter/extensions/incognito/incognito.rb +70 -71
  187. data/lib/rex/post/meterpreter/extensions/kiwi/kiwi.rb +361 -0
  188. data/lib/rex/post/meterpreter/extensions/kiwi/tlv.rb +76 -0
  189. data/lib/rex/post/meterpreter/extensions/lanattacks/dhcp/dhcp.rb +78 -0
  190. data/lib/rex/post/meterpreter/extensions/lanattacks/lanattacks.rb +22 -78
  191. data/lib/rex/post/meterpreter/extensions/lanattacks/tftp/tftp.rb +49 -0
  192. data/lib/rex/post/meterpreter/extensions/lanattacks/tlv.rb +4 -4
  193. data/lib/rex/post/meterpreter/extensions/mimikatz/mimikatz.rb +128 -0
  194. data/lib/rex/post/meterpreter/extensions/mimikatz/tlv.rb +16 -0
  195. data/lib/rex/post/meterpreter/extensions/networkpug/networkpug.rb +38 -39
  196. data/lib/rex/post/meterpreter/extensions/networkpug/tlv.rb +1 -1
  197. data/lib/rex/post/meterpreter/extensions/priv/fs.rb +95 -96
  198. data/lib/rex/post/meterpreter/extensions/priv/passwd.rb +39 -40
  199. data/lib/rex/post/meterpreter/extensions/priv/priv.rb +80 -85
  200. data/lib/rex/post/meterpreter/extensions/sniffer/sniffer.rb +94 -95
  201. data/lib/rex/post/meterpreter/extensions/stdapi/constants.rb +207 -147
  202. data/lib/rex/post/meterpreter/extensions/stdapi/fs/dir.rb +258 -259
  203. data/lib/rex/post/meterpreter/extensions/stdapi/fs/file.rb +366 -301
  204. data/lib/rex/post/meterpreter/extensions/stdapi/fs/file_stat.rb +72 -73
  205. data/lib/rex/post/meterpreter/extensions/stdapi/fs/io.rb +24 -25
  206. data/lib/rex/post/meterpreter/extensions/stdapi/net/arp.rb +59 -0
  207. data/lib/rex/post/meterpreter/extensions/stdapi/net/config.rb +227 -149
  208. data/lib/rex/post/meterpreter/extensions/stdapi/net/interface.rb +107 -108
  209. data/lib/rex/post/meterpreter/extensions/stdapi/net/netstat.rb +97 -0
  210. data/lib/rex/post/meterpreter/extensions/stdapi/net/resolve.rb +106 -0
  211. data/lib/rex/post/meterpreter/extensions/stdapi/net/route.rb +41 -42
  212. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket.rb +102 -101
  213. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/tcp_client_channel.rb +151 -152
  214. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/tcp_server_channel.rb +142 -142
  215. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/udp_channel.rb +185 -185
  216. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/api_constants.rb +38118 -38117
  217. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/buffer_item.rb +7 -7
  218. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_advapi32.rb +2086 -2084
  219. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_crypt32.rb +15 -15
  220. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_iphlpapi.rb +80 -80
  221. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_kernel32.rb +3835 -3833
  222. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_netapi32.rb +84 -28
  223. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_ntdll.rb +151 -137
  224. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_shell32.rb +15 -6
  225. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_user32.rb +3155 -3155
  226. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_version.rb +41 -0
  227. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_wlanapi.rb +70 -70
  228. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_wldap32.rb +128 -0
  229. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_ws2_32.rb +596 -596
  230. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll.rb +310 -301
  231. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_function.rb +71 -61
  232. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_helper.rb +100 -100
  233. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_wrapper.rb +14 -14
  234. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/mock_magic.rb +488 -488
  235. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/multicall.rb +273 -264
  236. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/platform_util.rb +5 -5
  237. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/railgun.rb +240 -238
  238. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/tlv.rb +17 -15
  239. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/type/pointer_util.rb +61 -61
  240. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/util.rb +654 -635
  241. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/win_const_manager.rb +49 -49
  242. data/lib/rex/post/meterpreter/extensions/stdapi/stdapi.rb +103 -102
  243. data/lib/rex/post/meterpreter/extensions/stdapi/sys/config.rb +98 -68
  244. data/lib/rex/post/meterpreter/extensions/stdapi/sys/event_log.rb +165 -166
  245. data/lib/rex/post/meterpreter/extensions/stdapi/sys/event_log_subsystem/event_record.rb +16 -17
  246. data/lib/rex/post/meterpreter/extensions/stdapi/sys/power.rb +34 -36
  247. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process.rb +363 -364
  248. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/image.rb +102 -103
  249. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/io.rb +28 -29
  250. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/memory.rb +303 -304
  251. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/thread.rb +113 -114
  252. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry.rb +260 -261
  253. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_key.rb +165 -166
  254. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_value.rb +69 -70
  255. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/remote_registry_key.rb +160 -161
  256. data/lib/rex/post/meterpreter/extensions/stdapi/sys/thread.rb +143 -144
  257. data/lib/rex/post/meterpreter/extensions/stdapi/tlv.rb +29 -12
  258. data/lib/rex/post/meterpreter/extensions/stdapi/ui.rb +230 -231
  259. data/lib/rex/post/meterpreter/extensions/stdapi/webcam/webcam.rb +181 -44
  260. data/lib/rex/post/meterpreter/inbound_packet_handler.rb +12 -13
  261. data/lib/rex/post/meterpreter/object_aliases.rb +56 -57
  262. data/lib/rex/post/meterpreter/packet.rb +591 -592
  263. data/lib/rex/post/meterpreter/packet_dispatcher.rb +506 -496
  264. data/lib/rex/post/meterpreter/packet_parser.rb +72 -73
  265. data/lib/rex/post/meterpreter/packet_response_waiter.rb +56 -57
  266. data/lib/rex/post/meterpreter/ui/console.rb +112 -112
  267. data/lib/rex/post/meterpreter/ui/console/command_dispatcher.rb +53 -53
  268. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/core.rb +911 -854
  269. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/espia.rb +86 -86
  270. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/extapi.rb +65 -0
  271. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/extapi/adsi.rb +198 -0
  272. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/extapi/clipboard.rb +444 -0
  273. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/extapi/service.rb +199 -0
  274. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/extapi/window.rb +118 -0
  275. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/extapi/wmi.rb +108 -0
  276. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/incognito.rb +220 -220
  277. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/kiwi.rb +509 -0
  278. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/lanattacks.rb +60 -0
  279. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/lanattacks/dhcp.rb +254 -0
  280. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/lanattacks/tftp.rb +159 -0
  281. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/mimikatz.rb +182 -0
  282. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/networkpug.rb +173 -173
  283. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv.rb +40 -40
  284. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/elevate.rb +75 -77
  285. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/passwd.rb +30 -30
  286. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/timestomp.rb +105 -105
  287. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/sniffer.rb +182 -182
  288. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi.rb +37 -37
  289. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/fs.rb +504 -482
  290. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/net.rb +401 -330
  291. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/sys.rb +883 -581
  292. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/ui.rb +296 -299
  293. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/webcam.rb +320 -153
  294. data/lib/rex/post/meterpreter/ui/console/interactive_channel.rb +78 -78
  295. data/lib/rex/post/permission.rb +0 -1
  296. data/lib/rex/post/process.rb +39 -40
  297. data/lib/rex/post/thread.rb +41 -42
  298. data/lib/rex/post/ui.rb +35 -36
  299. data/lib/rex/proto/addp.rb +218 -0
  300. data/lib/rex/proto/dcerpc/client.rb +344 -344
  301. data/lib/rex/proto/dcerpc/exceptions.rb +128 -128
  302. data/lib/rex/proto/dcerpc/handle.rb +32 -32
  303. data/lib/rex/proto/dcerpc/ndr.rb +56 -56
  304. data/lib/rex/proto/dcerpc/packet.rb +249 -245
  305. data/lib/rex/proto/dcerpc/response.rb +170 -170
  306. data/lib/rex/proto/dcerpc/uuid.rb +65 -65
  307. data/lib/rex/proto/dcerpc/wdscp.rb +3 -0
  308. data/lib/rex/proto/dcerpc/wdscp/constants.rb +89 -0
  309. data/lib/rex/proto/dcerpc/wdscp/packet.rb +94 -0
  310. data/lib/rex/proto/dhcp.rb +0 -1
  311. data/lib/rex/proto/dhcp/constants.rb +0 -1
  312. data/lib/rex/proto/dhcp/server.rb +303 -304
  313. data/lib/rex/proto/drda/constants.rb +1 -1
  314. data/lib/rex/proto/drda/packet.rb +186 -186
  315. data/lib/rex/proto/drda/utils.rb +104 -104
  316. data/lib/rex/proto/http.rb +1 -0
  317. data/lib/rex/proto/http/client.rb +692 -820
  318. data/lib/rex/proto/http/client_request.rb +472 -0
  319. data/lib/rex/proto/http/handler.rb +25 -25
  320. data/lib/rex/proto/http/handler/erb.rb +104 -104
  321. data/lib/rex/proto/http/handler/proc.rb +37 -37
  322. data/lib/rex/proto/http/header.rb +149 -149
  323. data/lib/rex/proto/http/packet.rb +388 -382
  324. data/lib/rex/proto/http/request.rb +332 -335
  325. data/lib/rex/proto/http/response.rb +132 -72
  326. data/lib/rex/proto/http/server.rb +348 -338
  327. data/lib/rex/proto/iax2/call.rb +310 -310
  328. data/lib/rex/proto/iax2/client.rb +197 -197
  329. data/lib/rex/proto/iax2/codecs/alaw.rb +4 -4
  330. data/lib/rex/proto/iax2/codecs/mulaw.rb +4 -4
  331. data/lib/rex/proto/ipmi.rb +57 -0
  332. data/lib/rex/proto/ipmi/channel_auth_reply.rb +88 -0
  333. data/lib/rex/proto/ipmi/open_session_reply.rb +35 -0
  334. data/lib/rex/proto/ipmi/rakp2.rb +35 -0
  335. data/lib/rex/proto/ipmi/utils.rb +125 -0
  336. data/lib/rex/proto/natpmp.rb +1 -5
  337. data/lib/rex/proto/natpmp/constants.rb +4 -4
  338. data/lib/rex/proto/natpmp/packet.rb +25 -25
  339. data/lib/rex/proto/ntlm/base.rb +271 -271
  340. data/lib/rex/proto/ntlm/constants.rb +61 -61
  341. data/lib/rex/proto/ntlm/crypt.rb +348 -352
  342. data/lib/rex/proto/ntlm/exceptions.rb +3 -3
  343. data/lib/rex/proto/ntlm/message.rb +468 -471
  344. data/lib/rex/proto/ntlm/utils.rb +746 -746
  345. data/lib/rex/proto/pjl.rb +30 -0
  346. data/lib/rex/proto/pjl/client.rb +162 -0
  347. data/lib/rex/proto/proxy/socks4a.rb +440 -440
  348. data/lib/rex/proto/rfb.rb +1 -8
  349. data/lib/rex/proto/rfb/cipher.rb +46 -49
  350. data/lib/rex/proto/rfb/client.rb +179 -182
  351. data/lib/rex/proto/rfb/constants.rb +18 -21
  352. data/lib/rex/proto/smb/client.rb +1954 -1843
  353. data/lib/rex/proto/smb/constants.rb +533 -516
  354. data/lib/rex/proto/smb/crypt.rb +21 -21
  355. data/lib/rex/proto/smb/evasions.rb +43 -43
  356. data/lib/rex/proto/smb/exceptions.rb +791 -791
  357. data/lib/rex/proto/smb/simpleclient.rb +142 -286
  358. data/lib/rex/proto/smb/simpleclient/open_file.rb +106 -0
  359. data/lib/rex/proto/smb/simpleclient/open_pipe.rb +57 -0
  360. data/lib/rex/proto/smb/utils.rb +81 -81
  361. data/lib/rex/proto/sunrpc/client.rb +158 -158
  362. data/lib/rex/proto/tftp.rb +0 -1
  363. data/lib/rex/proto/tftp/client.rb +289 -289
  364. data/lib/rex/proto/tftp/constants.rb +9 -10
  365. data/lib/rex/proto/tftp/server.rb +466 -467
  366. data/lib/rex/random_identifier_generator.rb +176 -0
  367. data/lib/rex/registry.rb +1 -1
  368. data/lib/rex/registry/hive.rb +88 -88
  369. data/lib/rex/registry/lfkey.rb +25 -25
  370. data/lib/rex/registry/nodekey.rb +30 -30
  371. data/lib/rex/registry/regf.rb +10 -10
  372. data/lib/rex/registry/valuekey.rb +43 -43
  373. data/lib/rex/registry/valuelist.rb +13 -13
  374. data/lib/rex/ropbuilder/rop.rb +254 -253
  375. data/lib/rex/script.rb +21 -22
  376. data/lib/rex/script/base.rb +51 -50
  377. data/lib/rex/script/meterpreter.rb +2 -2
  378. data/lib/rex/service.rb +24 -24
  379. data/lib/rex/service_manager.rb +132 -132
  380. data/lib/rex/services/local_relay.rb +398 -398
  381. data/lib/rex/socket.rb +758 -763
  382. data/lib/rex/socket/comm.rb +95 -95
  383. data/lib/rex/socket/comm/local.rb +507 -440
  384. data/lib/rex/socket/ip.rb +118 -118
  385. data/lib/rex/socket/parameters.rb +351 -350
  386. data/lib/rex/socket/range_walker.rb +445 -368
  387. data/lib/rex/socket/ssl_tcp.rb +323 -317
  388. data/lib/rex/socket/ssl_tcp_server.rb +173 -158
  389. data/lib/rex/socket/subnet_walker.rb +48 -48
  390. data/lib/rex/socket/switch_board.rb +259 -259
  391. data/lib/rex/socket/tcp.rb +58 -56
  392. data/lib/rex/socket/tcp_server.rb +42 -42
  393. data/lib/rex/socket/udp.rb +152 -152
  394. data/lib/rex/sslscan/result.rb +200 -0
  395. data/lib/rex/sslscan/scanner.rb +205 -0
  396. data/lib/rex/struct2.rb +0 -1
  397. data/lib/rex/struct2/c_struct.rb +162 -163
  398. data/lib/rex/struct2/c_struct_template.rb +21 -22
  399. data/lib/rex/struct2/constant.rb +6 -7
  400. data/lib/rex/struct2/element.rb +30 -31
  401. data/lib/rex/struct2/generic.rb +60 -61
  402. data/lib/rex/struct2/restraint.rb +40 -41
  403. data/lib/rex/struct2/s_string.rb +60 -61
  404. data/lib/rex/struct2/s_struct.rb +97 -98
  405. data/lib/rex/sync.rb +0 -1
  406. data/lib/rex/sync/event.rb +62 -72
  407. data/lib/rex/sync/read_write_lock.rb +149 -149
  408. data/lib/rex/sync/ref.rb +42 -42
  409. data/lib/rex/sync/thread_safe.rb +59 -59
  410. data/lib/rex/text.rb +1803 -1315
  411. data/lib/rex/thread_factory.rb +25 -25
  412. data/lib/rex/time.rb +44 -44
  413. data/lib/rex/transformer.rb +91 -91
  414. data/lib/rex/ui/interactive.rb +265 -265
  415. data/lib/rex/ui/output.rb +66 -60
  416. data/lib/rex/ui/progress_tracker.rb +79 -79
  417. data/lib/rex/ui/subscriber.rb +144 -134
  418. data/lib/rex/ui/text/color.rb +76 -76
  419. data/lib/rex/ui/text/dispatcher_shell.rb +512 -505
  420. data/lib/rex/ui/text/input.rb +96 -96
  421. data/lib/rex/ui/text/input/buffer.rb +58 -58
  422. data/lib/rex/ui/text/input/readline.rb +114 -114
  423. data/lib/rex/ui/text/input/socket.rb +77 -77
  424. data/lib/rex/ui/text/input/stdio.rb +24 -24
  425. data/lib/rex/ui/text/irb_shell.rb +45 -41
  426. data/lib/rex/ui/text/output.rb +64 -60
  427. data/lib/rex/ui/text/output/buffer.rb +42 -42
  428. data/lib/rex/ui/text/output/buffer/stdout.rb +25 -0
  429. data/lib/rex/ui/text/output/file.rb +24 -24
  430. data/lib/rex/ui/text/output/socket.rb +24 -24
  431. data/lib/rex/ui/text/output/stdio.rb +29 -29
  432. data/lib/rex/ui/text/output/tee.rb +36 -36
  433. data/lib/rex/ui/text/progress_tracker.rb +37 -37
  434. data/lib/rex/ui/text/shell.rb +371 -361
  435. data/lib/rex/ui/text/table.rb +320 -284
  436. data/lib/rex/zip.rb +0 -1
  437. data/lib/rex/zip/archive.rb +115 -94
  438. data/lib/rex/zip/blocks.rb +101 -100
  439. data/lib/rex/zip/entry.rb +108 -99
  440. data/lib/rex/zip/jar.rb +261 -206
  441. data/lib/rex/zip/samples/comment.rb +1 -2
  442. data/lib/rex/zip/samples/mkwar.rb +12 -13
  443. data/lib/rex/zip/samples/mkzip.rb +1 -2
  444. data/lib/rex/zip/samples/recursive.rb +29 -30
  445. metadata +424 -446
  446. data/lib/rex/arch/sparc.rb.ut.rb +0 -19
  447. data/lib/rex/arch/x86.rb.ut.rb +0 -94
  448. data/lib/rex/assembly/nasm.rb.ut.rb +0 -23
  449. data/lib/rex/encoder/ndr.rb.ut.rb +0 -45
  450. data/lib/rex/encoder/xdr.rb.ut.rb +0 -30
  451. data/lib/rex/encoders/xor_dword_additive.rb.ut.rb +0 -13
  452. data/lib/rex/encoding/xor.rb.ts.rb +0 -15
  453. data/lib/rex/encoding/xor/byte.rb.ut.rb +0 -22
  454. data/lib/rex/encoding/xor/dword.rb.ut.rb +0 -16
  455. data/lib/rex/encoding/xor/dword_additive.rb.ut.rb +0 -16
  456. data/lib/rex/encoding/xor/generic.rb.ut.rb +0 -121
  457. data/lib/rex/encoding/xor/word.rb.ut.rb +0 -14
  458. data/lib/rex/exceptions.rb.ut.rb +0 -45
  459. data/lib/rex/exploitation/egghunter.rb.ut.rb +0 -28
  460. data/lib/rex/exploitation/javascriptosdetect.js +0 -1014
  461. data/lib/rex/exploitation/javascriptosdetect.rb +0 -43
  462. data/lib/rex/exploitation/omelet.rb.ut.rb +0 -27
  463. data/lib/rex/exploitation/opcodedb.rb.ut.rb +0 -280
  464. data/lib/rex/exploitation/seh.rb.ut.rb +0 -20
  465. data/lib/rex/file.rb.ut.rb +0 -17
  466. data/lib/rex/io/ring_buffer.rb.ut.rb +0 -135
  467. data/lib/rex/nop/opty2.rb.ut.rb +0 -24
  468. data/lib/rex/parser/arguments.rb.ut.rb +0 -68
  469. data/lib/rex/parser/ini.rb.ut.rb +0 -30
  470. data/lib/rex/post/meterpreter/extensions/stdapi/railgun.rb.ts.rb +0 -18
  471. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/api_constants.rb.ut.rb +0 -39
  472. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/buffer_item.rb.ut.rb +0 -37
  473. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll.rb.ut.rb +0 -52
  474. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_function.rb.ut.rb +0 -43
  475. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_helper.rb.ut.rb +0 -128
  476. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_wrapper.rb.ut.rb +0 -64
  477. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/platform_util.rb.ut.rb +0 -29
  478. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/railgun.rb.ut.rb +0 -155
  479. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/type/pointer_util.rb.ut.rb +0 -128
  480. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/win_const_manager.rb.ut.rb +0 -124
  481. data/lib/rex/proto.rb.ts.rb +0 -9
  482. data/lib/rex/proto/dcerpc.rb.ts.rb +0 -10
  483. data/lib/rex/proto/dcerpc/client.rb.ut.rb +0 -492
  484. data/lib/rex/proto/dcerpc/handle.rb.ut.rb +0 -86
  485. data/lib/rex/proto/dcerpc/ndr.rb.ut.rb +0 -42
  486. data/lib/rex/proto/dcerpc/packet.rb.ut.rb +0 -57
  487. data/lib/rex/proto/dcerpc/response.rb.ut.rb +0 -16
  488. data/lib/rex/proto/dcerpc/uuid.rb.ut.rb +0 -47
  489. data/lib/rex/proto/drda.rb.ts.rb +0 -18
  490. data/lib/rex/proto/drda/constants.rb.ut.rb +0 -24
  491. data/lib/rex/proto/drda/packet.rb.ut.rb +0 -110
  492. data/lib/rex/proto/drda/utils.rb.ut.rb +0 -85
  493. data/lib/rex/proto/http.rb.ts.rb +0 -13
  494. data/lib/rex/proto/http/client.rb.ut.rb +0 -96
  495. data/lib/rex/proto/http/handler/erb.rb.ut.rb +0 -22
  496. data/lib/rex/proto/http/handler/erb.rb.ut.rb.rhtml +0 -1
  497. data/lib/rex/proto/http/handler/proc.rb.ut.rb +0 -25
  498. data/lib/rex/proto/http/header.rb.ut.rb +0 -47
  499. data/lib/rex/proto/http/packet.rb.ut.rb +0 -166
  500. data/lib/rex/proto/http/request.rb.ut.rb +0 -215
  501. data/lib/rex/proto/http/response.rb.ut.rb +0 -150
  502. data/lib/rex/proto/http/server.rb.ut.rb +0 -80
  503. data/lib/rex/proto/ntlm.rb.ut.rb +0 -181
  504. data/lib/rex/proto/rfb.rb.ut.rb +0 -40
  505. data/lib/rex/proto/smb.rb.ts.rb +0 -9
  506. data/lib/rex/proto/smb/client.rb.ut.rb +0 -224
  507. data/lib/rex/proto/smb/constants.rb.ut.rb +0 -19
  508. data/lib/rex/proto/smb/simpleclient.rb.ut.rb +0 -129
  509. data/lib/rex/proto/smb/utils.rb.ut.rb +0 -21
  510. data/lib/rex/proto/tftp/server.rb.ut.rb +0 -29
  511. data/lib/rex/service_manager.rb.ut.rb +0 -33
  512. data/lib/rex/socket.rb.ut.rb +0 -108
  513. data/lib/rex/socket/comm/local.rb.ut.rb +0 -76
  514. data/lib/rex/socket/parameters.rb.ut.rb +0 -52
  515. data/lib/rex/socket/range_walker.rb.ut.rb +0 -56
  516. data/lib/rex/socket/ssl_tcp.rb.ut.rb +0 -40
  517. data/lib/rex/socket/ssl_tcp_server.rb.ut.rb +0 -62
  518. data/lib/rex/socket/subnet_walker.rb.ut.rb +0 -29
  519. data/lib/rex/socket/switch_board.rb.ut.rb +0 -53
  520. data/lib/rex/socket/tcp.rb.ut.rb +0 -65
  521. data/lib/rex/socket/tcp_server.rb.ut.rb +0 -45
  522. data/lib/rex/socket/udp.rb.ut.rb +0 -45
  523. data/lib/rex/test.rb +0 -36
  524. data/lib/rex/text.rb.ut.rb +0 -193
  525. data/lib/rex/transformer.rb.ut.rb +0 -39
  526. data/lib/rex/ui/text/color.rb.ut.rb +0 -19
  527. data/lib/rex/ui/text/progress_tracker.rb.ut.rb +0 -35
  528. data/lib/rex/ui/text/table.rb.ut.rb +0 -56
@@ -1,4 +1,3 @@
1
- #!/usr/bin/env ruby
2
1
  # -*- coding: binary -*-
3
2
 
4
3
  #
@@ -18,204 +17,204 @@ module Post
18
17
  ###
19
18
  class FileStat
20
19
 
21
- #
22
- # Basic file types.
23
- #
24
- @@ftypes = [
25
- 'fifo', 'characterSpecial', 'directory',
26
- 'blockSpecial', 'file', 'link', 'socket'
27
- ]
28
-
29
- attr_accessor :stathash
30
-
31
- def initialize(buf='')
32
- self.stathash = {}
33
- update(buf) if (buf and not buf.empty?)
34
- end
35
-
36
- def dev
37
- self.stathash['st_dev']
38
- end
39
- def ino
40
- self.stathash['st_ino']
41
- end
42
- def mode
43
- self.stathash['st_mode']
44
- end
45
- def nlink
46
- self.stathash['st_nlink']
47
- end
48
- def uid
49
- self.stathash['st_uid']
50
- end
51
- def gid
52
- self.stathash['st_gid']
53
- end
54
- def rdev
55
- self.stathash['st_rdev']
56
- end
57
- def size
58
- self.stathash['st_size']
59
- end
60
- def blksize
61
- self.stathash['st_blksize']
62
- end
63
- def blocks
64
- self.stathash['st_blocks']
65
- end
66
- def atime
67
- Time.at(self.stathash['st_atime'])
68
- end
69
- def mtime
70
- Time.at(self.stathash['st_mtime'])
71
- end
72
- def ctime
73
- Time.at(self.stathash['st_ctime'])
74
- end
75
-
76
- def update(buf)
77
-
78
- # XXX: This needs to understand more than just 'stat' structures
79
- # Windows can also return _stat32, _stat32i64, _stat64i32, and _stat64 structures
80
-
81
- skeys = %W{st_dev st_ino st_mode st_wtf st_nlink st_uid st_gid st_rdev st_size st_ctime st_atime st_mtime}
82
- svals = buf.unpack("VvvvvvvVVVVV")
83
- skeys.each_index do |i|
84
- self.stathash[ skeys[i] ] = svals[i]
85
- end
86
- end
87
-
88
- #
89
- # S_IFMT 0170000 bitmask for the file type bitfields
90
- # S_IFSOCK 0140000 socket
91
- # S_IFLNK 0120000 symbolic link
92
- # S_IFREG 0100000 regular file
93
- # S_IFBLK 0060000 block device
94
- # S_IFDIR 0040000 directory
95
- # S_IFCHR 0020000 character device
96
- # S_IFIFO 0010000 fifo
97
- #
98
-
99
- # this is my own, just a helper...
100
- def filetype?(mask)
101
- return true if mode & 0170000 == mask
102
- return false
103
- end
104
-
105
- def blockdev?
106
- filetype?(060000)
107
- end
108
- def chardev?
109
- filetype?(020000)
110
- end
111
- def directory?
112
- filetype?(040000)
113
- end
114
- def file?
115
- filetype?(0100000)
116
- end
117
- def pipe?
118
- filetype?(010000) # ??? fifo?
119
- end
120
- def socket?
121
- filetype(0140000)
122
- end
123
- def symlink?
124
- filetype(0120000)
125
- end
126
-
127
- def ftype
128
- return @@ftypes[(mode & 0170000) >> 13].dup
129
- end
130
-
131
- #
132
- # S_ISUID 0004000 set UID bit
133
- # S_ISGID 0002000 set GID bit (see below)
134
- # S_ISVTX 0001000 sticky bit (see below)
135
- # S_IRWXU 00700 mask for file owner permissions
136
- # S_IRUSR 00400 owner has read permission
137
- # S_IWUSR 00200 owner has write permission
138
- # S_IXUSR 00100 owner has execute permission
139
- # S_IRWXG 00070 mask for group permissions
140
- # S_IRGRP 00040 group has read permission
141
- # S_IWGRP 00020 group has write permission
142
- # S_IXGRP 00010 group has execute permission
143
- # S_IRWXO 00007 mask for permissions for others (not in group)
144
- # S_IROTH 00004 others have read permission
145
- # S_IWOTH 00002 others have write permisson
146
- # S_IXOTH 00001 others have execute permission
147
- #
148
-
149
- def perm?(mask)
150
- return true if mode & mask == mask
151
- return false
152
- end
153
-
154
- def setgid?
155
- perm?(02000)
156
- end
157
- def setuid?
158
- perm?(04000)
159
- end
160
- def sticky?
161
- perm?(01000)
162
- end
163
-
164
- def executable?
165
- raise NotImplementedError
166
- end
167
- def executable_real?
168
- raise NotImplementedError
169
- end
170
- def grpowned?
171
- raise NotImplementedError
172
- end
173
- def owned?
174
- raise NotImplementedError
175
- end
176
- def readable?
177
- raise NotImplementedError
178
- end
179
- def readable_real?
180
- raise NotImplementedError
181
- end
182
- def writeable?
183
- raise NotImplementedError
184
- end
185
- def writeable_real?
186
- raise NotImplementedError
187
- end
188
-
189
- #
190
- # Return pretty information about a file's permissions.
191
- #
192
- def prettymode
193
- m = mode
194
- om = '%04o' % m
195
- perms = ''
196
-
197
- 3.times {
198
- perms = ((m & 01) == 01 ? 'x' : '-') + perms
199
- perms = ((m & 02) == 02 ? 'w' : '-') + perms
200
- perms = ((m & 04) == 04 ? 'r' : '-') + perms
201
- m >>= 3
202
- }
203
-
204
- return "#{om}/#{perms}"
205
- end
206
-
207
- #
208
- # Return pretty information about a file.
209
- #
210
- def pretty
211
- " Size: #{size} Blocks: #{blocks} IO Block: #{blksize} Type: #{rdev}\n"\
212
- "Device: #{dev} Inode: #{ino} Links: #{nlink}\n"\
213
- " Mode: #{prettymode}\n"\
214
- " Uid: #{uid} Gid: #{gid}\n"\
215
- "Access: #{atime}\n"\
216
- "Modify: #{mtime}\n"\
217
- "Change: #{ctime}\n"
218
- end
20
+ #
21
+ # Basic file types.
22
+ #
23
+ @@ftypes = [
24
+ 'fifo', 'characterSpecial', 'directory',
25
+ 'blockSpecial', 'file', 'link', 'socket'
26
+ ]
27
+
28
+ attr_accessor :stathash
29
+
30
+ def initialize(buf='')
31
+ self.stathash = {}
32
+ update(buf) if (buf and not buf.empty?)
33
+ end
34
+
35
+ def dev
36
+ self.stathash['st_dev']
37
+ end
38
+ def ino
39
+ self.stathash['st_ino']
40
+ end
41
+ def mode
42
+ self.stathash['st_mode']
43
+ end
44
+ def nlink
45
+ self.stathash['st_nlink']
46
+ end
47
+ def uid
48
+ self.stathash['st_uid']
49
+ end
50
+ def gid
51
+ self.stathash['st_gid']
52
+ end
53
+ def rdev
54
+ self.stathash['st_rdev']
55
+ end
56
+ def size
57
+ self.stathash['st_size']
58
+ end
59
+ def blksize
60
+ self.stathash['st_blksize']
61
+ end
62
+ def blocks
63
+ self.stathash['st_blocks']
64
+ end
65
+ def atime
66
+ Time.at(self.stathash['st_atime'])
67
+ end
68
+ def mtime
69
+ Time.at(self.stathash['st_mtime'])
70
+ end
71
+ def ctime
72
+ Time.at(self.stathash['st_ctime'])
73
+ end
74
+
75
+ def update(buf)
76
+
77
+ # XXX: This needs to understand more than just 'stat' structures
78
+ # Windows can also return _stat32, _stat32i64, _stat64i32, and _stat64 structures
79
+
80
+ skeys = %W{st_dev st_ino st_mode st_wtf st_nlink st_uid st_gid st_rdev st_size st_ctime st_atime st_mtime}
81
+ svals = buf.unpack("VvvvvvvVVVVV")
82
+ skeys.each_index do |i|
83
+ self.stathash[ skeys[i] ] = svals[i]
84
+ end
85
+ end
86
+
87
+ #
88
+ # S_IFMT 0170000 bitmask for the file type bitfields
89
+ # S_IFSOCK 0140000 socket
90
+ # S_IFLNK 0120000 symbolic link
91
+ # S_IFREG 0100000 regular file
92
+ # S_IFBLK 0060000 block device
93
+ # S_IFDIR 0040000 directory
94
+ # S_IFCHR 0020000 character device
95
+ # S_IFIFO 0010000 fifo
96
+ #
97
+
98
+ # this is my own, just a helper...
99
+ def filetype?(mask)
100
+ return true if mode & 0170000 == mask
101
+ return false
102
+ end
103
+
104
+ def blockdev?
105
+ filetype?(060000)
106
+ end
107
+ def chardev?
108
+ filetype?(020000)
109
+ end
110
+ def directory?
111
+ filetype?(040000)
112
+ end
113
+ def file?
114
+ filetype?(0100000)
115
+ end
116
+ def pipe?
117
+ filetype?(010000) # ??? fifo?
118
+ end
119
+ def socket?
120
+ filetype(0140000)
121
+ end
122
+ def symlink?
123
+ filetype(0120000)
124
+ end
125
+
126
+ def ftype
127
+ return @@ftypes[(mode & 0170000) >> 13].dup
128
+ end
129
+
130
+ #
131
+ # S_ISUID 0004000 set UID bit
132
+ # S_ISGID 0002000 set GID bit (see below)
133
+ # S_ISVTX 0001000 sticky bit (see below)
134
+ # S_IRWXU 00700 mask for file owner permissions
135
+ # S_IRUSR 00400 owner has read permission
136
+ # S_IWUSR 00200 owner has write permission
137
+ # S_IXUSR 00100 owner has execute permission
138
+ # S_IRWXG 00070 mask for group permissions
139
+ # S_IRGRP 00040 group has read permission
140
+ # S_IWGRP 00020 group has write permission
141
+ # S_IXGRP 00010 group has execute permission
142
+ # S_IRWXO 00007 mask for permissions for others (not in group)
143
+ # S_IROTH 00004 others have read permission
144
+ # S_IWOTH 00002 others have write permisson
145
+ # S_IXOTH 00001 others have execute permission
146
+ #
147
+
148
+ def perm?(mask)
149
+ return true if mode & mask == mask
150
+ return false
151
+ end
152
+
153
+ def setgid?
154
+ perm?(02000)
155
+ end
156
+ def setuid?
157
+ perm?(04000)
158
+ end
159
+ def sticky?
160
+ perm?(01000)
161
+ end
162
+
163
+ def executable?
164
+ raise NotImplementedError
165
+ end
166
+ def executable_real?
167
+ raise NotImplementedError
168
+ end
169
+ def grpowned?
170
+ raise NotImplementedError
171
+ end
172
+ def owned?
173
+ raise NotImplementedError
174
+ end
175
+ def readable?
176
+ raise NotImplementedError
177
+ end
178
+ def readable_real?
179
+ raise NotImplementedError
180
+ end
181
+ def writeable?
182
+ raise NotImplementedError
183
+ end
184
+ def writeable_real?
185
+ raise NotImplementedError
186
+ end
187
+
188
+ #
189
+ # Return pretty information about a file's permissions.
190
+ #
191
+ def prettymode
192
+ m = mode
193
+ om = '%04o' % m
194
+ perms = ''
195
+
196
+ 3.times {
197
+ perms = ((m & 01) == 01 ? 'x' : '-') + perms
198
+ perms = ((m & 02) == 02 ? 'w' : '-') + perms
199
+ perms = ((m & 04) == 04 ? 'r' : '-') + perms
200
+ m >>= 3
201
+ }
202
+
203
+ return "#{om}/#{perms}"
204
+ end
205
+
206
+ #
207
+ # Return pretty information about a file.
208
+ #
209
+ def pretty
210
+ " Size: #{size} Blocks: #{blocks} IO Block: #{blksize} Type: #{rdev}\n"\
211
+ "Device: #{dev} Inode: #{ino} Links: #{nlink}\n"\
212
+ " Mode: #{prettymode}\n"\
213
+ " Uid: #{uid} Gid: #{gid}\n"\
214
+ "Access: #{atime}\n"\
215
+ "Modify: #{mtime}\n"\
216
+ "Change: #{ctime}\n"
217
+ end
219
218
 
220
219
  end
221
220
  end; end # Post/Rex
@@ -1,4 +1,3 @@
1
- #!/usr/bin/env ruby
2
1
  # -*- coding: binary -*-
3
2
 
4
3
  module Rex
@@ -10,173 +9,173 @@ module Post
10
9
  #
11
10
  ##
12
11
  class IO
13
- protected
14
- attr_accessor :filed, :mode
15
- public
16
-
17
- ##
18
- #
19
- # Conditionals
20
- #
21
- ##
22
-
23
- def eof?
24
- return eof
25
- end
26
-
27
- def closed?
28
- raise NotImplementedError
29
- end
30
-
31
- def tty?
32
- return isatty
33
- end
34
-
35
- ##
36
- #
37
- # I/O operations
38
- #
39
- ##
40
-
41
- def binmode
42
- raise NotImplementedError
43
- end
44
-
45
- def close
46
- raise NotImplementedError
47
- end
48
-
49
- def close_read
50
- raise NotImplementedError
51
- end
52
-
53
- def close_write
54
- raise NotImplementedError
55
- end
56
-
57
- def each(sep = $/, &block)
58
- raise NotImplementedError
59
- end
60
-
61
- def each_line(sep = $/, &block)
62
- raise NotImplementedError
63
- end
64
-
65
- def each_byte(&block)
66
- raise NotImplementedError
67
- end
68
-
69
- def eof
70
- raise NotImplementedError
71
- end
72
-
73
- def fcntl(cmd, arg)
74
- raise NotImplementedError
75
- end
76
-
77
- def flush
78
- raise NotImplementedError
79
- end
80
-
81
- def fsync
82
- raise NotImplementedError
83
- end
84
-
85
- def getc
86
- raise NotImplementedError
87
- end
88
-
89
- def gets(sep = $/)
90
- raise NotImplementedError
91
- end
92
-
93
- def ioctl(cmd, arg)
94
- raise NotImplementedError
95
- end
96
-
97
- def isatty
98
- raise NotImplementedError
99
- end
100
-
101
- def lineno
102
- raise NotImplementedError
103
- end
104
-
105
- def pos
106
- raise NotImplementedError
107
- end
108
-
109
- def print
110
- raise NotImplementedError
111
- end
112
-
113
- def printf(fmt, *args)
114
- raise NotImplementedError
115
- end
116
-
117
- def putc(obj)
118
- raise NotImplementedError
119
- end
120
-
121
- def puts(obj)
122
- raise NotImplementedError
123
- end
124
-
125
- def read(length = nil, buffer = nil)
126
- raise NotImplementedError
127
- end
128
-
129
- def readchar
130
- raise NotImplementedError
131
- end
132
-
133
- def readline(sep = $/)
134
- raise NotImplementedError
135
- end
136
-
137
- def readlines(sep = $/)
138
- raise NotImplementedError
139
- end
140
-
141
- def rewind
142
- raise NotImplementedError
143
- end
144
-
145
- def seek(offset, whence = SEEK_SET)
146
- raise NotImplementedError
147
- end
148
-
149
- def stat
150
- raise NotImplementedError
151
- end
152
-
153
- def sync
154
- raise NotImplementedError
155
- end
156
-
157
- def sysread(length)
158
- raise NotImplementedError
159
- end
160
-
161
- def sysseek(offset, whence = SEEK_SET)
162
- raise NotImplementedError
163
- end
164
-
165
- def syswrite(buf)
166
- raise NotImplementedError
167
- end
168
-
169
- def tell
170
- return pos
171
- end
172
-
173
- def ungetc(val)
174
- raise NotImplementedError
175
- end
176
-
177
- def write(buf)
178
- raise NotImplementedError
179
- end
12
+ protected
13
+ attr_accessor :filed, :mode
14
+ public
15
+
16
+ ##
17
+ #
18
+ # Conditionals
19
+ #
20
+ ##
21
+
22
+ def eof?
23
+ return eof
24
+ end
25
+
26
+ def closed?
27
+ raise NotImplementedError
28
+ end
29
+
30
+ def tty?
31
+ return isatty
32
+ end
33
+
34
+ ##
35
+ #
36
+ # I/O operations
37
+ #
38
+ ##
39
+
40
+ def binmode
41
+ raise NotImplementedError
42
+ end
43
+
44
+ def close
45
+ raise NotImplementedError
46
+ end
47
+
48
+ def close_read
49
+ raise NotImplementedError
50
+ end
51
+
52
+ def close_write
53
+ raise NotImplementedError
54
+ end
55
+
56
+ def each(sep = $/, &block)
57
+ raise NotImplementedError
58
+ end
59
+
60
+ def each_line(sep = $/, &block)
61
+ raise NotImplementedError
62
+ end
63
+
64
+ def each_byte(&block)
65
+ raise NotImplementedError
66
+ end
67
+
68
+ def eof
69
+ raise NotImplementedError
70
+ end
71
+
72
+ def fcntl(cmd, arg)
73
+ raise NotImplementedError
74
+ end
75
+
76
+ def flush
77
+ raise NotImplementedError
78
+ end
79
+
80
+ def fsync
81
+ raise NotImplementedError
82
+ end
83
+
84
+ def getc
85
+ raise NotImplementedError
86
+ end
87
+
88
+ def gets(sep = $/)
89
+ raise NotImplementedError
90
+ end
91
+
92
+ def ioctl(cmd, arg)
93
+ raise NotImplementedError
94
+ end
95
+
96
+ def isatty
97
+ raise NotImplementedError
98
+ end
99
+
100
+ def lineno
101
+ raise NotImplementedError
102
+ end
103
+
104
+ def pos
105
+ raise NotImplementedError
106
+ end
107
+
108
+ def print
109
+ raise NotImplementedError
110
+ end
111
+
112
+ def printf(fmt, *args)
113
+ raise NotImplementedError
114
+ end
115
+
116
+ def putc(obj)
117
+ raise NotImplementedError
118
+ end
119
+
120
+ def puts(obj)
121
+ raise NotImplementedError
122
+ end
123
+
124
+ def read(length = nil, buffer = nil)
125
+ raise NotImplementedError
126
+ end
127
+
128
+ def readchar
129
+ raise NotImplementedError
130
+ end
131
+
132
+ def readline(sep = $/)
133
+ raise NotImplementedError
134
+ end
135
+
136
+ def readlines(sep = $/)
137
+ raise NotImplementedError
138
+ end
139
+
140
+ def rewind
141
+ raise NotImplementedError
142
+ end
143
+
144
+ def seek(offset, whence = SEEK_SET)
145
+ raise NotImplementedError
146
+ end
147
+
148
+ def stat
149
+ raise NotImplementedError
150
+ end
151
+
152
+ def sync
153
+ raise NotImplementedError
154
+ end
155
+
156
+ def sysread(length)
157
+ raise NotImplementedError
158
+ end
159
+
160
+ def sysseek(offset, whence = SEEK_SET)
161
+ raise NotImplementedError
162
+ end
163
+
164
+ def syswrite(buf)
165
+ raise NotImplementedError
166
+ end
167
+
168
+ def tell
169
+ return pos
170
+ end
171
+
172
+ def ungetc(val)
173
+ raise NotImplementedError
174
+ end
175
+
176
+ def write(buf)
177
+ raise NotImplementedError
178
+ end
180
179
 
181
180
  end
182
181