arachni 0.4.3.2 → 0.4.4

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 (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