librex 0.0.17 → 0.0.18

Sign up to get free protection for your applications and to get access to all the features.
Files changed (435) hide show
  1. data/README.markdown +1 -1
  2. metadata +3 -436
  3. data/lib/rex/LICENSE +0 -29
  4. data/lib/rex/arch.rb +0 -103
  5. data/lib/rex/arch/sparc.rb +0 -75
  6. data/lib/rex/arch/sparc.rb.ut.rb +0 -18
  7. data/lib/rex/arch/x86.rb +0 -513
  8. data/lib/rex/arch/x86.rb.ut.rb +0 -93
  9. data/lib/rex/assembly/nasm.rb +0 -104
  10. data/lib/rex/assembly/nasm.rb.ut.rb +0 -22
  11. data/lib/rex/codepage.map +0 -104
  12. data/lib/rex/compat.rb +0 -311
  13. data/lib/rex/constants.rb +0 -113
  14. data/lib/rex/elfparsey.rb +0 -11
  15. data/lib/rex/elfparsey/elf.rb +0 -123
  16. data/lib/rex/elfparsey/elfbase.rb +0 -258
  17. data/lib/rex/elfparsey/exceptions.rb +0 -27
  18. data/lib/rex/elfscan.rb +0 -12
  19. data/lib/rex/elfscan/scanner.rb +0 -207
  20. data/lib/rex/elfscan/search.rb +0 -46
  21. data/lib/rex/encoder/alpha2.rb +0 -31
  22. data/lib/rex/encoder/alpha2/alpha_mixed.rb +0 -68
  23. data/lib/rex/encoder/alpha2/alpha_upper.rb +0 -79
  24. data/lib/rex/encoder/alpha2/generic.rb +0 -114
  25. data/lib/rex/encoder/alpha2/unicode_mixed.rb +0 -117
  26. data/lib/rex/encoder/alpha2/unicode_upper.rb +0 -129
  27. data/lib/rex/encoder/ndr.rb +0 -89
  28. data/lib/rex/encoder/ndr.rb.ut.rb +0 -44
  29. data/lib/rex/encoder/nonalpha.rb +0 -61
  30. data/lib/rex/encoder/nonupper.rb +0 -64
  31. data/lib/rex/encoder/xdr.rb +0 -106
  32. data/lib/rex/encoder/xdr.rb.ut.rb +0 -29
  33. data/lib/rex/encoder/xor.rb +0 -69
  34. data/lib/rex/encoder/xor/dword.rb +0 -13
  35. data/lib/rex/encoder/xor/dword_additive.rb +0 -13
  36. data/lib/rex/encoders/xor_dword.rb +0 -35
  37. data/lib/rex/encoders/xor_dword_additive.rb +0 -53
  38. data/lib/rex/encoders/xor_dword_additive.rb.ut.rb +0 -12
  39. data/lib/rex/encoding/xor.rb +0 -20
  40. data/lib/rex/encoding/xor.rb.ts.rb +0 -14
  41. data/lib/rex/encoding/xor/byte.rb +0 -15
  42. data/lib/rex/encoding/xor/byte.rb.ut.rb +0 -21
  43. data/lib/rex/encoding/xor/dword.rb +0 -21
  44. data/lib/rex/encoding/xor/dword.rb.ut.rb +0 -15
  45. data/lib/rex/encoding/xor/dword_additive.rb +0 -92
  46. data/lib/rex/encoding/xor/dword_additive.rb.ut.rb +0 -15
  47. data/lib/rex/encoding/xor/exceptions.rb +0 -17
  48. data/lib/rex/encoding/xor/generic.rb +0 -146
  49. data/lib/rex/encoding/xor/generic.rb.ut.rb +0 -120
  50. data/lib/rex/encoding/xor/qword.rb +0 -15
  51. data/lib/rex/encoding/xor/word.rb +0 -21
  52. data/lib/rex/encoding/xor/word.rb.ut.rb +0 -13
  53. data/lib/rex/exceptions.rb +0 -275
  54. data/lib/rex/exceptions.rb.ut.rb +0 -44
  55. data/lib/rex/exploitation/cmdstager.rb +0 -9
  56. data/lib/rex/exploitation/cmdstager/base.rb +0 -175
  57. data/lib/rex/exploitation/cmdstager/debug_asm.rb +0 -142
  58. data/lib/rex/exploitation/cmdstager/debug_write.rb +0 -136
  59. data/lib/rex/exploitation/cmdstager/tftp.rb +0 -63
  60. data/lib/rex/exploitation/cmdstager/vbs.rb +0 -128
  61. data/lib/rex/exploitation/egghunter.rb +0 -277
  62. data/lib/rex/exploitation/egghunter.rb.ut.rb +0 -25
  63. data/lib/rex/exploitation/encryptjs.rb +0 -77
  64. data/lib/rex/exploitation/heaplib.js.b64 +0 -331
  65. data/lib/rex/exploitation/heaplib.rb +0 -94
  66. data/lib/rex/exploitation/javascriptosdetect.rb +0 -897
  67. data/lib/rex/exploitation/obfuscatejs.rb +0 -335
  68. data/lib/rex/exploitation/omelet.rb +0 -320
  69. data/lib/rex/exploitation/omelet.rb.ut.rb +0 -13
  70. data/lib/rex/exploitation/opcodedb.rb +0 -818
  71. data/lib/rex/exploitation/opcodedb.rb.ut.rb +0 -279
  72. data/lib/rex/exploitation/seh.rb +0 -92
  73. data/lib/rex/exploitation/seh.rb.ut.rb +0 -19
  74. data/lib/rex/file.rb +0 -112
  75. data/lib/rex/file.rb.ut.rb +0 -16
  76. data/lib/rex/image_source.rb +0 -12
  77. data/lib/rex/image_source/disk.rb +0 -60
  78. data/lib/rex/image_source/image_source.rb +0 -46
  79. data/lib/rex/image_source/memory.rb +0 -37
  80. data/lib/rex/io/bidirectional_pipe.rb +0 -157
  81. data/lib/rex/io/datagram_abstraction.rb +0 -35
  82. data/lib/rex/io/ring_buffer.rb +0 -364
  83. data/lib/rex/io/stream.rb +0 -319
  84. data/lib/rex/io/stream_abstraction.rb +0 -197
  85. data/lib/rex/io/stream_server.rb +0 -211
  86. data/lib/rex/job_container.rb +0 -187
  87. data/lib/rex/logging.rb +0 -4
  88. data/lib/rex/logging/log_dispatcher.rb +0 -179
  89. data/lib/rex/logging/log_sink.rb +0 -42
  90. data/lib/rex/logging/sinks/flatfile.rb +0 -55
  91. data/lib/rex/logging/sinks/stderr.rb +0 -43
  92. data/lib/rex/machparsey.rb +0 -9
  93. data/lib/rex/machparsey/exceptions.rb +0 -34
  94. data/lib/rex/machparsey/mach.rb +0 -209
  95. data/lib/rex/machparsey/machbase.rb +0 -408
  96. data/lib/rex/machscan.rb +0 -9
  97. data/lib/rex/machscan/scanner.rb +0 -217
  98. data/lib/rex/mime.rb +0 -9
  99. data/lib/rex/mime/header.rb +0 -77
  100. data/lib/rex/mime/message.rb +0 -144
  101. data/lib/rex/mime/part.rb +0 -20
  102. data/lib/rex/nop/opty2.rb +0 -108
  103. data/lib/rex/nop/opty2.rb.ut.rb +0 -23
  104. data/lib/rex/nop/opty2_tables.rb +0 -300
  105. data/lib/rex/ole.rb +0 -205
  106. data/lib/rex/ole/clsid.rb +0 -47
  107. data/lib/rex/ole/difat.rb +0 -141
  108. data/lib/rex/ole/directory.rb +0 -231
  109. data/lib/rex/ole/direntry.rb +0 -240
  110. data/lib/rex/ole/docs/dependencies.txt +0 -8
  111. data/lib/rex/ole/docs/references.txt +0 -1
  112. data/lib/rex/ole/fat.rb +0 -99
  113. data/lib/rex/ole/header.rb +0 -204
  114. data/lib/rex/ole/minifat.rb +0 -77
  115. data/lib/rex/ole/propset.rb +0 -144
  116. data/lib/rex/ole/samples/create_ole.rb +0 -27
  117. data/lib/rex/ole/samples/dir.rb +0 -35
  118. data/lib/rex/ole/samples/dump_stream.rb +0 -34
  119. data/lib/rex/ole/samples/ole_info.rb +0 -23
  120. data/lib/rex/ole/storage.rb +0 -395
  121. data/lib/rex/ole/stream.rb +0 -53
  122. data/lib/rex/ole/substorage.rb +0 -49
  123. data/lib/rex/ole/util.rb +0 -157
  124. data/lib/rex/parser/arguments.rb +0 -97
  125. data/lib/rex/parser/arguments.rb.ut.rb +0 -67
  126. data/lib/rex/parser/ini.rb +0 -185
  127. data/lib/rex/parser/ini.rb.ut.rb +0 -29
  128. data/lib/rex/parser/ip360_aspl_xml.rb +0 -102
  129. data/lib/rex/parser/ip360_xml.rb +0 -97
  130. data/lib/rex/parser/nessus_xml.rb +0 -118
  131. data/lib/rex/parser/netsparker_xml.rb +0 -94
  132. data/lib/rex/parser/nexpose_xml.rb +0 -136
  133. data/lib/rex/parser/nmap_xml.rb +0 -137
  134. data/lib/rex/parser/retina_xml.rb +0 -109
  135. data/lib/rex/payloads.rb +0 -1
  136. data/lib/rex/payloads/win32.rb +0 -2
  137. data/lib/rex/payloads/win32/common.rb +0 -26
  138. data/lib/rex/payloads/win32/kernel.rb +0 -53
  139. data/lib/rex/payloads/win32/kernel/common.rb +0 -54
  140. data/lib/rex/payloads/win32/kernel/migration.rb +0 -12
  141. data/lib/rex/payloads/win32/kernel/recovery.rb +0 -50
  142. data/lib/rex/payloads/win32/kernel/stager.rb +0 -194
  143. data/lib/rex/peparsey.rb +0 -12
  144. data/lib/rex/peparsey/exceptions.rb +0 -32
  145. data/lib/rex/peparsey/pe.rb +0 -212
  146. data/lib/rex/peparsey/pe_memdump.rb +0 -63
  147. data/lib/rex/peparsey/pebase.rb +0 -1680
  148. data/lib/rex/peparsey/section.rb +0 -136
  149. data/lib/rex/pescan.rb +0 -13
  150. data/lib/rex/pescan/analyze.rb +0 -309
  151. data/lib/rex/pescan/scanner.rb +0 -206
  152. data/lib/rex/pescan/search.rb +0 -56
  153. data/lib/rex/platforms.rb +0 -1
  154. data/lib/rex/platforms/windows.rb +0 -51
  155. data/lib/rex/poly.rb +0 -132
  156. data/lib/rex/poly/block.rb +0 -477
  157. data/lib/rex/poly/register.rb +0 -100
  158. data/lib/rex/poly/register/x86.rb +0 -40
  159. data/lib/rex/post.rb +0 -8
  160. data/lib/rex/post/dir.rb +0 -51
  161. data/lib/rex/post/file.rb +0 -172
  162. data/lib/rex/post/file_stat.rb +0 -220
  163. data/lib/rex/post/gen.pl +0 -13
  164. data/lib/rex/post/io.rb +0 -182
  165. data/lib/rex/post/meterpreter.rb +0 -4
  166. data/lib/rex/post/meterpreter/channel.rb +0 -445
  167. data/lib/rex/post/meterpreter/channel_container.rb +0 -54
  168. data/lib/rex/post/meterpreter/channels/pool.rb +0 -160
  169. data/lib/rex/post/meterpreter/channels/pools/file.rb +0 -62
  170. data/lib/rex/post/meterpreter/channels/pools/stream_pool.rb +0 -103
  171. data/lib/rex/post/meterpreter/channels/stream.rb +0 -87
  172. data/lib/rex/post/meterpreter/client.rb +0 -364
  173. data/lib/rex/post/meterpreter/client_core.rb +0 -274
  174. data/lib/rex/post/meterpreter/dependencies.rb +0 -3
  175. data/lib/rex/post/meterpreter/extension.rb +0 -32
  176. data/lib/rex/post/meterpreter/extensions/espia/espia.rb +0 -58
  177. data/lib/rex/post/meterpreter/extensions/espia/tlv.rb +0 -16
  178. data/lib/rex/post/meterpreter/extensions/incognito/incognito.rb +0 -94
  179. data/lib/rex/post/meterpreter/extensions/incognito/tlv.rb +0 -21
  180. data/lib/rex/post/meterpreter/extensions/networkpug/networkpug.rb +0 -57
  181. data/lib/rex/post/meterpreter/extensions/networkpug/tlv.rb +0 -15
  182. data/lib/rex/post/meterpreter/extensions/priv/fs.rb +0 -118
  183. data/lib/rex/post/meterpreter/extensions/priv/passwd.rb +0 -61
  184. data/lib/rex/post/meterpreter/extensions/priv/priv.rb +0 -111
  185. data/lib/rex/post/meterpreter/extensions/priv/tlv.rb +0 -28
  186. data/lib/rex/post/meterpreter/extensions/sniffer/sniffer.rb +0 -101
  187. data/lib/rex/post/meterpreter/extensions/sniffer/tlv.rb +0 -26
  188. data/lib/rex/post/meterpreter/extensions/stdapi/constants.rb +0 -333
  189. data/lib/rex/post/meterpreter/extensions/stdapi/fs/dir.rb +0 -282
  190. data/lib/rex/post/meterpreter/extensions/stdapi/fs/file.rb +0 -266
  191. data/lib/rex/post/meterpreter/extensions/stdapi/fs/file_stat.rb +0 -103
  192. data/lib/rex/post/meterpreter/extensions/stdapi/fs/io.rb +0 -48
  193. data/lib/rex/post/meterpreter/extensions/stdapi/net/config.rb +0 -144
  194. data/lib/rex/post/meterpreter/extensions/stdapi/net/interface.rb +0 -73
  195. data/lib/rex/post/meterpreter/extensions/stdapi/net/route.rb +0 -56
  196. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket.rb +0 -137
  197. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/tcp_client_channel.rb +0 -180
  198. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/tcp_server_channel.rb +0 -167
  199. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/udp_channel.rb +0 -208
  200. data/lib/rex/post/meterpreter/extensions/stdapi/railgun.rb.ts.rb +0 -6
  201. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/api_constants.rb +0 -38106
  202. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/api_constants.rb.ut.rb +0 -31
  203. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/buffer_item.rb +0 -47
  204. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/buffer_item.rb.ut.rb +0 -36
  205. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_advapi32.rb +0 -1818
  206. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_iphlpapi.rb +0 -96
  207. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_kernel32.rb +0 -3848
  208. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_netapi32.rb +0 -26
  209. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_ntdll.rb +0 -153
  210. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_shell32.rb +0 -21
  211. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_user32.rb +0 -3169
  212. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_ws2_32.rb +0 -599
  213. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll.rb +0 -318
  214. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_function.rb +0 -100
  215. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_function.rb.ut.rb +0 -42
  216. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_helper.rb +0 -148
  217. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_helper.rb.ut.rb +0 -127
  218. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/multicall.rb +0 -309
  219. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/railgun.rb +0 -204
  220. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/tlv.rb +0 -51
  221. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/util.rb +0 -630
  222. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/win_const_manager.rb +0 -75
  223. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/win_const_manager.rb.ut.rb +0 -103
  224. data/lib/rex/post/meterpreter/extensions/stdapi/stdapi.rb +0 -149
  225. data/lib/rex/post/meterpreter/extensions/stdapi/sys/config.rb +0 -97
  226. data/lib/rex/post/meterpreter/extensions/stdapi/sys/event_log.rb +0 -192
  227. data/lib/rex/post/meterpreter/extensions/stdapi/sys/event_log_subsystem/event_record.rb +0 -41
  228. data/lib/rex/post/meterpreter/extensions/stdapi/sys/power.rb +0 -61
  229. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process.rb +0 -370
  230. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/image.rb +0 -129
  231. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/io.rb +0 -55
  232. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/memory.rb +0 -336
  233. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/thread.rb +0 -141
  234. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry.rb +0 -279
  235. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_key.rb +0 -193
  236. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_value.rb +0 -102
  237. data/lib/rex/post/meterpreter/extensions/stdapi/sys/thread.rb +0 -180
  238. data/lib/rex/post/meterpreter/extensions/stdapi/tlv.rb +0 -211
  239. data/lib/rex/post/meterpreter/extensions/stdapi/ui.rb +0 -227
  240. data/lib/rex/post/meterpreter/extensions/stdapi/webcam/webcam.rb +0 -63
  241. data/lib/rex/post/meterpreter/inbound_packet_handler.rb +0 -30
  242. data/lib/rex/post/meterpreter/object_aliases.rb +0 -83
  243. data/lib/rex/post/meterpreter/packet.rb +0 -688
  244. data/lib/rex/post/meterpreter/packet_dispatcher.rb +0 -431
  245. data/lib/rex/post/meterpreter/packet_parser.rb +0 -94
  246. data/lib/rex/post/meterpreter/packet_response_waiter.rb +0 -83
  247. data/lib/rex/post/meterpreter/ui/console.rb +0 -137
  248. data/lib/rex/post/meterpreter/ui/console/command_dispatcher.rb +0 -62
  249. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/core.rb +0 -730
  250. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/espia.rb +0 -108
  251. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/incognito.rb +0 -241
  252. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/networkpug.rb +0 -231
  253. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv.rb +0 -61
  254. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/elevate.rb +0 -98
  255. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/passwd.rb +0 -51
  256. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/timestomp.rb +0 -132
  257. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/sniffer.rb +0 -187
  258. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi.rb +0 -65
  259. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/fs.rb +0 -442
  260. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/net.rb +0 -298
  261. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/sys.rb +0 -486
  262. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/ui.rb +0 -315
  263. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/webcam.rb +0 -157
  264. data/lib/rex/post/meterpreter/ui/console/interactive_channel.rb +0 -95
  265. data/lib/rex/post/permission.rb +0 -26
  266. data/lib/rex/post/process.rb +0 -57
  267. data/lib/rex/post/thread.rb +0 -57
  268. data/lib/rex/post/ui.rb +0 -52
  269. data/lib/rex/proto.rb +0 -13
  270. data/lib/rex/proto.rb.ts.rb +0 -8
  271. data/lib/rex/proto/dcerpc.rb +0 -6
  272. data/lib/rex/proto/dcerpc.rb.ts.rb +0 -9
  273. data/lib/rex/proto/dcerpc/client.rb +0 -361
  274. data/lib/rex/proto/dcerpc/client.rb.ut.rb +0 -491
  275. data/lib/rex/proto/dcerpc/exceptions.rb +0 -150
  276. data/lib/rex/proto/dcerpc/handle.rb +0 -47
  277. data/lib/rex/proto/dcerpc/handle.rb.ut.rb +0 -85
  278. data/lib/rex/proto/dcerpc/ndr.rb +0 -72
  279. data/lib/rex/proto/dcerpc/ndr.rb.ut.rb +0 -41
  280. data/lib/rex/proto/dcerpc/packet.rb +0 -253
  281. data/lib/rex/proto/dcerpc/packet.rb.ut.rb +0 -56
  282. data/lib/rex/proto/dcerpc/response.rb +0 -187
  283. data/lib/rex/proto/dcerpc/response.rb.ut.rb +0 -15
  284. data/lib/rex/proto/dcerpc/uuid.rb +0 -84
  285. data/lib/rex/proto/dcerpc/uuid.rb.ut.rb +0 -46
  286. data/lib/rex/proto/dhcp.rb +0 -7
  287. data/lib/rex/proto/dhcp/constants.rb +0 -33
  288. data/lib/rex/proto/dhcp/server.rb +0 -292
  289. data/lib/rex/proto/drda.rb +0 -5
  290. data/lib/rex/proto/drda.rb.ts.rb +0 -17
  291. data/lib/rex/proto/drda/constants.rb +0 -49
  292. data/lib/rex/proto/drda/constants.rb.ut.rb +0 -23
  293. data/lib/rex/proto/drda/packet.rb +0 -252
  294. data/lib/rex/proto/drda/packet.rb.ut.rb +0 -109
  295. data/lib/rex/proto/drda/utils.rb +0 -123
  296. data/lib/rex/proto/drda/utils.rb.ut.rb +0 -84
  297. data/lib/rex/proto/http.rb +0 -5
  298. data/lib/rex/proto/http.rb.ts.rb +0 -12
  299. data/lib/rex/proto/http/client.rb +0 -821
  300. data/lib/rex/proto/http/client.rb.ut.rb +0 -95
  301. data/lib/rex/proto/http/handler.rb +0 -46
  302. data/lib/rex/proto/http/handler/erb.rb +0 -128
  303. data/lib/rex/proto/http/handler/erb.rb.ut.rb +0 -21
  304. data/lib/rex/proto/http/handler/erb.rb.ut.rb.rhtml +0 -1
  305. data/lib/rex/proto/http/handler/proc.rb +0 -60
  306. data/lib/rex/proto/http/handler/proc.rb.ut.rb +0 -24
  307. data/lib/rex/proto/http/header.rb +0 -161
  308. data/lib/rex/proto/http/header.rb.ut.rb +0 -46
  309. data/lib/rex/proto/http/packet.rb +0 -407
  310. data/lib/rex/proto/http/packet.rb.ut.rb +0 -165
  311. data/lib/rex/proto/http/request.rb +0 -356
  312. data/lib/rex/proto/http/request.rb.ut.rb +0 -214
  313. data/lib/rex/proto/http/response.rb +0 -90
  314. data/lib/rex/proto/http/response.rb.ut.rb +0 -149
  315. data/lib/rex/proto/http/server.rb +0 -369
  316. data/lib/rex/proto/http/server.rb.ut.rb +0 -79
  317. data/lib/rex/proto/ntlm.rb +0 -7
  318. data/lib/rex/proto/ntlm.rb.ut.rb +0 -177
  319. data/lib/rex/proto/ntlm/base.rb +0 -326
  320. data/lib/rex/proto/ntlm/constants.rb +0 -74
  321. data/lib/rex/proto/ntlm/crypt.rb +0 -415
  322. data/lib/rex/proto/ntlm/exceptions.rb +0 -16
  323. data/lib/rex/proto/ntlm/message.rb +0 -536
  324. data/lib/rex/proto/ntlm/utils.rb +0 -764
  325. data/lib/rex/proto/proxy/socks4a.rb +0 -440
  326. data/lib/rex/proto/rfb.rb +0 -19
  327. data/lib/rex/proto/rfb.rb.ut.rb +0 -37
  328. data/lib/rex/proto/rfb/cipher.rb +0 -84
  329. data/lib/rex/proto/rfb/client.rb +0 -207
  330. data/lib/rex/proto/rfb/constants.rb +0 -52
  331. data/lib/rex/proto/smb.rb +0 -7
  332. data/lib/rex/proto/smb.rb.ts.rb +0 -8
  333. data/lib/rex/proto/smb/client.rb +0 -1952
  334. data/lib/rex/proto/smb/client.rb.ut.rb +0 -223
  335. data/lib/rex/proto/smb/constants.rb +0 -1047
  336. data/lib/rex/proto/smb/constants.rb.ut.rb +0 -18
  337. data/lib/rex/proto/smb/crypt.rb +0 -36
  338. data/lib/rex/proto/smb/evasions.rb +0 -66
  339. data/lib/rex/proto/smb/exceptions.rb +0 -858
  340. data/lib/rex/proto/smb/simpleclient.rb +0 -306
  341. data/lib/rex/proto/smb/simpleclient.rb.ut.rb +0 -128
  342. data/lib/rex/proto/smb/utils.rb +0 -103
  343. data/lib/rex/proto/smb/utils.rb.ut.rb +0 -20
  344. data/lib/rex/proto/sunrpc.rb +0 -1
  345. data/lib/rex/proto/sunrpc/client.rb +0 -195
  346. data/lib/rex/proto/tftp.rb +0 -12
  347. data/lib/rex/proto/tftp/constants.rb +0 -39
  348. data/lib/rex/proto/tftp/server.rb +0 -497
  349. data/lib/rex/proto/tftp/server.rb.ut.rb +0 -28
  350. data/lib/rex/script.rb +0 -42
  351. data/lib/rex/script/base.rb +0 -59
  352. data/lib/rex/script/meterpreter.rb +0 -15
  353. data/lib/rex/script/shell.rb +0 -9
  354. data/lib/rex/service.rb +0 -48
  355. data/lib/rex/service_manager.rb +0 -141
  356. data/lib/rex/service_manager.rb.ut.rb +0 -32
  357. data/lib/rex/services/local_relay.rb +0 -423
  358. data/lib/rex/socket.rb +0 -684
  359. data/lib/rex/socket.rb.ut.rb +0 -107
  360. data/lib/rex/socket/comm.rb +0 -119
  361. data/lib/rex/socket/comm/local.rb +0 -412
  362. data/lib/rex/socket/comm/local.rb.ut.rb +0 -75
  363. data/lib/rex/socket/ip.rb +0 -130
  364. data/lib/rex/socket/parameters.rb +0 -345
  365. data/lib/rex/socket/parameters.rb.ut.rb +0 -51
  366. data/lib/rex/socket/range_walker.rb +0 -346
  367. data/lib/rex/socket/range_walker.rb.ut.rb +0 -55
  368. data/lib/rex/socket/ssl_tcp.rb +0 -184
  369. data/lib/rex/socket/ssl_tcp.rb.ut.rb +0 -39
  370. data/lib/rex/socket/ssl_tcp_server.rb +0 -122
  371. data/lib/rex/socket/ssl_tcp_server.rb.ut.rb +0 -61
  372. data/lib/rex/socket/subnet_walker.rb +0 -75
  373. data/lib/rex/socket/subnet_walker.rb.ut.rb +0 -28
  374. data/lib/rex/socket/switch_board.rb +0 -278
  375. data/lib/rex/socket/switch_board.rb.ut.rb +0 -52
  376. data/lib/rex/socket/tcp.rb +0 -76
  377. data/lib/rex/socket/tcp.rb.ut.rb +0 -64
  378. data/lib/rex/socket/tcp_server.rb +0 -66
  379. data/lib/rex/socket/tcp_server.rb.ut.rb +0 -44
  380. data/lib/rex/socket/udp.rb +0 -164
  381. data/lib/rex/socket/udp.rb.ut.rb +0 -44
  382. data/lib/rex/struct2.rb +0 -5
  383. data/lib/rex/struct2/c_struct.rb +0 -181
  384. data/lib/rex/struct2/c_struct_template.rb +0 -39
  385. data/lib/rex/struct2/constant.rb +0 -26
  386. data/lib/rex/struct2/element.rb +0 -44
  387. data/lib/rex/struct2/generic.rb +0 -73
  388. data/lib/rex/struct2/restraint.rb +0 -54
  389. data/lib/rex/struct2/s_string.rb +0 -72
  390. data/lib/rex/struct2/s_struct.rb +0 -111
  391. data/lib/rex/sync.rb +0 -6
  392. data/lib/rex/sync/event.rb +0 -94
  393. data/lib/rex/sync/read_write_lock.rb +0 -176
  394. data/lib/rex/sync/ref.rb +0 -57
  395. data/lib/rex/sync/thread_safe.rb +0 -82
  396. data/lib/rex/test.rb +0 -35
  397. data/lib/rex/text.rb +0 -1163
  398. data/lib/rex/text.rb.ut.rb +0 -190
  399. data/lib/rex/thread_factory.rb +0 -42
  400. data/lib/rex/time.rb +0 -65
  401. data/lib/rex/transformer.rb +0 -115
  402. data/lib/rex/transformer.rb.ut.rb +0 -38
  403. data/lib/rex/ui.rb +0 -21
  404. data/lib/rex/ui/interactive.rb +0 -298
  405. data/lib/rex/ui/output.rb +0 -78
  406. data/lib/rex/ui/output/none.rb +0 -18
  407. data/lib/rex/ui/progress_tracker.rb +0 -96
  408. data/lib/rex/ui/subscriber.rb +0 -149
  409. data/lib/rex/ui/text/color.rb +0 -97
  410. data/lib/rex/ui/text/color.rb.ut.rb +0 -18
  411. data/lib/rex/ui/text/dispatcher_shell.rb +0 -467
  412. data/lib/rex/ui/text/input.rb +0 -117
  413. data/lib/rex/ui/text/input/buffer.rb +0 -75
  414. data/lib/rex/ui/text/input/readline.rb +0 -129
  415. data/lib/rex/ui/text/input/socket.rb +0 -95
  416. data/lib/rex/ui/text/input/stdio.rb +0 -45
  417. data/lib/rex/ui/text/irb_shell.rb +0 -57
  418. data/lib/rex/ui/text/output.rb +0 -80
  419. data/lib/rex/ui/text/output/buffer.rb +0 -61
  420. data/lib/rex/ui/text/output/file.rb +0 -43
  421. data/lib/rex/ui/text/output/socket.rb +0 -43
  422. data/lib/rex/ui/text/output/stdio.rb +0 -40
  423. data/lib/rex/ui/text/progress_tracker.rb +0 -56
  424. data/lib/rex/ui/text/progress_tracker.rb.ut.rb +0 -34
  425. data/lib/rex/ui/text/shell.rb +0 -328
  426. data/lib/rex/ui/text/table.rb +0 -279
  427. data/lib/rex/ui/text/table.rb.ut.rb +0 -55
  428. data/lib/rex/zip.rb +0 -93
  429. data/lib/rex/zip/archive.rb +0 -184
  430. data/lib/rex/zip/blocks.rb +0 -182
  431. data/lib/rex/zip/entry.rb +0 -104
  432. data/lib/rex/zip/samples/comment.rb +0 -32
  433. data/lib/rex/zip/samples/mkwar.rb +0 -138
  434. data/lib/rex/zip/samples/mkzip.rb +0 -19
  435. data/lib/rex/zip/samples/recursive.rb +0 -58
@@ -1,123 +0,0 @@
1
- require 'rex/proto/drda'
2
-
3
- module Rex
4
- module Proto
5
- module DRDA
6
- class Utils
7
-
8
- # Creates a packet with EXCSAT_DDM and an ACCSEC_DDM. This will elicit
9
- # a reponse from the target server.
10
- def self.client_probe(dbname=nil)
11
- pkt = [
12
- EXCSAT_DDM.new,
13
- ACCSEC_DDM.new(:dbname => dbname)
14
- ]
15
- pkt.map {|x| x.to_s}.join
16
- end
17
-
18
- # Creates a packet with EXCSAT_DDM and an SECCHK_DDM.
19
- # In order to ever succeed, you do need a successful probe first.
20
- def self.client_auth(args={})
21
- dbname = args[:dbname]
22
- dbuser = args[:dbuser]
23
- dbpass = args[:dbpass]
24
- pkt = [
25
- ACCSEC_DDM.new(:format => 0x41),
26
- SECCHK_DDM.new(:dbname => dbname, :dbuser => dbuser, :dbpass => dbpass)
27
- ]
28
- pkt.map {|x| x.to_s}.join
29
- end
30
-
31
- def self.server_packet_info(obj)
32
- info_hash = {}
33
- return info_hash unless obj.kind_of? Rex::Proto::DRDA::SERVER_PACKET
34
- obj.each do |ddm|
35
- case ddm.codepoint
36
- when Constants::EXCSATRD
37
- info_hash.merge!(_info_excsatrd(ddm))
38
- when Constants::ACCSECRD
39
- info_hash.merge!(_info_accsecrd(ddm))
40
- when Constants::RDBNFNRM
41
- info_hash.merge!(_info_rdbnfnrm(ddm))
42
- when Constants::SECCHKRM
43
- info_hash.merge!(_info_secchkrm(ddm))
44
- else
45
- next
46
- end
47
- end
48
- return info_hash
49
- end
50
-
51
- def self._info_excsatrd(ddm)
52
- info_hash = {:excsatrd => true}
53
- ddm.payload.each do |param|
54
- case param.codepoint
55
- when Constants::SRVNAM
56
- info_hash[:instance_name] = Rex::Text.from_ebcdic(param.payload)
57
- when Constants::SRVCLSNM
58
- info_hash[:platform] = Rex::Text.from_ebcdic(param.payload)
59
- when Constants::SRVRLSLV
60
- info_hash[:version] = Rex::Text.from_ebcdic(param.payload)
61
- else
62
- next
63
- end
64
- end
65
- return info_hash
66
- end
67
-
68
- def self._info_accsecrd(ddm)
69
- info_hash = {:accsecrd => true}
70
- ddm.payload.each do |param|
71
- case param.codepoint
72
- when Constants::SECMEC
73
- info_hash[:plaintext_auth] = true if param.payload =~ /\x00\x03/
74
- when Constants::SECCHKCD
75
- info_hash[:security_check_code] = param.payload.unpack("C").first
76
- # A little spurious? This is always nonzero when there's no SECCHKRM DDM.
77
- info_hash[:db_login_success] = false unless info_hash[:security_check_code].zero?
78
- else
79
- next
80
- end
81
- end
82
- return info_hash
83
- end
84
-
85
- def self._info_rdbnfnrm(ddm)
86
- info_hash = {:rdbnfnrm => true}
87
- info_hash[:database_found] = false
88
- ddm.payload.each do |param|
89
- case param.codepoint
90
- when Constants::RDBNAM
91
- info_hash[:db_name] = Rex::Text.from_ebcdic(param.payload).unpack("A*").first
92
- when Constants::SRVDGN
93
- info_hash[:error_message] = Rex::Text.from_ebcdic(param.payload)
94
- else
95
- next
96
- end
97
- end
98
- return info_hash
99
- end
100
-
101
- def self._info_secchkrm(ddm)
102
- info_hash = {:secchkrm => true}
103
- ddm.payload.each do |param|
104
- case param.codepoint
105
- when Constants::SRVCOD
106
- info_hash[:severity_code] = param.payload.unpack("n").first
107
- when Constants::SECCHKCD
108
- info_hash[:security_check_code] = param.payload.unpack("C").first
109
- else
110
- next
111
- end
112
- end
113
- if info_hash[:serverity].to_i.zero? and info_hash[:security_check_code].to_i.zero?
114
- info_hash[:db_login_success] = true
115
- end
116
- return info_hash
117
- end
118
-
119
- end
120
-
121
- end
122
- end
123
- end
@@ -1,84 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- $:.unshift(File.join(File.dirname(__FILE__), '..', '..', '..'))
4
-
5
- require 'rex/test'
6
- require 'rex/proto/drda/utils'
7
- require 'rex/socket'
8
-
9
- class Rex::Proto::DRDA::Utils::UnitTest < Test::Unit::TestCase
10
-
11
- Klass = Rex::Proto::DRDA
12
-
13
- def test_socket_connectivity
14
- assert_nothing_raised do
15
- socket = Rex::Socket.create_tcp(
16
- 'PeerHost' => $_REX_TEST_DRDA_HOST.to_s, # PeerHost can be nil!
17
- 'PeerPort' => 50000
18
- )
19
- assert_kind_of Socket, socket
20
- assert !socket.closed?
21
- socket.close
22
- assert socket.closed?
23
- end
24
- end
25
-
26
- def test_client_probe_create
27
- probe_pkt = Klass::Utils.client_probe
28
- assert_equal 54, probe_pkt.size
29
- end
30
-
31
- def test_client_probe
32
- probe_pkt = Klass::Utils.client_probe('toolsdb')
33
- begin
34
- Timeout.timeout($_REX_TEST_TIMEOUT) do
35
- socket = Rex::Socket.create_tcp(
36
- 'PeerHost' => $_REX_TEST_DRDA_HOST.to_s,
37
- 'PeerPort' => 50000
38
- )
39
- sent = socket.put probe_pkt
40
- assert_equal 76, sent
41
- probe_reply = socket.get_once
42
- assert_operator probe_reply.size, :>=, 10
43
- parsed_reply = Klass::SERVER_PACKET.new.read probe_reply
44
- assert_kind_of Array, parsed_reply
45
- assert_equal parsed_reply[0].codepoint, Klass::Constants::EXCSATRD
46
- socket.close
47
- end
48
- rescue Timeout::Error
49
- flunk("Timed out")
50
- end
51
- end
52
-
53
- # Client auth requires a successful probe. This is a complete authentication
54
- # sequence, culminating in info[:db_login_sucess] returning either true or
55
- # false.
56
- def test_client_auth
57
- probe_pkt = Klass::Utils.client_probe('toolsdb')
58
- auth_pkt = Klass::Utils.client_auth(:dbname => 'toolsdb',
59
- :dbuser => $_REX_TEST_DRDA_USER.to_s,
60
- :dbpass => $_REX_TEST_DRDA_PASS.to_s
61
- )
62
- begin
63
- Timeout.timeout($_REX_TEST_TIMEOUT) do
64
- socket = Rex::Socket.create_tcp(
65
- 'PeerHost' => $_REX_TEST_DRDA_HOST.to_s,
66
- 'PeerPort' => 50000
67
- )
68
- sent = socket.put probe_pkt
69
- probe_reply = socket.get_once
70
- sent = socket.put auth_pkt
71
- assert_equal(75, sent)
72
- auth_reply = socket.get_once
73
- parsed_auth_reply = Klass::SERVER_PACKET.new.read auth_reply
74
- info = Klass::Utils.server_packet_info(parsed_auth_reply)
75
- assert info[:db_login_success]
76
- socket.close
77
- end
78
- rescue Timeout::Error
79
- flunk("Timed out")
80
- end
81
- end
82
-
83
- end
84
-
@@ -1,5 +0,0 @@
1
- require 'rex/proto/http/packet'
2
- require 'rex/proto/http/request'
3
- require 'rex/proto/http/response'
4
- require 'rex/proto/http/client'
5
- require 'rex/proto/http/server'
@@ -1,12 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'test/unit'
4
-
5
- require 'rex/proto/http/client.rb.ut'
6
- require 'rex/proto/http/server.rb.ut'
7
- require 'rex/proto/http/packet.rb.ut'
8
- require 'rex/proto/http/header.rb.ut'
9
- require 'rex/proto/http/request.rb.ut'
10
- require 'rex/proto/http/response.rb.ut'
11
- require 'rex/proto/http/handler/erb.rb.ut'
12
- require 'rex/proto/http/handler/proc.rb.ut'
@@ -1,821 +0,0 @@
1
- require 'rex/socket'
2
- require 'rex/proto/http'
3
- require 'rex/text'
4
-
5
- module Rex
6
- module Proto
7
- module Http
8
-
9
- ###
10
- #
11
- # Acts as a client to an HTTP server, sending requests and receiving responses.
12
- #
13
- # See the RFC: http://www.w3.org/Protocols/rfc2616/rfc2616.html
14
- #
15
- ###
16
- class Client
17
-
18
- #
19
- # Creates a new client instance
20
- #
21
- def initialize(host, port = 80, context = {}, ssl = nil, ssl_version = nil, proxies = nil)
22
- self.hostname = host
23
- self.port = port.to_i
24
- self.context = context
25
- self.ssl = ssl
26
- self.ssl_version = ssl_version
27
- self.proxies = proxies
28
- self.config = {
29
- 'read_max_data' => (1024*1024*1),
30
- 'vhost' => self.hostname,
31
- 'version' => '1.1',
32
- 'agent' => "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)",
33
- #
34
- # Evasion options
35
- #
36
- 'uri_encode_mode' => 'hex-normal', # hex-all, hex-random, u-normal, u-random, u-all
37
- 'uri_encode_count' => 1, # integer
38
- 'uri_full_url' => false, # bool
39
- 'pad_method_uri_count' => 1, # integer
40
- 'pad_uri_version_count' => 1, # integer
41
- 'pad_method_uri_type' => 'space', # space, tab, apache
42
- 'pad_uri_version_type' => 'space', # space, tab, apache
43
- 'method_random_valid' => false, # bool
44
- 'method_random_invalid' => false, # bool
45
- 'method_random_case' => false, # bool
46
- 'version_random_valid' => false, # bool
47
- 'version_random_invalid' => false, # bool
48
- 'version_random_case' => false, # bool
49
- 'uri_dir_self_reference' => false, # bool
50
- 'uri_dir_fake_relative' => false, # bool
51
- 'uri_use_backslashes' => false, # bool
52
- 'pad_fake_headers' => false, # bool
53
- 'pad_fake_headers_count' => 16, # integer
54
- 'pad_get_params' => false, # bool
55
- 'pad_get_params_count' => 8, # integer
56
- 'pad_post_params' => false, # bool
57
- 'pad_post_params_count' => 8, # integer
58
- 'uri_fake_end' => false, # bool
59
- 'uri_fake_params_start' => false, # bool
60
- 'header_folding' => false, # bool
61
- 'chunked_size' => 0 # integer
62
- }
63
-
64
- # This is not used right now...
65
- self.config_types = {
66
- 'uri_encode_mode' => ['hex-normal', 'hex-all', 'hex-random', 'u-normal', 'u-random', 'u-all'],
67
- 'uri_encode_count' => 'integer',
68
- 'uri_full_url' => 'bool',
69
- 'pad_method_uri_count' => 'integer',
70
- 'pad_uri_version_count' => 'integer',
71
- 'pad_method_uri_type' => ['space', 'tab', 'apache'],
72
- 'pad_uri_version_type' => ['space', 'tab', 'apache'],
73
- 'method_random_valid' => 'bool',
74
- 'method_random_invalid' => 'bool',
75
- 'method_random_case' => 'bool',
76
- 'version_random_valid' => 'bool',
77
- 'version_random_invalid' => 'bool',
78
- 'version_random_case' => 'bool',
79
- 'uri_dir_self_reference' => 'bool',
80
- 'uri_dir_fake_relative' => 'bool',
81
- 'uri_use_backslashes' => 'bool',
82
- 'pad_fake_headers' => 'bool',
83
- 'pad_fake_headers_count' => 'integer',
84
- 'pad_get_params' => 'bool',
85
- 'pad_get_params_count' => 'integer',
86
- 'pad_post_params' => 'bool',
87
- 'pad_post_params_count' => 'integer',
88
- 'uri_fake_end' => 'bool',
89
- 'uri_fake_params_start' => 'bool',
90
- 'header_folding' => 'bool',
91
- 'chunked_size' => 'integer'
92
- }
93
- end
94
-
95
- #
96
- # Set configuration options
97
- #
98
- def set_config(opts = {})
99
- opts.each_pair do |var,val|
100
- typ = self.config_types[var] || 'string'
101
-
102
- if(typ.class.to_s == 'Array')
103
- if not typ.include?(val)
104
- raise RuntimeError, "The specified value for #{var} is not one of the valid choices"
105
- end
106
- end
107
-
108
- if(typ == 'bool')
109
- val = (val =~ /^(t|y|1)$/i ? true : false)
110
- end
111
-
112
- if(typ == 'integer')
113
- val = val.to_i
114
- end
115
-
116
- self.config[var]=val
117
- end
118
-
119
- end
120
-
121
- #
122
- # Create an arbitrary HTTP request
123
- #
124
- def request_raw(opts={})
125
- c_enc = opts['encode'] || false
126
- c_uri = opts['uri'] || '/'
127
- c_body = opts['data'] || ''
128
- c_meth = opts['method'] || 'GET'
129
- c_prot = opts['proto'] || 'HTTP'
130
- c_vers = opts['version'] || config['version'] || '1.1'
131
- c_qs = opts['query']
132
- c_ag = opts['agent'] || config['agent']
133
- c_cook = opts['cookie'] || config['cookie']
134
- c_host = opts['vhost'] || config['vhost'] || self.hostname
135
- c_head = opts['headers'] || config['headers'] || {}
136
- c_rawh = opts['raw_headers']|| config['raw_headers'] || ''
137
- c_conn = opts['connection']
138
- c_auth = opts['basic_auth'] || config['basic_auth'] || ''
139
-
140
- uri = set_uri(c_uri)
141
-
142
- req = ''
143
- req << set_method(c_meth)
144
- req << set_method_uri_spacer()
145
- req << set_uri_prepend()
146
- req << (c_enc ? set_encode_uri(uri) : uri)
147
-
148
- if (c_qs)
149
- req << '?'
150
- req << (c_enc ? set_encode_qs(c_qs) : c_qs)
151
- end
152
-
153
- req << set_uri_append()
154
- req << set_uri_version_spacer()
155
- req << set_version(c_prot, c_vers)
156
- req << set_host_header(c_host)
157
- req << set_agent_header(c_ag)
158
-
159
- if (c_auth.length > 0)
160
- req << set_basic_auth_header(c_auth)
161
- end
162
-
163
- req << set_cookie_header(c_cook)
164
- req << set_connection_header(c_conn)
165
- req << set_extra_headers(c_head)
166
- req << set_raw_headers(c_rawh)
167
- req << set_body(c_body)
168
-
169
- req
170
- end
171
-
172
-
173
- #
174
- # Create a CGI compatible request
175
- #
176
- # Options:
177
- # - agent: User-Agent header value
178
- # - basic_auth: Basic-Auth header value
179
- # - connection: Connection header value
180
- # - cookie: Cookie header value
181
- # - ctype: Content-Type header value, default: +application/x-www-form-urlencoded+
182
- # - data: HTTP data (only useful with some methods, see rfc2616)
183
- # - encode: URI encode the supplied URI
184
- # - headers: HTTP headers as a hash, e.g. <code>{ "X-MyHeader" => "value" }</code>
185
- # - method: HTTP method to use in the request, not limited to standard methods defined by rfc2616, default: GET
186
- # - proto: protocol, default: HTTP
187
- # - query: raw query string
188
- # - raw_headers: HTTP headers as a hash
189
- # - uri: the URI to request
190
- # - vars_get: GET variables as a hash to be translated into a query string
191
- # - vars_post: POST variables as a hash to be translated into POST data
192
- # - version: version of the protocol, default: 1.1
193
- # - vhost: Host header value
194
- #
195
- def request_cgi(opts={})
196
- c_enc = opts['encode'] || false
197
- c_cgi = opts['uri'] || '/'
198
- c_body = opts['data'] || ''
199
- c_meth = opts['method'] || 'GET'
200
- c_prot = opts['proto'] || 'HTTP'
201
- c_vers = opts['version'] || config['version'] || '1.1'
202
- c_qs = opts['query'] || ''
203
- c_varg = opts['vars_get'] || {}
204
- c_varp = opts['vars_post'] || {}
205
- c_head = opts['headers'] || config['headers'] || {}
206
- c_rawh = opts['raw_headers']|| config['raw_headers'] || ''
207
- c_type = opts['ctype'] || 'application/x-www-form-urlencoded'
208
- c_ag = opts['agent'] || config['agent']
209
- c_cook = opts['cookie'] || config['cookie']
210
- c_host = opts['vhost'] || config['vhost']
211
- c_conn = opts['connection']
212
- c_path = opts['path_info']
213
- c_auth = opts['basic_auth'] || config['basic_auth'] || ''
214
-
215
- uri = set_cgi(c_cgi)
216
- qstr = c_qs
217
- pstr = c_body
218
-
219
- if (config['pad_get_params'])
220
- 1.upto(config['pad_get_params_count'].to_i) do |i|
221
- qstr << '&' if qstr.length > 0
222
- qstr << set_encode_uri(Rex::Text.rand_text_alphanumeric(rand(32)+1))
223
- qstr << '='
224
- qstr << set_encode_uri(Rex::Text.rand_text_alphanumeric(rand(32)+1))
225
- end
226
- end
227
-
228
- c_varg.each_pair do |var,val|
229
- qstr << '&' if qstr.length > 0
230
- qstr << set_encode_uri(var)
231
- qstr << '='
232
- qstr << set_encode_uri(val)
233
- end
234
-
235
- if (config['pad_post_params'])
236
- 1.upto(config['pad_post_params_count'].to_i) do |i|
237
- pstr << '&' if qstr.length > 0
238
- pstr << set_encode_uri(Rex::Text.rand_text_alphanumeric(rand(32)+1))
239
- pstr << '='
240
- pstr << set_encode_uri(Rex::Text.rand_text_alphanumeric(rand(32)+1))
241
- end
242
- end
243
-
244
- c_varp.each_pair do |var,val|
245
- pstr << '&' if pstr.length > 0
246
- pstr << set_encode_uri(var)
247
- pstr << '='
248
- pstr << set_encode_uri(val)
249
- end
250
-
251
- req = ''
252
- req << set_method(c_meth)
253
- req << set_method_uri_spacer()
254
- req << set_uri_prepend()
255
- req << (c_enc ? set_encode_uri(uri):uri)
256
-
257
- if (qstr.length > 0)
258
- req << '?'
259
- req << qstr
260
- end
261
-
262
- req << set_path_info(c_path)
263
- req << set_uri_append()
264
- req << set_uri_version_spacer()
265
- req << set_version(c_prot, c_vers)
266
- req << set_host_header(c_host)
267
- req << set_agent_header(c_ag)
268
-
269
- if (c_auth.length > 0)
270
- req << set_basic_auth_header(c_auth)
271
- end
272
-
273
- req << set_cookie_header(c_cook)
274
- req << set_connection_header(c_conn)
275
- req << set_extra_headers(c_head)
276
-
277
- req << set_content_type_header(c_type)
278
- req << set_content_len_header(pstr.length)
279
- req << set_chunked_header()
280
- req << set_raw_headers(c_rawh)
281
- req << set_body(pstr)
282
-
283
- req
284
- end
285
-
286
- #
287
- # Connects to the remote server if possible.
288
- #
289
- def connect
290
- # If we already have a connection and we aren't pipelining, close it.
291
- if (self.conn)
292
- if !pipelining?
293
- close
294
- else
295
- return self.conn
296
- end
297
- end
298
-
299
- self.conn = Rex::Socket::Tcp.create(
300
- 'PeerHost' => self.hostname,
301
- 'PeerPort' => self.port.to_i,
302
- 'LocalHost' => self.local_host,
303
- 'LocalPort' => self.local_port,
304
- 'Context' => self.context,
305
- 'SSL' => self.ssl,
306
- 'SSLVersion'=> self.ssl_version,
307
- 'Proxies' => self.proxies
308
- )
309
- end
310
-
311
- #
312
- # Closes the connection to the remote server.
313
- #
314
- def close
315
- if (self.conn)
316
- self.conn.shutdown
317
- self.conn.close
318
- end
319
-
320
- self.conn = nil
321
- end
322
-
323
- #
324
- # Transmit an HTTP request and receive the response
325
- # If persist is set, then the request will attempt
326
- # to reuse an existing connection.
327
- #
328
- def send_recv(req, t = -1, persist=false)
329
- @pipeline = persist
330
- send_request(req)
331
- res = read_response(t)
332
- res.request = req.to_s if res
333
- res
334
- end
335
-
336
- #
337
- # Send an HTTP request to the server
338
- #
339
- def send_request(req)
340
- connect
341
- conn.put(req.to_s)
342
- end
343
-
344
- #
345
- # Read a response from the server
346
- #
347
- def read_response(t = -1)
348
-
349
- resp = Response.new
350
- resp.max_data = config['read_max_data']
351
-
352
- # Wait at most t seconds for the full response to be read in. We only
353
- # do this if t was specified as a negative value indicating an infinite
354
- # wait cycle. If t were specified as nil it would indicate that no
355
- # response parsing is required.
356
-
357
- return resp if not t
358
-
359
- Timeout.timeout((t < 0) ? nil : t) do
360
-
361
- rv = nil
362
- while (
363
- rv != Packet::ParseCode::Completed and
364
- rv != Packet::ParseCode::Error
365
- )
366
-
367
- begin
368
-
369
- buff = conn.get_once(-1, 1)
370
- rv = resp.parse( buff || '' )
371
-
372
- ##########################################################################
373
- # XXX: NOTE: BUG: get_once currently (as of r10042) rescues "Exception"
374
- # As such, the following rescue block will ever be reached. -jjd
375
- ##########################################################################
376
-
377
- # Handle unexpected disconnects
378
- rescue ::Errno::EPIPE, ::EOFError, ::IOError
379
- case resp.state
380
- when Packet::ParseState::ProcessingHeader
381
- resp = nil
382
- when Packet::ParseState::ProcessingBody
383
- # truncated request, good enough
384
- resp.error = :truncated
385
- end
386
- break
387
- end
388
-
389
- # This is a dirty hack for broken HTTP servers
390
- if rv == Packet::ParseCode::Completed
391
- rbody = resp.body
392
- rbufq = resp.bufq
393
-
394
- rblob = rbody.to_s + rbufq.to_s
395
- tries = 0
396
- begin
397
- # XXX: This doesn't deal with chunked encoding or "Content-type: text/html; charset=..."
398
- while tries < 1000 and resp.headers["Content-Type"]== "text/html" and rblob !~ /<\/html>/i
399
- buff = conn.get_once(-1, 0.05)
400
- break if not buff
401
- rblob += buff
402
- tries += 1
403
- end
404
- rescue ::Errno::EPIPE, ::EOFError, ::IOError
405
- end
406
-
407
- resp.bufq = ""
408
- resp.body = rblob
409
- end
410
- end
411
- end
412
-
413
- return resp if not resp
414
-
415
- # As a last minute hack, we check to see if we're dealing with a 100 Continue here.
416
- if resp.proto == '1.1' and resp.code == 100
417
- # If so, our real response becaome the body, so we re-parse it.
418
- body = resp.body
419
- resp = Response.new
420
- resp.max_data = config['read_max_data']
421
- rv = resp.parse(body)
422
- # XXX: At some point, this may benefit from processing post-completion code
423
- # as seen above.
424
- end
425
-
426
- resp
427
- end
428
-
429
- #
430
- # Cleans up any outstanding connections and other resources.
431
- #
432
- def stop
433
- close
434
- end
435
-
436
- #
437
- # Returns whether or not the conn is valid.
438
- #
439
- def conn?
440
- conn != nil
441
- end
442
-
443
- #
444
- # Whether or not connections should be pipelined.
445
- #
446
- def pipelining?
447
- pipeline
448
- end
449
-
450
- #
451
- # Return the encoded URI
452
- # ['none','hex-normal', 'hex-all', 'u-normal', 'u-all']
453
- def set_encode_uri(uri)
454
- a = uri
455
- self.config['uri_encode_count'].times {
456
- a = Rex::Text.uri_encode(a, self.config['uri_encode_mode'])
457
- }
458
- return a
459
- end
460
-
461
- #
462
- # Return the encoded query string
463
- #
464
- def set_encode_qs(qs)
465
- a = qs
466
- self.config['uri_encode_count'].times {
467
- a = Rex::Text.uri_encode(a, self.config['uri_encode_mode'])
468
- }
469
- return a
470
- end
471
-
472
- #
473
- # Return the uri
474
- #
475
- def set_uri(uri)
476
-
477
- if (self.config['uri_dir_self_reference'])
478
- uri.gsub!('/', '/./')
479
- end
480
-
481
- if (self.config['uri_dir_fake_relative'])
482
- buf = ""
483
- uri.split('/').each do |part|
484
- cnt = rand(8)+2
485
- 1.upto(cnt) { |idx|
486
- buf << "/" + Rex::Text.rand_text_alphanumeric(rand(32)+1)
487
- }
488
- buf << ("/.." * cnt)
489
- buf << "/" + part
490
- end
491
- uri = buf
492
- end
493
-
494
- if (self.config['uri_full_url'])
495
- url = self.ssl ? "https" : "http"
496
- url << self.config['vhost']
497
- url << ((self.port == 80) ? "" : ":#{self.port}")
498
- url << uri
499
- url
500
- else
501
- uri
502
- end
503
- end
504
-
505
- #
506
- # Return the cgi
507
- #
508
- def set_cgi(uri)
509
-
510
- if (self.config['uri_dir_self_reference'])
511
- uri.gsub!('/', '/./')
512
- end
513
-
514
- if (self.config['uri_dir_fake_relative'])
515
- buf = ""
516
- uri.split('/').each do |part|
517
- cnt = rand(8)+2
518
- 1.upto(cnt) { |idx|
519
- buf << "/" + Rex::Text.rand_text_alphanumeric(rand(32)+1)
520
- }
521
- buf << ("/.." * cnt)
522
- buf << "/" + part
523
- end
524
- uri = buf
525
- end
526
-
527
- url = uri
528
-
529
- if (self.config['uri_full_url'])
530
- url = self.ssl ? "https" : "http"
531
- url << self.config['vhost']
532
- url << (self.port == 80) ? "" : ":#{self.port}"
533
- url << uri
534
- end
535
-
536
- url
537
- end
538
-
539
- #
540
- # Return the HTTP method string
541
- #
542
- def set_method(method)
543
- ret = method
544
-
545
- if (self.config['method_random_valid'])
546
- ret = ['GET', 'POST', 'HEAD'][rand(3)]
547
- end
548
-
549
- if (self.config['method_random_invalid'])
550
- ret = Rex::Text.rand_text_alpha(rand(20)+1)
551
- end
552
-
553
- if (self.config['method_random_case'])
554
- ret = Rex::Text.to_rand_case(ret)
555
- end
556
-
557
- ret
558
- end
559
-
560
- #
561
- # Return the HTTP version string
562
- #
563
- def set_version(protocol, version)
564
- ret = protocol + "/" + version
565
-
566
- if (self.config['version_random_valid'])
567
- ret = protocol + "/" + ['1.0', '1.1'][rand(2)]
568
- end
569
-
570
- if (self.config['version_random_invalid'])
571
- ret = Rex::Text.rand_text_alphanumeric(rand(20)+1)
572
- end
573
-
574
- if (self.config['version_random_case'])
575
- ret = Rex::Text.to_rand_case(ret)
576
- end
577
-
578
- ret << "\r\n"
579
- end
580
-
581
- #
582
- # Return the HTTP seperator and body string
583
- #
584
- def set_body(data)
585
- return "\r\n" + data if self.config['chunked_size'] == 0
586
- str = data.dup
587
- chunked = ''
588
- while str.size > 0
589
- chunk = str.slice!(0,rand(self.config['chunked_size']) + 1)
590
- chunked << sprintf("%x", chunk.size) + "\r\n" + chunk + "\r\n"
591
- end
592
- "\r\n" + chunked + "0\r\n\r\n"
593
- end
594
-
595
- #
596
- # Return the HTTP path info
597
- # TODO:
598
- # * Encode path information
599
- def set_path_info(path)
600
- path ? path : ''
601
- end
602
-
603
- #
604
- # Return the spacing between the method and uri
605
- #
606
- def set_method_uri_spacer
607
- len = self.config['pad_method_uri_count'].to_i
608
- set = " "
609
- buf = ""
610
-
611
- case self.config['pad_method_uri_type']
612
- when 'tab'
613
- set = "\t"
614
- when 'apache'
615
- set = "\t \x0b\x0c\x0d"
616
- end
617
-
618
- while(buf.length < len)
619
- buf << set[ rand(set.length) ]
620
- end
621
-
622
- return buf
623
- end
624
-
625
- #
626
- # Return the spacing between the uri and the version
627
- #
628
- def set_uri_version_spacer
629
- len = self.config['pad_uri_version_count'].to_i
630
- set = " "
631
- buf = ""
632
-
633
- case self.config['pad_uri_version_type']
634
- when 'tab'
635
- set = "\t"
636
- when 'apache'
637
- set = "\t \x0b\x0c\x0d"
638
- end
639
-
640
- while(buf.length < len)
641
- buf << set[ rand(set.length) ]
642
- end
643
-
644
- return buf
645
- end
646
-
647
- #
648
- # Return the padding to place before the uri
649
- #
650
- def set_uri_prepend
651
- prefix = ""
652
-
653
- if (self.config['uri_fake_params_start'])
654
- prefix << '/%3fa=b/../'
655
- end
656
-
657
- if (self.config['uri_fake_end'])
658
- prefix << '/%20HTTP/1.0/../../'
659
- end
660
-
661
- prefix
662
- end
663
-
664
- #
665
- # Return the padding to place before the uri
666
- #
667
- def set_uri_append
668
- # TODO:
669
- # * Support different padding types
670
- ""
671
- end
672
-
673
- #
674
- # Return the HTTP Host header
675
- #
676
- def set_host_header(host)
677
- return "" if self.config['uri_full_url']
678
- host ||= self.config['vhost']
679
- set_formatted_header("Host", host)
680
- end
681
-
682
- #
683
- # Return the HTTP agent header
684
- #
685
- def set_agent_header(agent)
686
- agent ? set_formatted_header("User-Agent", agent) : ""
687
- end
688
-
689
- #
690
- # Return the HTTP cookie header
691
- #
692
- def set_cookie_header(cookie)
693
- cookie ? set_formatted_header("Cookie", cookie) : ""
694
- end
695
-
696
- #
697
- # Return the HTTP connection header
698
- #
699
- def set_connection_header(conn)
700
- conn ? set_formatted_header("Connection", conn) : ""
701
- end
702
-
703
- #
704
- # Return the content type header
705
- #
706
- def set_content_type_header(ctype)
707
- set_formatted_header("Content-Type", ctype)
708
- end
709
-
710
- #
711
- # Return the content length header
712
- def set_content_len_header(clen)
713
- return "" if self.config['chunked_size'] > 0
714
- set_formatted_header("Content-Length", clen)
715
- end
716
-
717
- #
718
- # Return the Authorization basic-auth header
719
- #
720
- def set_basic_auth_header(auth)
721
- auth ? set_formatted_header("Authorization", "Basic " + Rex::Text.encode_base64(auth)) : ""
722
- end
723
-
724
- #
725
- # Return a string of formatted extra headers
726
- #
727
- def set_extra_headers(headers)
728
- buf = ''
729
-
730
- if (self.config['pad_fake_headers'])
731
- 1.upto(self.config['pad_fake_headers_count'].to_i) do |i|
732
- buf << set_formatted_header(
733
- Rex::Text.rand_text_alphanumeric(rand(32)+1),
734
- Rex::Text.rand_text_alphanumeric(rand(32)+1)
735
- )
736
- end
737
- end
738
-
739
- headers.each_pair do |var,val|
740
- buf << set_formatted_header(var, val)
741
- end
742
-
743
- buf
744
- end
745
-
746
- def set_chunked_header()
747
- return "" if self.config['chunked_size'] == 0
748
- set_formatted_header('Transfer-Encoding', 'chunked')
749
- end
750
-
751
- #
752
- # Return a string of raw header data
753
- #
754
- def set_raw_headers(data)
755
- data
756
- end
757
-
758
- #
759
- # Return a formatted header string
760
- #
761
- def set_formatted_header(var, val)
762
- if (self.config['header_folding'])
763
- "#{var}:\r\n\t#{val}\r\n"
764
- else
765
- "#{var}: #{val}\r\n"
766
- end
767
- end
768
-
769
-
770
-
771
- #
772
- # The client request configuration
773
- #
774
- attr_accessor :config
775
- #
776
- # The client request configuration classes
777
- #
778
- attr_accessor :config_types
779
- #
780
- # Whether or not pipelining is in use.
781
- #
782
- attr_accessor :pipeline
783
- #
784
- # The local host of the client.
785
- #
786
- attr_accessor :local_host
787
- #
788
- # The local port of the client.
789
- #
790
- attr_accessor :local_port
791
- #
792
- # The underlying connection.
793
- #
794
- attr_accessor :conn
795
- #
796
- # The calling context to pass to the socket
797
- #
798
- attr_accessor :context
799
- #
800
- # The proxy list
801
- #
802
- attr_accessor :proxies
803
-
804
-
805
- # When parsing the request, thunk off the first response from the server, since junk
806
- attr_accessor :junk_pipeline
807
-
808
- protected
809
-
810
- # https
811
- attr_accessor :ssl, :ssl_version # :nodoc:
812
-
813
- attr_accessor :hostname, :port # :nodoc:
814
-
815
-
816
- end
817
-
818
- end
819
- end
820
- end
821
-