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.
- checksums.yaml +8 -8
- data/CHANGELOG.md +42 -0
- data/README.md +4 -1
- data/lib/arachni/element/capabilities/auditable.rb +5 -0
- data/lib/arachni/element/capabilities/auditable/rdiff.rb +105 -122
- data/lib/arachni/framework.rb +4 -1
- data/lib/arachni/http.rb +9 -10
- data/lib/arachni/mixins/progress_bar.rb +1 -1
- data/lib/arachni/options.rb +16 -0
- data/lib/arachni/rpc/server/active_options.rb +1 -1
- data/lib/arachni/ui/cli/utilities.rb +4 -0
- data/lib/arachni/uri.rb +2 -1
- data/lib/version +1 -1
- data/modules/audit/code_injection_php_input_wrapper.rb +76 -0
- data/modules/audit/path_traversal.rb +23 -13
- data/modules/audit/rfi.rb +4 -3
- data/modules/audit/source_code_disclosure.rb +138 -0
- data/modules/audit/sqli_blind_rdiff.rb +16 -13
- data/modules/audit/sqli_blind_rdiff/payloads.txt +5 -5
- data/modules/recon/grep/form_upload.rb +61 -0
- data/modules/recon/htaccess_limit.rb +6 -3
- data/modules/recon/x_forwarded_for_access_restriction_bypass.rb +55 -0
- data/plugins/http_dicattack.rb +5 -8
- data/plugins/redundant_vectors.rb +34 -0
- data/reports/html/default/issues.erb +7 -22
- data/reports/stdout.rb +3 -3
- data/spec/arachni/element/capabilities/auditable/rdiff_spec.rb +3 -2
- data/spec/arachni/http_spec.rb +27 -1
- data/spec/modules/audit/path_traversal_spec.rb +2 -2
- data/spec/modules/audit/rfi_spec.rb +1 -1
- data/spec/modules/audit/source_code_disclosure_spec.rb +24 -0
- data/spec/modules/recon/grep/form_upload_spec.rb +19 -0
- data/spec/modules/recon/x_forwarded_for_access_restriction_bypass_spec.rb +19 -0
- data/spec/plugins/http_dicattack_spec.rb +3 -3
- data/spec/support/servers/arachni/element/capabilities/auditable/rdiff.rb +3 -1
- data/spec/support/servers/modules/audit/path_traversal.rb +12 -6
- data/spec/support/servers/modules/audit/source_code_disclosure.rb +96 -0
- data/spec/support/servers/modules/audit/sqli_blind_rdiff.rb +2 -11
- data/spec/support/servers/modules/recon/grep/form_upload.rb +9 -0
- data/spec/support/servers/modules/recon/x_forwarded_for_access_restriction_bypass.rb +16 -0
- data/spec/support/shared/element/capabilities/auditable.rb +22 -1
- metadata +19 -452
- data/spec/support/logs/Dispatcher - 1000-42597.log +0 -9
- data/spec/support/logs/Dispatcher - 1009-18926.log +0 -9
- data/spec/support/logs/Dispatcher - 1018-26020.log +0 -9
- data/spec/support/logs/Dispatcher - 1027-51590.log +0 -9
- data/spec/support/logs/Dispatcher - 1036-31265.log +0 -11
- data/spec/support/logs/Dispatcher - 1049-64968.log +0 -9
- data/spec/support/logs/Dispatcher - 1059-36177.log +0 -9
- data/spec/support/logs/Dispatcher - 1119-32736.log +0 -63
- data/spec/support/logs/Dispatcher - 1128-64822.log +0 -43
- data/spec/support/logs/Dispatcher - 1137-33870.log +0 -39
- data/spec/support/logs/Dispatcher - 1146-57070.log +0 -34
- data/spec/support/logs/Dispatcher - 1155-1976.log +0 -28
- data/spec/support/logs/Dispatcher - 1166-7613.log +0 -21
- data/spec/support/logs/Dispatcher - 1176-38750.log +0 -13
- data/spec/support/logs/Dispatcher - 1186-13313.log +0 -9
- data/spec/support/logs/Dispatcher - 1328-54360.log +0 -19
- data/spec/support/logs/Dispatcher - 1338-50709.log +0 -21
- data/spec/support/logs/Dispatcher - 1347-36899.log +0 -15
- data/spec/support/logs/Dispatcher - 1362-31178.log +0 -19
- data/spec/support/logs/Dispatcher - 1374-11925.log +0 -21
- data/spec/support/logs/Dispatcher - 1384-20223.log +0 -15
- data/spec/support/logs/Dispatcher - 1575-41606.log +0 -17
- data/spec/support/logs/Dispatcher - 1585-60468.log +0 -21
- data/spec/support/logs/Dispatcher - 1594-55347.log +0 -13
- data/spec/support/logs/Dispatcher - 1607-32309.log +0 -19
- data/spec/support/logs/Dispatcher - 1616-38493.log +0 -21
- data/spec/support/logs/Dispatcher - 1625-44887.log +0 -15
- data/spec/support/logs/Dispatcher - 1677-56065.log +0 -17
- data/spec/support/logs/Dispatcher - 1686-61752.log +0 -21
- data/spec/support/logs/Dispatcher - 1698-55714.log +0 -13
- data/spec/support/logs/Dispatcher - 1711-14301.log +0 -17
- data/spec/support/logs/Dispatcher - 1720-52378.log +0 -21
- data/spec/support/logs/Dispatcher - 1729-22756.log +0 -13
- data/spec/support/logs/Dispatcher - 2016-10522.log +0 -19
- data/spec/support/logs/Dispatcher - 2025-12440.log +0 -21
- data/spec/support/logs/Dispatcher - 2034-6928.log +0 -15
- data/spec/support/logs/Dispatcher - 2058-54432.log +0 -21
- data/spec/support/logs/Dispatcher - 2067-19379.log +0 -25
- data/spec/support/logs/Dispatcher - 2076-43318.log +0 -15
- data/spec/support/logs/Dispatcher - 2112-16482.log +0 -17
- data/spec/support/logs/Dispatcher - 2121-7790.log +0 -21
- data/spec/support/logs/Dispatcher - 2130-18423.log +0 -13
- data/spec/support/logs/Dispatcher - 2145-13060.log +0 -21
- data/spec/support/logs/Dispatcher - 2154-42433.log +0 -25
- data/spec/support/logs/Dispatcher - 2163-55198.log +0 -15
- data/spec/support/logs/Dispatcher - 2199-19221.log +0 -17
- data/spec/support/logs/Dispatcher - 2208-27404.log +0 -21
- data/spec/support/logs/Dispatcher - 2217-34366.log +0 -13
- data/spec/support/logs/Dispatcher - 2230-52868.log +0 -17
- data/spec/support/logs/Dispatcher - 2239-1425.log +0 -21
- data/spec/support/logs/Dispatcher - 2248-34228.log +0 -13
- data/spec/support/logs/Dispatcher - 23550-62617.log +0 -9
- data/spec/support/logs/Dispatcher - 23577-56565.log +0 -21
- data/spec/support/logs/Dispatcher - 23734-28957.log +0 -9
- data/spec/support/logs/Dispatcher - 23744-12387.log +0 -19
- data/spec/support/logs/Dispatcher - 23753-8683.log +0 -17
- data/spec/support/logs/Dispatcher - 23762-7032.log +0 -13
- data/spec/support/logs/Dispatcher - 23771-13735.log +0 -9
- data/spec/support/logs/Dispatcher - 23780-6422.log +0 -9
- data/spec/support/logs/Dispatcher - 23789-37971.log +0 -11
- data/spec/support/logs/Dispatcher - 23802-4861.log +0 -11
- data/spec/support/logs/Dispatcher - 23815-27068.log +0 -35
- data/spec/support/logs/Dispatcher - 23900-13978.log +0 -21
- data/spec/support/logs/Dispatcher - 23928-16013.log +0 -21
- data/spec/support/logs/Dispatcher - 23952-10950.log +0 -23
- data/spec/support/logs/Dispatcher - 24002-6528.log +0 -19
- data/spec/support/logs/Dispatcher - 24011-65281.log +0 -17
- data/spec/support/logs/Dispatcher - 24020-51743.log +0 -15
- data/spec/support/logs/Dispatcher - 24033-26547.log +0 -11
- data/spec/support/logs/Dispatcher - 24046-57891.log +0 -9
- data/spec/support/logs/Dispatcher - 24055-65062.log +0 -9
- data/spec/support/logs/Dispatcher - 24064-19057.log +0 -9
- data/spec/support/logs/Dispatcher - 24073-54430.log +0 -9
- data/spec/support/logs/Dispatcher - 24082-25596.log +0 -11
- data/spec/support/logs/Dispatcher - 24095-43694.log +0 -9
- data/spec/support/logs/Dispatcher - 24104-17121.log +0 -9
- data/spec/support/logs/Dispatcher - 24158-40106.log +0 -63
- data/spec/support/logs/Dispatcher - 24167-21385.log +0 -43
- data/spec/support/logs/Dispatcher - 24176-6454.log +0 -39
- data/spec/support/logs/Dispatcher - 24185-5125.log +0 -34
- data/spec/support/logs/Dispatcher - 24194-57640.log +0 -28
- data/spec/support/logs/Dispatcher - 24203-3500.log +0 -21
- data/spec/support/logs/Dispatcher - 24212-26331.log +0 -13
- data/spec/support/logs/Dispatcher - 24222-65421.log +0 -9
- data/spec/support/logs/Dispatcher - 24764-27994.log +0 -19
- data/spec/support/logs/Dispatcher - 24774-32543.log +0 -21
- data/spec/support/logs/Dispatcher - 24783-19136.log +0 -15
- data/spec/support/logs/Dispatcher - 24796-60141.log +0 -19
- data/spec/support/logs/Dispatcher - 24805-24219.log +0 -21
- data/spec/support/logs/Dispatcher - 24814-22343.log +0 -15
- data/spec/support/logs/Dispatcher - 24933-3408.log +0 -17
- data/spec/support/logs/Dispatcher - 24942-62948.log +0 -21
- data/spec/support/logs/Dispatcher - 24951-32294.log +0 -13
- data/spec/support/logs/Dispatcher - 24964-62518.log +0 -19
- data/spec/support/logs/Dispatcher - 24973-13438.log +0 -21
- data/spec/support/logs/Dispatcher - 24982-14621.log +0 -15
- data/spec/support/logs/Dispatcher - 25033-2920.log +0 -17
- data/spec/support/logs/Dispatcher - 25043-58761.log +0 -21
- data/spec/support/logs/Dispatcher - 25052-29212.log +0 -13
- data/spec/support/logs/Dispatcher - 25066-41541.log +0 -17
- data/spec/support/logs/Dispatcher - 25075-37989.log +0 -21
- data/spec/support/logs/Dispatcher - 25084-11499.log +0 -13
- data/spec/support/logs/Dispatcher - 25311-26011.log +0 -19
- data/spec/support/logs/Dispatcher - 25320-24733.log +0 -21
- data/spec/support/logs/Dispatcher - 25329-29047.log +0 -15
- data/spec/support/logs/Dispatcher - 25353-46711.log +0 -21
- data/spec/support/logs/Dispatcher - 25362-36226.log +0 -25
- data/spec/support/logs/Dispatcher - 25371-56232.log +0 -15
- data/spec/support/logs/Dispatcher - 25407-3246.log +0 -17
- data/spec/support/logs/Dispatcher - 25416-34890.log +0 -21
- data/spec/support/logs/Dispatcher - 25425-15634.log +0 -13
- data/spec/support/logs/Dispatcher - 25438-34664.log +0 -21
- data/spec/support/logs/Dispatcher - 25447-3660.log +0 -25
- data/spec/support/logs/Dispatcher - 25456-8081.log +0 -15
- data/spec/support/logs/Dispatcher - 25492-10542.log +0 -17
- data/spec/support/logs/Dispatcher - 25501-45084.log +0 -21
- data/spec/support/logs/Dispatcher - 25510-35194.log +0 -13
- data/spec/support/logs/Dispatcher - 25519-53450.log +0 -17
- data/spec/support/logs/Dispatcher - 25532-55565.log +0 -21
- data/spec/support/logs/Dispatcher - 25541-6244.log +0 -13
- data/spec/support/logs/Dispatcher - 28179-60102.log +0 -9
- data/spec/support/logs/Dispatcher - 28206-59109.log +0 -21
- data/spec/support/logs/Dispatcher - 28347-64968.log +0 -9
- data/spec/support/logs/Dispatcher - 28357-36177.log +0 -19
- data/spec/support/logs/Dispatcher - 28366-50815.log +0 -17
- data/spec/support/logs/Dispatcher - 28375-20163.log +0 -13
- data/spec/support/logs/Dispatcher - 28384-40303.log +0 -9
- data/spec/support/logs/Dispatcher - 28393-26451.log +0 -9
- data/spec/support/logs/Dispatcher - 28402-18767.log +0 -11
- data/spec/support/logs/Dispatcher - 28415-56936.log +0 -11
- data/spec/support/logs/Dispatcher - 28428-4219.log +0 -35
- data/spec/support/logs/Dispatcher - 28489-21241.log +0 -21
- data/spec/support/logs/Dispatcher - 28498-4440.log +0 -21
- data/spec/support/logs/Dispatcher - 28507-56565.log +0 -23
- data/spec/support/logs/Dispatcher - 28548-64105.log +0 -19
- data/spec/support/logs/Dispatcher - 28557-9265.log +0 -17
- data/spec/support/logs/Dispatcher - 28566-60378.log +0 -15
- data/spec/support/logs/Dispatcher - 28580-47697.log +0 -11
- data/spec/support/logs/Dispatcher - 28593-45818.log +0 -9
- data/spec/support/logs/Dispatcher - 28603-24718.log +0 -9
- data/spec/support/logs/Dispatcher - 28612-10811.log +0 -9
- data/spec/support/logs/Dispatcher - 28621-30580.log +0 -9
- data/spec/support/logs/Dispatcher - 28642-14288.log +0 -11
- data/spec/support/logs/Dispatcher - 28657-46406.log +0 -9
- data/spec/support/logs/Dispatcher - 28666-48831.log +0 -9
- data/spec/support/logs/Dispatcher - 28723-34387.log +0 -63
- data/spec/support/logs/Dispatcher - 28732-54101.log +0 -43
- data/spec/support/logs/Dispatcher - 28741-5251.log +0 -39
- data/spec/support/logs/Dispatcher - 28750-8280.log +0 -34
- data/spec/support/logs/Dispatcher - 28759-38308.log +0 -28
- data/spec/support/logs/Dispatcher - 28768-65028.log +0 -21
- data/spec/support/logs/Dispatcher - 28777-56986.log +0 -13
- data/spec/support/logs/Dispatcher - 28787-15576.log +0 -9
- data/spec/support/logs/Dispatcher - 28994-50422.log +0 -19
- data/spec/support/logs/Dispatcher - 29004-46776.log +0 -21
- data/spec/support/logs/Dispatcher - 29013-21266.log +0 -15
- data/spec/support/logs/Dispatcher - 29026-3603.log +0 -19
- data/spec/support/logs/Dispatcher - 29035-17800.log +0 -21
- data/spec/support/logs/Dispatcher - 29044-7103.log +0 -15
- data/spec/support/logs/Dispatcher - 29165-63459.log +0 -17
- data/spec/support/logs/Dispatcher - 29174-14377.log +0 -21
- data/spec/support/logs/Dispatcher - 29183-49752.log +0 -13
- data/spec/support/logs/Dispatcher - 29196-55000.log +0 -19
- data/spec/support/logs/Dispatcher - 29205-33060.log +0 -21
- data/spec/support/logs/Dispatcher - 29214-62279.log +0 -15
- data/spec/support/logs/Dispatcher - 29269-40689.log +0 -17
- data/spec/support/logs/Dispatcher - 29278-10110.log +0 -21
- data/spec/support/logs/Dispatcher - 29288-55076.log +0 -13
- data/spec/support/logs/Dispatcher - 29301-13242.log +0 -17
- data/spec/support/logs/Dispatcher - 29310-21310.log +0 -21
- data/spec/support/logs/Dispatcher - 29319-62724.log +0 -13
- data/spec/support/logs/Dispatcher - 29568-37063.log +0 -19
- data/spec/support/logs/Dispatcher - 29577-56333.log +0 -21
- data/spec/support/logs/Dispatcher - 29586-49998.log +0 -15
- data/spec/support/logs/Dispatcher - 29611-63916.log +0 -21
- data/spec/support/logs/Dispatcher - 29620-29551.log +0 -25
- data/spec/support/logs/Dispatcher - 29629-49377.log +0 -15
- data/spec/support/logs/Dispatcher - 29665-40270.log +0 -17
- data/spec/support/logs/Dispatcher - 29674-61313.log +0 -21
- data/spec/support/logs/Dispatcher - 29683-33859.log +0 -13
- data/spec/support/logs/Dispatcher - 29696-38359.log +0 -21
- data/spec/support/logs/Dispatcher - 29705-30896.log +0 -25
- data/spec/support/logs/Dispatcher - 29714-17665.log +0 -15
- data/spec/support/logs/Dispatcher - 29752-63853.log +0 -17
- data/spec/support/logs/Dispatcher - 29761-3448.log +0 -21
- data/spec/support/logs/Dispatcher - 29770-31902.log +0 -13
- data/spec/support/logs/Dispatcher - 29783-47589.log +0 -17
- data/spec/support/logs/Dispatcher - 29792-8436.log +0 -21
- data/spec/support/logs/Dispatcher - 29801-9350.log +0 -13
- data/spec/support/logs/Dispatcher - 339-13552.log +0 -9
- data/spec/support/logs/Dispatcher - 384-22932.log +0 -21
- data/spec/support/logs/Dispatcher - 744-9325.log +0 -9
- data/spec/support/logs/Dispatcher - 754-41076.log +0 -19
- data/spec/support/logs/Dispatcher - 763-49534.log +0 -17
- data/spec/support/logs/Dispatcher - 772-59109.log +0 -13
- data/spec/support/logs/Dispatcher - 782-41178.log +0 -9
- data/spec/support/logs/Dispatcher - 791-11829.log +0 -9
- data/spec/support/logs/Dispatcher - 800-47866.log +0 -11
- data/spec/support/logs/Dispatcher - 814-16120.log +0 -11
- data/spec/support/logs/Dispatcher - 827-2111.log +0 -35
- data/spec/support/logs/Dispatcher - 889-13083.log +0 -21
- data/spec/support/logs/Dispatcher - 898-53883.log +0 -21
- data/spec/support/logs/Dispatcher - 911-41959.log +0 -23
- data/spec/support/logs/Dispatcher - 955-24486.log +0 -19
- data/spec/support/logs/Dispatcher - 965-25535.log +0 -17
- data/spec/support/logs/Dispatcher - 974-14231.log +0 -15
- data/spec/support/logs/Dispatcher - 987-5144.log +0 -11
- data/spec/support/logs/Instance - 1343-24327.error.log +0 -328
- data/spec/support/logs/Instance - 1694-39251.error.log +0 -328
- data/spec/support/logs/Instance - 1725-15789.error.log +0 -427
- data/spec/support/logs/Instance - 1766-53560.error.log +0 -326
- data/spec/support/logs/Instance - 1773-12955.error.log +0 -328
- data/spec/support/logs/Instance - 1948-11071.error.log +0 -326
- data/spec/support/logs/Instance - 24779-49625.error.log +0 -328
- data/spec/support/logs/Instance - 25048-11380.error.log +0 -328
- data/spec/support/logs/Instance - 25080-24917.error.log +0 -427
- data/spec/support/logs/Instance - 25106-33475.error.log +0 -326
- data/spec/support/logs/Instance - 25112-54559.error.log +0 -328
- data/spec/support/logs/Instance - 25242-65202.error.log +0 -326
- data/spec/support/logs/Instance - 29009-57043.error.log +0 -328
- data/spec/support/logs/Instance - 29283-31439.error.log +0 -328
- data/spec/support/logs/Instance - 29315-55609.error.log +0 -427
- data/spec/support/logs/Instance - 29341-7004.error.log +0 -326
- data/spec/support/logs/Instance - 29347-6024.error.log +0 -328
- 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
|
-
|
|
4
|
+
NGVjNDkxZDVkMmEyM2I5ODAxZjg0ZDI0NTk2NjBkNWY0MDIyMTZhZg==
|
|
5
5
|
data.tar.gz: !binary |-
|
|
6
|
-
|
|
6
|
+
M2Y1NGFjN2EzNTBhMDRiYmI4ZDc1ZTY1ZTY4NmRhZGFhMTE3MWQ3NA==
|
|
7
7
|
!binary "U0hBNTEy":
|
|
8
8
|
metadata.gz: !binary |-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
N2MwNzBhYzQ5NGJiYjhlYzZiNjMwMWE2ZjQ0NzEzNWY0MDI1YmNhYmFjMTk0
|
|
10
|
+
MWMyOGVkODRlMzczODNhZWJkNmJkNTJlNDllZjEzZTJiMzUyMjI5NzhkMzMz
|
|
11
|
+
N2NlNjA0YTc2YzUyNjU3MDdiMmE2OTExZDU3YmIwY2E1NDU1YTc=
|
|
12
12
|
data.tar.gz: !binary |-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
NDAyNGRiNjVhMTY5ZTk4MDJiMzMxMWEyNDljZjgwODk1NzMyOGQ2NWM3Yzcy
|
|
14
|
+
NmExYzc1MGFjYWFmOTAwMDdjYjY3NGZkMDc5ZDQ1M2ZjNWY3ZjJkMTc2MGUx
|
|
15
|
+
YmQzNTY3MWMzNjE3YTIxN2M1NGJkMjE3MjJhMTc5MjVlZTVlNzM=
|
data/CHANGELOG.md
CHANGED
|
@@ -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.
|
|
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
|
-
# :
|
|
56
|
-
#
|
|
57
|
-
#
|
|
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 `
|
|
65
|
-
# * let `
|
|
66
|
-
# * let `
|
|
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
|
-
#
|
|
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<
|
|
83
|
-
#
|
|
84
|
-
#
|
|
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
|
|
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
|
-
|
|
110
|
-
|
|
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
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
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
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
opts[:
|
|
143
|
-
|
|
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
|
-
#
|
|
130
|
+
# Submit the mutation and store the response.
|
|
149
131
|
elem.submit( opts ) do |res|
|
|
150
|
-
responses[
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
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
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
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
|
-
|
|
182
|
-
#
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
responses
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
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
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
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
|
data/lib/arachni/framework.rb
CHANGED
|
@@ -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
|
-
#
|
|
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
|
data/lib/arachni/http.rb
CHANGED
|
@@ -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
|
|
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
|