arachni 0.4.3.2 → 0.4.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (267) hide show
  1. checksums.yaml +8 -8
  2. data/CHANGELOG.md +42 -0
  3. data/README.md +4 -1
  4. data/lib/arachni/element/capabilities/auditable.rb +5 -0
  5. data/lib/arachni/element/capabilities/auditable/rdiff.rb +105 -122
  6. data/lib/arachni/framework.rb +4 -1
  7. data/lib/arachni/http.rb +9 -10
  8. data/lib/arachni/mixins/progress_bar.rb +1 -1
  9. data/lib/arachni/options.rb +16 -0
  10. data/lib/arachni/rpc/server/active_options.rb +1 -1
  11. data/lib/arachni/ui/cli/utilities.rb +4 -0
  12. data/lib/arachni/uri.rb +2 -1
  13. data/lib/version +1 -1
  14. data/modules/audit/code_injection_php_input_wrapper.rb +76 -0
  15. data/modules/audit/path_traversal.rb +23 -13
  16. data/modules/audit/rfi.rb +4 -3
  17. data/modules/audit/source_code_disclosure.rb +138 -0
  18. data/modules/audit/sqli_blind_rdiff.rb +16 -13
  19. data/modules/audit/sqli_blind_rdiff/payloads.txt +5 -5
  20. data/modules/recon/grep/form_upload.rb +61 -0
  21. data/modules/recon/htaccess_limit.rb +6 -3
  22. data/modules/recon/x_forwarded_for_access_restriction_bypass.rb +55 -0
  23. data/plugins/http_dicattack.rb +5 -8
  24. data/plugins/redundant_vectors.rb +34 -0
  25. data/reports/html/default/issues.erb +7 -22
  26. data/reports/stdout.rb +3 -3
  27. data/spec/arachni/element/capabilities/auditable/rdiff_spec.rb +3 -2
  28. data/spec/arachni/http_spec.rb +27 -1
  29. data/spec/modules/audit/path_traversal_spec.rb +2 -2
  30. data/spec/modules/audit/rfi_spec.rb +1 -1
  31. data/spec/modules/audit/source_code_disclosure_spec.rb +24 -0
  32. data/spec/modules/recon/grep/form_upload_spec.rb +19 -0
  33. data/spec/modules/recon/x_forwarded_for_access_restriction_bypass_spec.rb +19 -0
  34. data/spec/plugins/http_dicattack_spec.rb +3 -3
  35. data/spec/support/servers/arachni/element/capabilities/auditable/rdiff.rb +3 -1
  36. data/spec/support/servers/modules/audit/path_traversal.rb +12 -6
  37. data/spec/support/servers/modules/audit/source_code_disclosure.rb +96 -0
  38. data/spec/support/servers/modules/audit/sqli_blind_rdiff.rb +2 -11
  39. data/spec/support/servers/modules/recon/grep/form_upload.rb +9 -0
  40. data/spec/support/servers/modules/recon/x_forwarded_for_access_restriction_bypass.rb +16 -0
  41. data/spec/support/shared/element/capabilities/auditable.rb +22 -1
  42. metadata +19 -452
  43. data/spec/support/logs/Dispatcher - 1000-42597.log +0 -9
  44. data/spec/support/logs/Dispatcher - 1009-18926.log +0 -9
  45. data/spec/support/logs/Dispatcher - 1018-26020.log +0 -9
  46. data/spec/support/logs/Dispatcher - 1027-51590.log +0 -9
  47. data/spec/support/logs/Dispatcher - 1036-31265.log +0 -11
  48. data/spec/support/logs/Dispatcher - 1049-64968.log +0 -9
  49. data/spec/support/logs/Dispatcher - 1059-36177.log +0 -9
  50. data/spec/support/logs/Dispatcher - 1119-32736.log +0 -63
  51. data/spec/support/logs/Dispatcher - 1128-64822.log +0 -43
  52. data/spec/support/logs/Dispatcher - 1137-33870.log +0 -39
  53. data/spec/support/logs/Dispatcher - 1146-57070.log +0 -34
  54. data/spec/support/logs/Dispatcher - 1155-1976.log +0 -28
  55. data/spec/support/logs/Dispatcher - 1166-7613.log +0 -21
  56. data/spec/support/logs/Dispatcher - 1176-38750.log +0 -13
  57. data/spec/support/logs/Dispatcher - 1186-13313.log +0 -9
  58. data/spec/support/logs/Dispatcher - 1328-54360.log +0 -19
  59. data/spec/support/logs/Dispatcher - 1338-50709.log +0 -21
  60. data/spec/support/logs/Dispatcher - 1347-36899.log +0 -15
  61. data/spec/support/logs/Dispatcher - 1362-31178.log +0 -19
  62. data/spec/support/logs/Dispatcher - 1374-11925.log +0 -21
  63. data/spec/support/logs/Dispatcher - 1384-20223.log +0 -15
  64. data/spec/support/logs/Dispatcher - 1575-41606.log +0 -17
  65. data/spec/support/logs/Dispatcher - 1585-60468.log +0 -21
  66. data/spec/support/logs/Dispatcher - 1594-55347.log +0 -13
  67. data/spec/support/logs/Dispatcher - 1607-32309.log +0 -19
  68. data/spec/support/logs/Dispatcher - 1616-38493.log +0 -21
  69. data/spec/support/logs/Dispatcher - 1625-44887.log +0 -15
  70. data/spec/support/logs/Dispatcher - 1677-56065.log +0 -17
  71. data/spec/support/logs/Dispatcher - 1686-61752.log +0 -21
  72. data/spec/support/logs/Dispatcher - 1698-55714.log +0 -13
  73. data/spec/support/logs/Dispatcher - 1711-14301.log +0 -17
  74. data/spec/support/logs/Dispatcher - 1720-52378.log +0 -21
  75. data/spec/support/logs/Dispatcher - 1729-22756.log +0 -13
  76. data/spec/support/logs/Dispatcher - 2016-10522.log +0 -19
  77. data/spec/support/logs/Dispatcher - 2025-12440.log +0 -21
  78. data/spec/support/logs/Dispatcher - 2034-6928.log +0 -15
  79. data/spec/support/logs/Dispatcher - 2058-54432.log +0 -21
  80. data/spec/support/logs/Dispatcher - 2067-19379.log +0 -25
  81. data/spec/support/logs/Dispatcher - 2076-43318.log +0 -15
  82. data/spec/support/logs/Dispatcher - 2112-16482.log +0 -17
  83. data/spec/support/logs/Dispatcher - 2121-7790.log +0 -21
  84. data/spec/support/logs/Dispatcher - 2130-18423.log +0 -13
  85. data/spec/support/logs/Dispatcher - 2145-13060.log +0 -21
  86. data/spec/support/logs/Dispatcher - 2154-42433.log +0 -25
  87. data/spec/support/logs/Dispatcher - 2163-55198.log +0 -15
  88. data/spec/support/logs/Dispatcher - 2199-19221.log +0 -17
  89. data/spec/support/logs/Dispatcher - 2208-27404.log +0 -21
  90. data/spec/support/logs/Dispatcher - 2217-34366.log +0 -13
  91. data/spec/support/logs/Dispatcher - 2230-52868.log +0 -17
  92. data/spec/support/logs/Dispatcher - 2239-1425.log +0 -21
  93. data/spec/support/logs/Dispatcher - 2248-34228.log +0 -13
  94. data/spec/support/logs/Dispatcher - 23550-62617.log +0 -9
  95. data/spec/support/logs/Dispatcher - 23577-56565.log +0 -21
  96. data/spec/support/logs/Dispatcher - 23734-28957.log +0 -9
  97. data/spec/support/logs/Dispatcher - 23744-12387.log +0 -19
  98. data/spec/support/logs/Dispatcher - 23753-8683.log +0 -17
  99. data/spec/support/logs/Dispatcher - 23762-7032.log +0 -13
  100. data/spec/support/logs/Dispatcher - 23771-13735.log +0 -9
  101. data/spec/support/logs/Dispatcher - 23780-6422.log +0 -9
  102. data/spec/support/logs/Dispatcher - 23789-37971.log +0 -11
  103. data/spec/support/logs/Dispatcher - 23802-4861.log +0 -11
  104. data/spec/support/logs/Dispatcher - 23815-27068.log +0 -35
  105. data/spec/support/logs/Dispatcher - 23900-13978.log +0 -21
  106. data/spec/support/logs/Dispatcher - 23928-16013.log +0 -21
  107. data/spec/support/logs/Dispatcher - 23952-10950.log +0 -23
  108. data/spec/support/logs/Dispatcher - 24002-6528.log +0 -19
  109. data/spec/support/logs/Dispatcher - 24011-65281.log +0 -17
  110. data/spec/support/logs/Dispatcher - 24020-51743.log +0 -15
  111. data/spec/support/logs/Dispatcher - 24033-26547.log +0 -11
  112. data/spec/support/logs/Dispatcher - 24046-57891.log +0 -9
  113. data/spec/support/logs/Dispatcher - 24055-65062.log +0 -9
  114. data/spec/support/logs/Dispatcher - 24064-19057.log +0 -9
  115. data/spec/support/logs/Dispatcher - 24073-54430.log +0 -9
  116. data/spec/support/logs/Dispatcher - 24082-25596.log +0 -11
  117. data/spec/support/logs/Dispatcher - 24095-43694.log +0 -9
  118. data/spec/support/logs/Dispatcher - 24104-17121.log +0 -9
  119. data/spec/support/logs/Dispatcher - 24158-40106.log +0 -63
  120. data/spec/support/logs/Dispatcher - 24167-21385.log +0 -43
  121. data/spec/support/logs/Dispatcher - 24176-6454.log +0 -39
  122. data/spec/support/logs/Dispatcher - 24185-5125.log +0 -34
  123. data/spec/support/logs/Dispatcher - 24194-57640.log +0 -28
  124. data/spec/support/logs/Dispatcher - 24203-3500.log +0 -21
  125. data/spec/support/logs/Dispatcher - 24212-26331.log +0 -13
  126. data/spec/support/logs/Dispatcher - 24222-65421.log +0 -9
  127. data/spec/support/logs/Dispatcher - 24764-27994.log +0 -19
  128. data/spec/support/logs/Dispatcher - 24774-32543.log +0 -21
  129. data/spec/support/logs/Dispatcher - 24783-19136.log +0 -15
  130. data/spec/support/logs/Dispatcher - 24796-60141.log +0 -19
  131. data/spec/support/logs/Dispatcher - 24805-24219.log +0 -21
  132. data/spec/support/logs/Dispatcher - 24814-22343.log +0 -15
  133. data/spec/support/logs/Dispatcher - 24933-3408.log +0 -17
  134. data/spec/support/logs/Dispatcher - 24942-62948.log +0 -21
  135. data/spec/support/logs/Dispatcher - 24951-32294.log +0 -13
  136. data/spec/support/logs/Dispatcher - 24964-62518.log +0 -19
  137. data/spec/support/logs/Dispatcher - 24973-13438.log +0 -21
  138. data/spec/support/logs/Dispatcher - 24982-14621.log +0 -15
  139. data/spec/support/logs/Dispatcher - 25033-2920.log +0 -17
  140. data/spec/support/logs/Dispatcher - 25043-58761.log +0 -21
  141. data/spec/support/logs/Dispatcher - 25052-29212.log +0 -13
  142. data/spec/support/logs/Dispatcher - 25066-41541.log +0 -17
  143. data/spec/support/logs/Dispatcher - 25075-37989.log +0 -21
  144. data/spec/support/logs/Dispatcher - 25084-11499.log +0 -13
  145. data/spec/support/logs/Dispatcher - 25311-26011.log +0 -19
  146. data/spec/support/logs/Dispatcher - 25320-24733.log +0 -21
  147. data/spec/support/logs/Dispatcher - 25329-29047.log +0 -15
  148. data/spec/support/logs/Dispatcher - 25353-46711.log +0 -21
  149. data/spec/support/logs/Dispatcher - 25362-36226.log +0 -25
  150. data/spec/support/logs/Dispatcher - 25371-56232.log +0 -15
  151. data/spec/support/logs/Dispatcher - 25407-3246.log +0 -17
  152. data/spec/support/logs/Dispatcher - 25416-34890.log +0 -21
  153. data/spec/support/logs/Dispatcher - 25425-15634.log +0 -13
  154. data/spec/support/logs/Dispatcher - 25438-34664.log +0 -21
  155. data/spec/support/logs/Dispatcher - 25447-3660.log +0 -25
  156. data/spec/support/logs/Dispatcher - 25456-8081.log +0 -15
  157. data/spec/support/logs/Dispatcher - 25492-10542.log +0 -17
  158. data/spec/support/logs/Dispatcher - 25501-45084.log +0 -21
  159. data/spec/support/logs/Dispatcher - 25510-35194.log +0 -13
  160. data/spec/support/logs/Dispatcher - 25519-53450.log +0 -17
  161. data/spec/support/logs/Dispatcher - 25532-55565.log +0 -21
  162. data/spec/support/logs/Dispatcher - 25541-6244.log +0 -13
  163. data/spec/support/logs/Dispatcher - 28179-60102.log +0 -9
  164. data/spec/support/logs/Dispatcher - 28206-59109.log +0 -21
  165. data/spec/support/logs/Dispatcher - 28347-64968.log +0 -9
  166. data/spec/support/logs/Dispatcher - 28357-36177.log +0 -19
  167. data/spec/support/logs/Dispatcher - 28366-50815.log +0 -17
  168. data/spec/support/logs/Dispatcher - 28375-20163.log +0 -13
  169. data/spec/support/logs/Dispatcher - 28384-40303.log +0 -9
  170. data/spec/support/logs/Dispatcher - 28393-26451.log +0 -9
  171. data/spec/support/logs/Dispatcher - 28402-18767.log +0 -11
  172. data/spec/support/logs/Dispatcher - 28415-56936.log +0 -11
  173. data/spec/support/logs/Dispatcher - 28428-4219.log +0 -35
  174. data/spec/support/logs/Dispatcher - 28489-21241.log +0 -21
  175. data/spec/support/logs/Dispatcher - 28498-4440.log +0 -21
  176. data/spec/support/logs/Dispatcher - 28507-56565.log +0 -23
  177. data/spec/support/logs/Dispatcher - 28548-64105.log +0 -19
  178. data/spec/support/logs/Dispatcher - 28557-9265.log +0 -17
  179. data/spec/support/logs/Dispatcher - 28566-60378.log +0 -15
  180. data/spec/support/logs/Dispatcher - 28580-47697.log +0 -11
  181. data/spec/support/logs/Dispatcher - 28593-45818.log +0 -9
  182. data/spec/support/logs/Dispatcher - 28603-24718.log +0 -9
  183. data/spec/support/logs/Dispatcher - 28612-10811.log +0 -9
  184. data/spec/support/logs/Dispatcher - 28621-30580.log +0 -9
  185. data/spec/support/logs/Dispatcher - 28642-14288.log +0 -11
  186. data/spec/support/logs/Dispatcher - 28657-46406.log +0 -9
  187. data/spec/support/logs/Dispatcher - 28666-48831.log +0 -9
  188. data/spec/support/logs/Dispatcher - 28723-34387.log +0 -63
  189. data/spec/support/logs/Dispatcher - 28732-54101.log +0 -43
  190. data/spec/support/logs/Dispatcher - 28741-5251.log +0 -39
  191. data/spec/support/logs/Dispatcher - 28750-8280.log +0 -34
  192. data/spec/support/logs/Dispatcher - 28759-38308.log +0 -28
  193. data/spec/support/logs/Dispatcher - 28768-65028.log +0 -21
  194. data/spec/support/logs/Dispatcher - 28777-56986.log +0 -13
  195. data/spec/support/logs/Dispatcher - 28787-15576.log +0 -9
  196. data/spec/support/logs/Dispatcher - 28994-50422.log +0 -19
  197. data/spec/support/logs/Dispatcher - 29004-46776.log +0 -21
  198. data/spec/support/logs/Dispatcher - 29013-21266.log +0 -15
  199. data/spec/support/logs/Dispatcher - 29026-3603.log +0 -19
  200. data/spec/support/logs/Dispatcher - 29035-17800.log +0 -21
  201. data/spec/support/logs/Dispatcher - 29044-7103.log +0 -15
  202. data/spec/support/logs/Dispatcher - 29165-63459.log +0 -17
  203. data/spec/support/logs/Dispatcher - 29174-14377.log +0 -21
  204. data/spec/support/logs/Dispatcher - 29183-49752.log +0 -13
  205. data/spec/support/logs/Dispatcher - 29196-55000.log +0 -19
  206. data/spec/support/logs/Dispatcher - 29205-33060.log +0 -21
  207. data/spec/support/logs/Dispatcher - 29214-62279.log +0 -15
  208. data/spec/support/logs/Dispatcher - 29269-40689.log +0 -17
  209. data/spec/support/logs/Dispatcher - 29278-10110.log +0 -21
  210. data/spec/support/logs/Dispatcher - 29288-55076.log +0 -13
  211. data/spec/support/logs/Dispatcher - 29301-13242.log +0 -17
  212. data/spec/support/logs/Dispatcher - 29310-21310.log +0 -21
  213. data/spec/support/logs/Dispatcher - 29319-62724.log +0 -13
  214. data/spec/support/logs/Dispatcher - 29568-37063.log +0 -19
  215. data/spec/support/logs/Dispatcher - 29577-56333.log +0 -21
  216. data/spec/support/logs/Dispatcher - 29586-49998.log +0 -15
  217. data/spec/support/logs/Dispatcher - 29611-63916.log +0 -21
  218. data/spec/support/logs/Dispatcher - 29620-29551.log +0 -25
  219. data/spec/support/logs/Dispatcher - 29629-49377.log +0 -15
  220. data/spec/support/logs/Dispatcher - 29665-40270.log +0 -17
  221. data/spec/support/logs/Dispatcher - 29674-61313.log +0 -21
  222. data/spec/support/logs/Dispatcher - 29683-33859.log +0 -13
  223. data/spec/support/logs/Dispatcher - 29696-38359.log +0 -21
  224. data/spec/support/logs/Dispatcher - 29705-30896.log +0 -25
  225. data/spec/support/logs/Dispatcher - 29714-17665.log +0 -15
  226. data/spec/support/logs/Dispatcher - 29752-63853.log +0 -17
  227. data/spec/support/logs/Dispatcher - 29761-3448.log +0 -21
  228. data/spec/support/logs/Dispatcher - 29770-31902.log +0 -13
  229. data/spec/support/logs/Dispatcher - 29783-47589.log +0 -17
  230. data/spec/support/logs/Dispatcher - 29792-8436.log +0 -21
  231. data/spec/support/logs/Dispatcher - 29801-9350.log +0 -13
  232. data/spec/support/logs/Dispatcher - 339-13552.log +0 -9
  233. data/spec/support/logs/Dispatcher - 384-22932.log +0 -21
  234. data/spec/support/logs/Dispatcher - 744-9325.log +0 -9
  235. data/spec/support/logs/Dispatcher - 754-41076.log +0 -19
  236. data/spec/support/logs/Dispatcher - 763-49534.log +0 -17
  237. data/spec/support/logs/Dispatcher - 772-59109.log +0 -13
  238. data/spec/support/logs/Dispatcher - 782-41178.log +0 -9
  239. data/spec/support/logs/Dispatcher - 791-11829.log +0 -9
  240. data/spec/support/logs/Dispatcher - 800-47866.log +0 -11
  241. data/spec/support/logs/Dispatcher - 814-16120.log +0 -11
  242. data/spec/support/logs/Dispatcher - 827-2111.log +0 -35
  243. data/spec/support/logs/Dispatcher - 889-13083.log +0 -21
  244. data/spec/support/logs/Dispatcher - 898-53883.log +0 -21
  245. data/spec/support/logs/Dispatcher - 911-41959.log +0 -23
  246. data/spec/support/logs/Dispatcher - 955-24486.log +0 -19
  247. data/spec/support/logs/Dispatcher - 965-25535.log +0 -17
  248. data/spec/support/logs/Dispatcher - 974-14231.log +0 -15
  249. data/spec/support/logs/Dispatcher - 987-5144.log +0 -11
  250. data/spec/support/logs/Instance - 1343-24327.error.log +0 -328
  251. data/spec/support/logs/Instance - 1694-39251.error.log +0 -328
  252. data/spec/support/logs/Instance - 1725-15789.error.log +0 -427
  253. data/spec/support/logs/Instance - 1766-53560.error.log +0 -326
  254. data/spec/support/logs/Instance - 1773-12955.error.log +0 -328
  255. data/spec/support/logs/Instance - 1948-11071.error.log +0 -326
  256. data/spec/support/logs/Instance - 24779-49625.error.log +0 -328
  257. data/spec/support/logs/Instance - 25048-11380.error.log +0 -328
  258. data/spec/support/logs/Instance - 25080-24917.error.log +0 -427
  259. data/spec/support/logs/Instance - 25106-33475.error.log +0 -326
  260. data/spec/support/logs/Instance - 25112-54559.error.log +0 -328
  261. data/spec/support/logs/Instance - 25242-65202.error.log +0 -326
  262. data/spec/support/logs/Instance - 29009-57043.error.log +0 -328
  263. data/spec/support/logs/Instance - 29283-31439.error.log +0 -328
  264. data/spec/support/logs/Instance - 29315-55609.error.log +0 -427
  265. data/spec/support/logs/Instance - 29341-7004.error.log +0 -326
  266. data/spec/support/logs/Instance - 29347-6024.error.log +0 -328
  267. data/spec/support/logs/Instance - 29492-27943.error.log +0 -326
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- NDA1NGU4YzIyZmY3Y2JlNGZiYzc2NjE5NGYyZTdlMDM5N2NhMzdlNg==
4
+ NGVjNDkxZDVkMmEyM2I5ODAxZjg0ZDI0NTk2NjBkNWY0MDIyMTZhZg==
5
5
  data.tar.gz: !binary |-
6
- MjU0OTE5ZWZlYzkwZWY2NWZlODg1ZWY4MzQzYzIwZGNhZjU1OGQ1ZA==
6
+ M2Y1NGFjN2EzNTBhMDRiYmI4ZDc1ZTY1ZTY4NmRhZGFhMTE3MWQ3NA==
7
7
  !binary "U0hBNTEy":
8
8
  metadata.gz: !binary |-
9
- YTIwMzRjZDcwNDljYWY3MzUyYjhmN2M2ZjU5M2UzMWVlNzk0NWI0NTIwMmZl
10
- MGU5MDM3YWE4NTNmYmZlNmU3OGFkNzkxYmExOGU0N2U0YzdmNmM2ODk5ZGI1
11
- MzM2MGRhMTljZjJiNDI2Y2Q1ZDI1M2Y4MThmNjY4NGMzMWQ0MGQ=
9
+ N2MwNzBhYzQ5NGJiYjhlYzZiNjMwMWE2ZjQ0NzEzNWY0MDI1YmNhYmFjMTk0
10
+ MWMyOGVkODRlMzczODNhZWJkNmJkNTJlNDllZjEzZTJiMzUyMjI5NzhkMzMz
11
+ N2NlNjA0YTc2YzUyNjU3MDdiMmE2OTExZDU3YmIwY2E1NDU1YTc=
12
12
  data.tar.gz: !binary |-
13
- ZDhmMjU1NzViNGUxOGE2MjU1Y2E2ZDYzYzViZDE4Njc3MzNhMGRmODFlNGM0
14
- ZDUwMWIzMGI4YjU4MzY2NDA3ZDU3YzYwMWY4N2VlNDU2MjMyNjhhZjcxMDk0
15
- OTFmZTQ1NWMxODE2NmI5N2IyZDcxNzU0OWNhNWI0M2NiM2VkNTE=
13
+ NDAyNGRiNjVhMTY5ZTk4MDJiMzMxMWEyNDljZjgwODk1NzMyOGQ2NWM3Yzcy
14
+ NmExYzc1MGFjYWFmOTAwMDdjYjY3NGZkMDc5ZDQ1M2ZjNWY3ZjJkMTc2MGUx
15
+ YmQzNTY3MWMzNjE3YTIxN2M1NGJkMjE3MjJhMTc5MjVlZTVlNzM=
@@ -1,5 +1,47 @@
1
1
  # ChangeLog
2
2
 
3
+ ## 0.4.4 _(August 10, 2013)_
4
+
5
+ - Options
6
+ - Added:
7
+ - `--http-username` -- Username for HTTP authentication.
8
+ - `--http-password` -- Password for HTTP authentication.
9
+ - `Element::Capabilities::Auditable::RDiff` -- Optimized and improved accuracy
10
+ of analysis.
11
+ - Reports
12
+ - HTML -- Fixed display of untrusted issues.
13
+ - Modules
14
+ - Recon
15
+ - Added:
16
+ - X-Forwarded-For Access Restriction Bypass (`x_forwarded_for_access_restriction_bypass`)
17
+ - Retries denied requests with a `X-Forwarded-For` header
18
+ to try and trick the web application into thinking that the
19
+ request originates from `localhost` and checks whether the
20
+ restrictions were bypassed.
21
+ - Form-based upload (`form_upload`)
22
+ - Flags file-upload forms as they require manual testing.
23
+ - .htaccess LIMIT misconfiguration (`htaccess_limit`)
24
+ - Updated to use verb tampering as well.
25
+ - Audit
26
+ - Added:
27
+ - Source code disclosure (`source_code_disclosure`)
28
+ - Checks whether or not the web application can be forced to
29
+ reveal source code.
30
+ - Code execution via the php://input wrapper (`code_execution_php_input_wrapper`)
31
+ - It injects PHP code into the HTTP request body and uses the
32
+ php://input wrapper to try and load it
33
+ - Blind SQL Injection (Boolean/Differential analysis) (`sqli_blind_rdiff`)
34
+ - Improved accuracy of results.
35
+ - Path traversal (`path_traversal`)
36
+ - Severity set to "High".
37
+ - Updated to start with `/` and go all the way up to
38
+ `/../../../../../../`.
39
+ - Added fingerprints for `/proc/self/environ`.
40
+ - Improved coverage for MS Windows.
41
+ - Remote file inclusion (`rfi`)
42
+ - Updated to handle cases where the web application appends its own
43
+ extension to the injected string.
44
+
3
45
  ## 0.4.3.2 _(July 16, 2013)_
4
46
 
5
47
  - Plugins
data/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
  <table>
4
4
  <tr>
5
5
  <th>Version</th>
6
- <td>0.4.3.2</td>
6
+ <td>0.4.4</td>
7
7
  </tr>
8
8
  <tr>
9
9
  <th>Homepage</th>
@@ -308,6 +308,7 @@ Audit modules actively engage the web application via its inputs.
308
308
  - XSS in event attributes of HTML elements (`xss_event`).
309
309
  - XSS in HTML tags (`xss_tag`).
310
310
  - XSS in HTML 'script' tags (`xss_script_tag`).
311
+ - Source code disclosure (`source_code_disclosure`)
311
312
 
312
313
  ##### Recon (Passive)
313
314
 
@@ -335,6 +336,8 @@ Recon modules look for the existence of files, folders and signatures.
335
336
  - Insecure cookies (`insecure_cookies`).
336
337
  - HttpOnly cookies (`http_only_cookies`).
337
338
  - Auto-complete for password form fields (`password_autocomplete`).
339
+ - X-Forwarded-For Access Restriction Bypass (`x_forwarded_for_access_restriction_bypass`)
340
+ - Form-based upload (`form_upload`)
338
341
 
339
342
  ### Report Management
340
343
 
@@ -631,6 +631,11 @@ module Auditable
631
631
  next
632
632
  end
633
633
 
634
+ if elem.matches_skip_like_blocks?
635
+ print_debug 'Element matches one or more skip_like blocks, skipping.'
636
+ next
637
+ end
638
+
634
639
  if !orphan? && @auditor.skip?( elem )
635
640
  mid = elem.audit_id( injection_str, opts )
636
641
  print_debug "Auditor's #skip? method returned true for mutation, skipping: #{mid}"
@@ -52,25 +52,25 @@ module Auditable::RDiff
52
52
  # Performs differential analysis and logs an issue should there be one.
53
53
  #
54
54
  # opts = {
55
- # :precision => 3,
56
- # :faults => [ 'fault injections' ],
57
- # :bools => [ 'boolean injections' ]
55
+ # pairs: [
56
+ # { 'true expression' => 'false expression' }
57
+ # ]
58
58
  # }
59
59
  #
60
60
  # element.rdiff_analysis( opts )
61
61
  #
62
62
  # Here's how it goes:
63
63
  #
64
- # * let `default` be the default/original response
65
- # * let `fault` be the response of the fault injection
66
- # * let `bool` be the response of the boolean injection
64
+ # * let `control` be the control/control response
65
+ # * let `true_response` be the response of the injection of 'true expression'
66
+ # * let `false_response` be the response of the injection of 'false expression'
67
67
  #
68
68
  # A vulnerability is logged if:
69
69
  #
70
- # default == bool AND bool.code == 200 AND fault != bool
70
+ # control == true_response AND true_response.code == 200 AND false_response != true_response
71
71
  #
72
72
  # The `bool` response is also checked in order to determine if it's a custom
73
- # 404, if it is it'll be skipped.
73
+ # 404, if it is then it'll be skipped.
74
74
  #
75
75
  # If a block has been provided analysis and logging will be delegated to it.
76
76
  #
@@ -79,20 +79,11 @@ module Auditable::RDiff
79
79
  # As seen in {Arachni::Element::Capabilities::Mutable::Format}.
80
80
  # @option opts [Integer] :precision
81
81
  # Amount of {String#rdiff refinement} iterations to perform.
82
- # @option opts [Array<String>] :faults
83
- # Array of fault injection strings (these are supposed to force erroneous
84
- # conditions when interpreted).
85
- # @option opts [Array<String>] :bools
86
- # Array of boolean injection strings (these are supposed to not alter the
87
- # webapp behavior when interpreted).
82
+ # @option opts [Array<Hash>] :pairs
83
+ # Pair of strings that should yield different results when interpreted.
84
+ # Keys should be the `true` expressions.
88
85
  # @param [Block] block
89
- # To be used for custom analysis of responses; will be passed the following:
90
- #
91
- # * injected string
92
- # * audited element
93
- # * default response body
94
- # * boolean response
95
- # * fault injection response body
86
+ # To be used for custom analysis of gathered data.
96
87
  #
97
88
  # @return [Bool]
98
89
  # `true` if the audit was scheduled successfully, `false` otherwise (like
@@ -106,128 +97,120 @@ module Auditable::RDiff
106
97
 
107
98
  opts = self.class::MUTATION_OPTIONS.merge( RDIFF_OPTIONS.merge( opts ) )
108
99
 
109
- # don't continue if there's a missing value
110
- auditable.values.each { |val| return if !val || val.empty? }
100
+ return false if auditable.empty?
101
+
102
+ # Don't continue if there's a missing value.
103
+ auditable.values.each { |val| return if val.to_s.empty? }
111
104
 
112
105
  return false if rdiff_audited?
113
106
  rdiff_audited
114
107
 
115
- responses = {
116
- # will hold the original, default, response that results from submitting
117
- orig: nil,
118
-
119
- # will hold responses of boolean injections
120
- good: {},
121
-
122
- # will hold responses of fault injections
123
- bad: {}
124
- }
125
-
126
- # submit the element, as is, opts[:precision] amount of times and
127
- # rdiff the responses in order to arrive to a refined response without
128
- # any superfluous dynamic content
129
- opts[:precision].times {
130
- # get the default responses
131
- audit( '', opts ) do |res|
132
- responses[:orig] ||= res.body
133
- # remove context-irrelevant dynamic content like banners and such
134
- responses[:orig] = responses[:orig].rdiff( res.body )
108
+ responses = {}
109
+ control = nil
110
+ opts[:precision].times do
111
+ # Get the default response.
112
+ submit do |res|
113
+ if control
114
+ print_status 'Got default/control response.'
115
+ end
116
+
117
+ # Remove context-irrelevant dynamic content like banners and such.
118
+ control = (control ? control.rdiff( res.body ) : res.body)
135
119
  end
136
- }
137
-
138
- # perform fault injection opts[:precision] amount of times and
139
- # rdiff the responses in order to arrive to a refined response without
140
- # any superfluous dynamic content
141
- opts[:precision].times {
142
- opts[:faults].each do |str|
143
- # get mutations of self using the fault seed, which will
144
- # cause an internal/silent error when evaluated
145
- mutations( str, opts ).each do |elem|
120
+ end
121
+
122
+ opts[:pairs].each do |pair|
123
+ responses[pair] ||= {}
124
+ true_expr, false_expr = pair.to_a.first
125
+
126
+ opts[:precision].times do
127
+ mutations( true_expr, opts ).each do |elem|
146
128
  print_status elem.status_string
147
129
 
148
- # submit the mutation and store the response
130
+ # Submit the mutation and store the response.
149
131
  elem.submit( opts ) do |res|
150
- responses[:bad][elem.altered] ||= res.body.clone
151
- # remove context-irrelevant dynamic content like banners and such
152
- # from the error page
153
- responses[:bad][elem.altered] =
154
- responses[:bad][elem.altered].rdiff( res.body.clone )
132
+ if responses[pair][elem.altered][:true]
133
+ elem.print_status "Gathering data for '#{elem.altered}' " <<
134
+ "#{type} input -- Got true response:" <<
135
+ " #{true_expr}"
136
+ end
137
+
138
+ responses[pair][elem.altered] ||= {}
139
+ responses[pair][elem.altered][:mutation] = elem
140
+
141
+ # Keep the latest response for the {Arachni::Issue}.
142
+ responses[pair][elem.altered][:response] = res
143
+ responses[pair][elem.altered][:injected_string] = true_expr
144
+
145
+ responses[pair][elem.altered][:true] ||= res.body.clone
146
+ # Remove context-irrelevant dynamic content like banners
147
+ # and such from the error page.
148
+ responses[pair][elem.altered][:true] =
149
+ responses[pair][elem.altered][:true].rdiff( res.body.clone )
155
150
  end
156
151
  end
157
- end
158
- }
159
-
160
- # get injection variations that will not affect the outcome of the query
161
- opts[:bools].each do |str|
162
-
163
- # get mutations of self using the boolean seed, which will not
164
- # alter the execution flow
165
- mutations( str, opts ).each do |elem|
166
- print_status elem.status_string
167
-
168
- # submit the mutation and store the response
169
- elem.submit( opts ) do |res|
170
- responses[:good][elem.altered] ||= []
171
- # save the response and some data for analysis
172
- responses[:good][elem.altered] << {
173
- 'str' => str,
174
- 'res' => res,
175
- 'elem' => elem
176
- }
152
+
153
+ mutations( false_expr, opts ).each do |elem|
154
+ responses[pair][elem.altered] ||= {}
155
+
156
+ # Submit the mutation and store the response.
157
+ elem.submit( opts ) do |res|
158
+ if responses[pair][elem.altered][:false]
159
+ elem.print_status "Gathering data for '#{elem.altered}'" <<
160
+ " #{type} input -- Got false " <<
161
+ "response: #{false_expr}"
162
+ end
163
+
164
+ responses[pair][elem.altered][:false] ||= res.body.clone
165
+
166
+ # Remove context-irrelevant dynamic content like banners
167
+ # and such from the error page.
168
+ responses[pair][elem.altered][:false] =
169
+ responses[pair][elem.altered][:false].rdiff( res.body.clone )
170
+ end
177
171
  end
178
172
  end
179
173
  end
180
174
 
181
- # when this runs the "responses" hash will have been populated and we
182
- # can continue with analysis
183
- http.after_run {
184
-
185
- responses[:good].keys.each do |key|
186
- responses[:good][key].each do |res|
187
-
188
- # if there's a block passed then delegate analysis to it
189
- if block
190
- exception_jail( false ){
191
- block.call( res['str'], res['elem'], responses[:orig],
192
- res['res'], responses[:bad][key] )
193
- }
194
-
195
- # if default_response_body == bool_response_body AND
196
- # bool_response_code == 200 AND
197
- # fault_response_body != bool_response_body
198
- elsif responses[:orig] == res['res'].body &&
199
- responses[:bad][key] != res['res'].body &&
200
- res['res'].code == 200
201
-
202
- # check to see if the current boolean response we're analyzing
203
- # is a custom 404 page
204
- http.custom_404?( res['res'] ) do |bool|
205
- # if this is a custom 404 page bail out
206
- next if bool
207
-
208
- # if this isn't a custom 404 page then it means that
209
- # the element is vulnerable, so go ahead and log the issue
210
-
211
- # information for the Metareport report
212
- opts = {
213
- injected_orig: res['str'],
214
- combo: res['elem'].auditable
215
- }
175
+
176
+ # When this runs the "responses" hash will have been populated and we
177
+ # can continue with analysis.
178
+ http.after_run do
179
+ responses.each do |pair, data|
180
+ if block
181
+ exception_jail( false ){ block.call( pair, data ) }
182
+ next
183
+ end
184
+
185
+ data.each do |input_name, result|
186
+ # if default_response_body == true_response_body AND
187
+ # false_response_body != true_response_code AND
188
+ # true_response_code == 200
189
+ if control == result[:true] &&
190
+ result[:false] != result[:true] &&
191
+ result[:response].code == 200
192
+
193
+ # Check to see if the `true` response we're analyzing
194
+ # is a custom 404 page.
195
+ http.custom_404?( result[:response] ) do |custom_404|
196
+ # If this is a custom 404 page bail out.
197
+ next if custom_404
216
198
 
217
199
  @auditor.log({
218
- var: key,
219
- opts: opts,
220
- injected: res['str'],
221
- id: res['str'],
222
- elem: res['elem'].type,
223
- }, res['res']
200
+ var: input_name,
201
+ opts: {
202
+ injected_orig: result[:injected_string],
203
+ combo: result[:mutation].auditable
204
+ },
205
+ injected: result[:mutation].altered_value,
206
+ elem: type
207
+ }, result[:response]
224
208
  )
225
209
  end
226
210
  end
227
-
228
211
  end
229
212
  end
230
- }
213
+ end
231
214
 
232
215
  true
233
216
  end
@@ -800,7 +800,10 @@ class Framework
800
800
  print_info 'Depending on server responsiveness and network' <<
801
801
  ' conditions this may take a while.'
802
802
 
803
- # run all the queued HTTP requests and harvest the responses
803
+ # Run all the queued HTTP requests and harvest the responses.
804
+ http.run
805
+
806
+ # Needed for some HTTP callbacks.
804
807
  http.run
805
808
 
806
809
  session.ensure_logged_in
@@ -108,14 +108,6 @@ class HTTP
108
108
  method: :auto
109
109
  }
110
110
 
111
- if opts.url
112
- parsed_url = uri_parse( opts.url )
113
- hydra_opts.merge!(
114
- username: parsed_url.user,
115
- password: parsed_url.password
116
- )
117
- end
118
-
119
111
  @url = opts.url.to_s
120
112
  @url = nil if @url.empty?
121
113
 
@@ -151,7 +143,9 @@ class HTTP
151
143
  follow_location: false,
152
144
  max_redirects: opts.redirect_limit,
153
145
  disable_ssl_peer_verification: true,
154
- timeout: opts.http_timeout || HTTP_TIMEOUT
146
+ timeout: opts.http_timeout || HTTP_TIMEOUT,
147
+ username: opts.http_username,
148
+ password: opts.http_password
155
149
  }.merge( proxy_opts )
156
150
 
157
151
  @request_count = 0
@@ -289,6 +283,9 @@ class HTTP
289
283
  update_cookies = opts[:update_cookies]
290
284
  follow_location = opts[:follow_location] || false
291
285
 
286
+ username = opts.delete( :username )
287
+ password = opts.delete( :password )
288
+
292
289
  #
293
290
  # The exception jail function wraps the block passed to it
294
291
  # in exception handling and runs it.
@@ -348,7 +345,9 @@ class HTTP
348
345
  }.merge( @opts )
349
346
 
350
347
  opts[:follow_location] = follow_location if follow_location
351
- opts[:timeout] = timeout if timeout
348
+ opts[:timeout] = timeout if timeout
349
+ opts[:username] = username if username
350
+ opts[:password] = password if password
352
351
 
353
352
  req = Typhoeus::Request.new( curl, opts )
354
353
  req.train if train
@@ -27,7 +27,7 @@ module ProgressBar
27
27
  # Formats elapsed time to hour:min:sec
28
28
  #
29
29
  def format_time( t )
30
- t = t.to_i
30
+ t = t.to_i rescue 0
31
31
  sec = t % 60
32
32
  min = ( t / 60 ) % 60
33
33
  hour = t / 3600