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