arachni 0.4.6 → 0.4.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/CHANGELOG.md +21 -0
- data/Gemfile +1 -1
- data/README.md +1 -1
- data/lib/arachni/element/capabilities/auditable/taint.rb +1 -0
- data/lib/arachni/element/form.rb +4 -6
- data/lib/arachni/http.rb +1 -0
- data/lib/arachni/parser.rb +1 -1
- data/lib/arachni/spider.rb +14 -2
- data/lib/version +1 -1
- data/modules/audit/code_injection.rb +36 -10
- data/modules/audit/code_injection_php_input_wrapper.rb +38 -5
- data/modules/audit/code_injection_timing.rb +36 -13
- data/modules/audit/csrf.rb +41 -11
- data/modules/audit/file_inclusion.rb +36 -6
- data/modules/audit/ldapi.rb +31 -6
- data/modules/audit/os_cmd_injection.rb +28 -7
- data/modules/audit/os_cmd_injection_timing.rb +29 -15
- data/modules/audit/path_traversal.rb +42 -6
- data/modules/audit/response_splitting.rb +26 -9
- data/modules/audit/rfi.rb +37 -9
- data/modules/audit/session_fixation.rb +38 -7
- data/modules/audit/source_code_disclosure.rb +41 -5
- data/modules/audit/sqli.rb +57 -6
- data/modules/audit/sqli_blind_rdiff.rb +54 -9
- data/modules/audit/sqli_blind_timing.rb +58 -15
- data/modules/audit/unvalidated_redirect.rb +29 -9
- data/modules/audit/xpath.rb +35 -8
- data/modules/audit/xss.rb +54 -9
- data/modules/audit/xss_event.rb +54 -10
- data/modules/audit/xss_path.rb +56 -9
- data/modules/audit/xss_script_tag.rb +54 -8
- data/modules/audit/xss_tag.rb +53 -7
- data/modules/recon/allowed_methods.rb +24 -4
- data/modules/recon/backdoors.rb +29 -11
- data/modules/recon/backup_files.rb +30 -14
- data/modules/recon/common_directories.rb +27 -8
- data/modules/recon/common_files.rb +27 -7
- data/modules/recon/directory_listing.rb +30 -10
- data/modules/recon/grep/captcha.rb +26 -8
- data/modules/recon/grep/credit_card.rb +25 -6
- data/modules/recon/grep/cvs_svn_users.rb +23 -6
- data/modules/recon/grep/emails.rb +28 -8
- data/modules/recon/grep/form_upload.rb +31 -6
- data/modules/recon/grep/http_only_cookies.rb +33 -8
- data/modules/recon/grep/insecure_cookies.rb +36 -9
- data/modules/recon/grep/mixed_resource.rb +29 -9
- data/modules/recon/grep/password_autocomplete.rb +33 -6
- data/modules/recon/grep/private_ip.rb +21 -7
- data/modules/recon/grep/ssn.rb +17 -6
- data/modules/recon/grep/unencrypted_password_forms.rb +28 -9
- data/modules/recon/htaccess_limit.rb +23 -8
- data/modules/recon/http_put.rb +29 -7
- data/modules/recon/interesting_responses.rb +8 -10
- data/modules/recon/localstart_asp.rb +35 -5
- data/modules/recon/webdav.rb +23 -7
- data/modules/recon/x_forwarded_for_access_restriction_bypass.rb +27 -6
- data/modules/recon/xst.rb +26 -5
- data/plugins/autologin.rb +16 -5
- data/plugins/proxy/server.rb +2 -9
- data/spec/external/wavsep/active/lfi_spec.rb +6 -6
- data/spec/external/wavsep/active/rfi_spec.rb +6 -6
- data/spec/external/wavsep/active/sqli_spec.rb +4 -4
- data/spec/external/wavsep/active/xss_spec.rb +1 -1
- data/spec/support/logs/Dispatcher - 1332-56847.log +9 -0
- data/spec/support/logs/Dispatcher - 1361-63434.log +21 -0
- data/spec/support/logs/Dispatcher - 1545-55308.log +9 -0
- data/spec/support/logs/Dispatcher - 1559-18938.log +19 -0
- data/spec/support/logs/Dispatcher - 1568-25013.log +17 -0
- data/spec/support/logs/Dispatcher - 1577-55689.log +13 -0
- data/spec/support/logs/Dispatcher - 1586-18577.log +9 -0
- data/spec/support/logs/Dispatcher - 1595-49353.log +9 -0
- data/spec/support/logs/Dispatcher - 1604-27831.log +11 -0
- data/spec/support/logs/Dispatcher - 1617-57444.log +11 -0
- data/spec/support/logs/Dispatcher - 1631-28737.log +11 -0
- data/spec/support/logs/Dispatcher - 1644-21815.log +33 -0
- data/spec/support/logs/Dispatcher - 1738-53470.log +21 -0
- data/spec/support/logs/Dispatcher - 1747-64173.log +21 -0
- data/spec/support/logs/Dispatcher - 1756-11866.log +23 -0
- data/spec/support/logs/Dispatcher - 1798-12175.log +19 -0
- data/spec/support/logs/Dispatcher - 1807-22790.log +17 -0
- data/spec/support/logs/Dispatcher - 1816-57823.log +15 -0
- data/spec/support/logs/Dispatcher - 1831-64825.log +11 -0
- data/spec/support/logs/Dispatcher - 1845-27623.log +9 -0
- data/spec/support/logs/Dispatcher - 1854-26066.log +9 -0
- data/spec/support/logs/Dispatcher - 1863-37486.log +9 -0
- data/spec/support/logs/Dispatcher - 1874-22463.log +9 -0
- data/spec/support/logs/Dispatcher - 1883-41263.log +11 -0
- data/spec/support/logs/Dispatcher - 1900-53660.log +9 -0
- data/spec/support/logs/Dispatcher - 1909-44423.log +9 -0
- data/spec/support/logs/Dispatcher - 1921-58931.log +9 -0
- data/spec/support/logs/Dispatcher - 1993-6448.log +63 -0
- data/spec/support/logs/Dispatcher - 2002-19206.log +43 -0
- data/spec/support/logs/Dispatcher - 2011-11852.log +39 -0
- data/spec/support/logs/Dispatcher - 2020-65055.log +34 -0
- data/spec/support/logs/Dispatcher - 2029-48445.log +28 -0
- data/spec/support/logs/Dispatcher - 2038-55271.log +21 -0
- data/spec/support/logs/Dispatcher - 2047-45722.log +13 -0
- data/spec/support/logs/Dispatcher - 2057-48194.log +9 -0
- data/spec/support/logs/Dispatcher - 2189-39843.log +19 -0
- data/spec/support/logs/Dispatcher - 2199-15985.log +21 -0
- data/spec/support/logs/Dispatcher - 2208-22080.log +15 -0
- data/spec/support/logs/Dispatcher - 2221-37690.log +19 -0
- data/spec/support/logs/Dispatcher - 2230-47867.log +21 -0
- data/spec/support/logs/Dispatcher - 2239-27060.log +15 -0
- data/spec/support/logs/Dispatcher - 2358-8967.log +17 -0
- data/spec/support/logs/Dispatcher - 2367-27103.log +21 -0
- data/spec/support/logs/Dispatcher - 2376-16287.log +13 -0
- data/spec/support/logs/Dispatcher - 2389-9109.log +19 -0
- data/spec/support/logs/Dispatcher - 2398-62926.log +21 -0
- data/spec/support/logs/Dispatcher - 2407-48685.log +15 -0
- data/spec/support/logs/Dispatcher - 2459-62480.log +17 -0
- data/spec/support/logs/Dispatcher - 2470-57894.log +21 -0
- data/spec/support/logs/Dispatcher - 2479-51883.log +13 -0
- data/spec/support/logs/Dispatcher - 2493-36944.log +17 -0
- data/spec/support/logs/Dispatcher - 2503-59143.log +21 -0
- data/spec/support/logs/Dispatcher - 2513-33084.log +13 -0
- data/spec/support/logs/Dispatcher - 25430-46306.log +9 -0
- data/spec/support/logs/Dispatcher - 25457-10711.log +23 -0
- data/spec/support/logs/Dispatcher - 25603-48892.log +9 -0
- data/spec/support/logs/Dispatcher - 25613-24775.log +19 -0
- data/spec/support/logs/Dispatcher - 25622-59684.log +17 -0
- data/spec/support/logs/Dispatcher - 25631-23195.log +13 -0
- data/spec/support/logs/Dispatcher - 25640-9810.log +9 -0
- data/spec/support/logs/Dispatcher - 25649-52757.log +9 -0
- data/spec/support/logs/Dispatcher - 25658-58550.log +11 -0
- data/spec/support/logs/Dispatcher - 25671-30871.log +11 -0
- data/spec/support/logs/Dispatcher - 25684-48620.log +11 -0
- data/spec/support/logs/Dispatcher - 25697-18124.log +37 -0
- data/spec/support/logs/Dispatcher - 25762-35321.log +21 -0
- data/spec/support/logs/Dispatcher - 25771-64633.log +21 -0
- data/spec/support/logs/Dispatcher - 25780-43558.log +23 -0
- data/spec/support/logs/Dispatcher - 25821-43561.log +19 -0
- data/spec/support/logs/Dispatcher - 25830-39112.log +17 -0
- data/spec/support/logs/Dispatcher - 25839-44093.log +15 -0
- data/spec/support/logs/Dispatcher - 25852-12057.log +11 -0
- data/spec/support/logs/Dispatcher - 25866-49029.log +9 -0
- data/spec/support/logs/Dispatcher - 25875-32179.log +9 -0
- data/spec/support/logs/Dispatcher - 25884-62703.log +9 -0
- data/spec/support/logs/Dispatcher - 25894-4228.log +9 -0
- data/spec/support/logs/Dispatcher - 25903-6709.log +11 -0
- data/spec/support/logs/Dispatcher - 25917-29651.log +9 -0
- data/spec/support/logs/Dispatcher - 25926-12708.log +9 -0
- data/spec/support/logs/Dispatcher - 25935-54092.log +9 -0
- data/spec/support/logs/Dispatcher - 25990-26756.log +63 -0
- data/spec/support/logs/Dispatcher - 25999-4016.log +43 -0
- data/spec/support/logs/Dispatcher - 26008-52076.log +39 -0
- data/spec/support/logs/Dispatcher - 26017-48497.log +34 -0
- data/spec/support/logs/Dispatcher - 26026-28839.log +28 -0
- data/spec/support/logs/Dispatcher - 26035-54215.log +21 -0
- data/spec/support/logs/Dispatcher - 26044-27216.log +13 -0
- data/spec/support/logs/Dispatcher - 26054-53464.log +9 -0
- data/spec/support/logs/Dispatcher - 26163-65271.log +19 -0
- data/spec/support/logs/Dispatcher - 26173-58105.log +21 -0
- data/spec/support/logs/Dispatcher - 26182-40848.log +15 -0
- data/spec/support/logs/Dispatcher - 26195-2855.log +19 -0
- data/spec/support/logs/Dispatcher - 26204-35297.log +21 -0
- data/spec/support/logs/Dispatcher - 26213-59588.log +15 -0
- data/spec/support/logs/Dispatcher - 26333-40774.log +17 -0
- data/spec/support/logs/Dispatcher - 26342-45541.log +21 -0
- data/spec/support/logs/Dispatcher - 26351-3349.log +13 -0
- data/spec/support/logs/Dispatcher - 26364-37456.log +19 -0
- data/spec/support/logs/Dispatcher - 26373-37340.log +21 -0
- data/spec/support/logs/Dispatcher - 26382-54864.log +15 -0
- data/spec/support/logs/Dispatcher - 26434-3070.log +17 -0
- data/spec/support/logs/Dispatcher - 26448-14295.log +21 -0
- data/spec/support/logs/Dispatcher - 26474-30587.log +13 -0
- data/spec/support/logs/Dispatcher - 26500-32529.log +17 -0
- data/spec/support/logs/Dispatcher - 26509-16952.log +21 -0
- data/spec/support/logs/Dispatcher - 26519-43332.log +13 -0
- data/spec/support/logs/Dispatcher - 26750-61867.log +19 -0
- data/spec/support/logs/Dispatcher - 26759-22532.log +21 -0
- data/spec/support/logs/Dispatcher - 26768-18231.log +15 -0
- data/spec/support/logs/Dispatcher - 26792-41661.log +21 -0
- data/spec/support/logs/Dispatcher - 26801-14384.log +25 -0
- data/spec/support/logs/Dispatcher - 26810-2591.log +15 -0
- data/spec/support/logs/Dispatcher - 26846-14591.log +17 -0
- data/spec/support/logs/Dispatcher - 26855-15708.log +21 -0
- data/spec/support/logs/Dispatcher - 26864-2062.log +13 -0
- data/spec/support/logs/Dispatcher - 26877-14471.log +21 -0
- data/spec/support/logs/Dispatcher - 26886-49795.log +25 -0
- data/spec/support/logs/Dispatcher - 26895-21093.log +15 -0
- data/spec/support/logs/Dispatcher - 26931-30049.log +17 -0
- data/spec/support/logs/Dispatcher - 26940-34273.log +21 -0
- data/spec/support/logs/Dispatcher - 26949-30040.log +13 -0
- data/spec/support/logs/Dispatcher - 26962-8152.log +17 -0
- data/spec/support/logs/Dispatcher - 26971-53062.log +21 -0
- data/spec/support/logs/Dispatcher - 26980-7548.log +13 -0
- data/spec/support/logs/Dispatcher - 2737-20989.log +19 -0
- data/spec/support/logs/Dispatcher - 2746-5423.log +21 -0
- data/spec/support/logs/Dispatcher - 2755-53393.log +15 -0
- data/spec/support/logs/Dispatcher - 27615-41812.log +19 -0
- data/spec/support/logs/Dispatcher - 27624-43683.log +21 -0
- data/spec/support/logs/Dispatcher - 27633-11593.log +15 -0
- data/spec/support/logs/Dispatcher - 27658-12186.log +21 -0
- data/spec/support/logs/Dispatcher - 27667-15575.log +25 -0
- data/spec/support/logs/Dispatcher - 27676-17207.log +15 -0
- data/spec/support/logs/Dispatcher - 27712-2233.log +17 -0
- data/spec/support/logs/Dispatcher - 27721-3842.log +21 -0
- data/spec/support/logs/Dispatcher - 27730-22695.log +13 -0
- data/spec/support/logs/Dispatcher - 27743-8364.log +21 -0
- data/spec/support/logs/Dispatcher - 27752-6140.log +25 -0
- data/spec/support/logs/Dispatcher - 27761-25015.log +15 -0
- data/spec/support/logs/Dispatcher - 27797-9270.log +17 -0
- data/spec/support/logs/Dispatcher - 2780-58168.log +21 -0
- data/spec/support/logs/Dispatcher - 27806-48623.log +21 -0
- data/spec/support/logs/Dispatcher - 27815-58778.log +13 -0
- data/spec/support/logs/Dispatcher - 27828-29742.log +17 -0
- data/spec/support/logs/Dispatcher - 27837-46211.log +21 -0
- data/spec/support/logs/Dispatcher - 27846-16143.log +13 -0
- data/spec/support/logs/Dispatcher - 2789-29375.log +25 -0
- data/spec/support/logs/Dispatcher - 2798-10983.log +15 -0
- data/spec/support/logs/Dispatcher - 2836-2354.log +17 -0
- data/spec/support/logs/Dispatcher - 2845-65341.log +21 -0
- data/spec/support/logs/Dispatcher - 2854-18936.log +13 -0
- data/spec/support/logs/Dispatcher - 2867-51979.log +21 -0
- data/spec/support/logs/Dispatcher - 2876-21086.log +25 -0
- data/spec/support/logs/Dispatcher - 2887-17393.log +15 -0
- data/spec/support/logs/Dispatcher - 2930-37394.log +17 -0
- data/spec/support/logs/Dispatcher - 2943-46737.log +21 -0
- data/spec/support/logs/Dispatcher - 2956-37866.log +13 -0
- data/spec/support/logs/Dispatcher - 2976-21012.log +17 -0
- data/spec/support/logs/Dispatcher - 2990-48082.log +21 -0
- data/spec/support/logs/Dispatcher - 2999-16391.log +13 -0
- data/spec/support/logs/{Instance - 10762-33696.error.log → Instance - 2204-45164.error.log } +59 -40
- data/spec/support/logs/{Instance - 11038-18065.error.log → Instance - 2475-49789.error.log } +61 -42
- data/spec/support/logs/{Instance - 11069-34848.error.log → Instance - 2509-39450.error.log } +158 -139
- data/spec/support/logs/{Instance - 11229-38634.error.log → Instance - 2533-5785.error.log } +56 -37
- data/spec/support/logs/Instance - 2539-42941.error.log +356 -0
- data/spec/support/logs/Instance - 26178-57631.error.log +324 -0
- data/spec/support/logs/Instance - 26458-60253.error.log +326 -0
- data/spec/support/logs/Instance - 26514-44685.error.log +423 -0
- data/spec/support/logs/Instance - 26538-43093.error.log +322 -0
- data/spec/support/logs/Instance - 26544-52217.error.log +328 -0
- data/spec/support/logs/{Instance - 11097-33191.error.log → Instance - 26682-37056.error.log } +65 -57
- data/spec/support/logs/{Instance - 11091-33954.error.log → Instance - 2669-56818.error.log } +56 -37
- data/spec/support/logs/Instance - 27547-3928.error.log +309 -0
- data/spec/support/servers/plugins/autologin.rb +13 -1
- metadata +974 -782
- data/spec/support/logs/Dispatcher - 10129-46995.log +0 -9
- data/spec/support/logs/Dispatcher - 10139-63648.log +0 -19
- data/spec/support/logs/Dispatcher - 10149-5551.log +0 -17
- data/spec/support/logs/Dispatcher - 10158-34385.log +0 -13
- data/spec/support/logs/Dispatcher - 10167-55701.log +0 -9
- data/spec/support/logs/Dispatcher - 10176-8922.log +0 -9
- data/spec/support/logs/Dispatcher - 10185-53716.log +0 -11
- data/spec/support/logs/Dispatcher - 10198-44724.log +0 -11
- data/spec/support/logs/Dispatcher - 10211-7697.log +0 -11
- data/spec/support/logs/Dispatcher - 10224-3751.log +0 -35
- data/spec/support/logs/Dispatcher - 10285-7404.log +0 -21
- data/spec/support/logs/Dispatcher - 10294-56221.log +0 -21
- data/spec/support/logs/Dispatcher - 10303-2483.log +0 -23
- data/spec/support/logs/Dispatcher - 10344-60543.log +0 -19
- data/spec/support/logs/Dispatcher - 10355-31708.log +0 -17
- data/spec/support/logs/Dispatcher - 10364-63170.log +0 -15
- data/spec/support/logs/Dispatcher - 10377-37936.log +0 -11
- data/spec/support/logs/Dispatcher - 10390-37511.log +0 -9
- data/spec/support/logs/Dispatcher - 10400-29603.log +0 -9
- data/spec/support/logs/Dispatcher - 10409-57042.log +0 -9
- data/spec/support/logs/Dispatcher - 10418-17812.log +0 -9
- data/spec/support/logs/Dispatcher - 10427-59862.log +0 -11
- data/spec/support/logs/Dispatcher - 10440-48351.log +0 -9
- data/spec/support/logs/Dispatcher - 10449-24218.log +0 -9
- data/spec/support/logs/Dispatcher - 10458-54646.log +0 -9
- data/spec/support/logs/Dispatcher - 10511-3333.log +0 -63
- data/spec/support/logs/Dispatcher - 10520-50009.log +0 -43
- data/spec/support/logs/Dispatcher - 10529-44870.log +0 -39
- data/spec/support/logs/Dispatcher - 10538-49556.log +0 -34
- data/spec/support/logs/Dispatcher - 10547-61887.log +0 -28
- data/spec/support/logs/Dispatcher - 10556-31163.log +0 -21
- data/spec/support/logs/Dispatcher - 10565-40008.log +0 -13
- data/spec/support/logs/Dispatcher - 10575-18836.log +0 -9
- data/spec/support/logs/Dispatcher - 10747-32268.log +0 -19
- data/spec/support/logs/Dispatcher - 10757-4081.log +0 -21
- data/spec/support/logs/Dispatcher - 10766-49190.log +0 -15
- data/spec/support/logs/Dispatcher - 10780-46610.log +0 -19
- data/spec/support/logs/Dispatcher - 10789-5332.log +0 -21
- data/spec/support/logs/Dispatcher - 10798-56243.log +0 -15
- data/spec/support/logs/Dispatcher - 10920-32037.log +0 -17
- data/spec/support/logs/Dispatcher - 10929-35662.log +0 -21
- data/spec/support/logs/Dispatcher - 10938-64010.log +0 -13
- data/spec/support/logs/Dispatcher - 10951-44746.log +0 -19
- data/spec/support/logs/Dispatcher - 10961-55791.log +0 -21
- data/spec/support/logs/Dispatcher - 10972-58913.log +0 -15
- data/spec/support/logs/Dispatcher - 11023-45004.log +0 -17
- data/spec/support/logs/Dispatcher - 11033-55505.log +0 -21
- data/spec/support/logs/Dispatcher - 11042-46123.log +0 -13
- data/spec/support/logs/Dispatcher - 11055-26836.log +0 -17
- data/spec/support/logs/Dispatcher - 11064-60361.log +0 -21
- data/spec/support/logs/Dispatcher - 11073-17507.log +0 -13
- data/spec/support/logs/Dispatcher - 11298-28357.log +0 -19
- data/spec/support/logs/Dispatcher - 11307-62669.log +0 -21
- data/spec/support/logs/Dispatcher - 11316-9391.log +0 -15
- data/spec/support/logs/Dispatcher - 11340-45921.log +0 -21
- data/spec/support/logs/Dispatcher - 11349-8693.log +0 -25
- data/spec/support/logs/Dispatcher - 11358-53753.log +0 -15
- data/spec/support/logs/Dispatcher - 11394-29437.log +0 -17
- data/spec/support/logs/Dispatcher - 11403-59953.log +0 -21
- data/spec/support/logs/Dispatcher - 11412-51134.log +0 -13
- data/spec/support/logs/Dispatcher - 11425-42569.log +0 -21
- data/spec/support/logs/Dispatcher - 11434-16150.log +0 -25
- data/spec/support/logs/Dispatcher - 11443-19072.log +0 -15
- data/spec/support/logs/Dispatcher - 11479-39149.log +0 -17
- data/spec/support/logs/Dispatcher - 11488-42169.log +0 -21
- data/spec/support/logs/Dispatcher - 11497-29822.log +0 -13
- data/spec/support/logs/Dispatcher - 11510-8273.log +0 -17
- data/spec/support/logs/Dispatcher - 11519-18206.log +0 -21
- data/spec/support/logs/Dispatcher - 11528-55825.log +0 -13
- data/spec/support/logs/Dispatcher - 9969-52890.log +0 -9
- data/spec/support/logs/Dispatcher - 9996-38451.log +0 -21
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
ZDliMzg1ZDM5Zjc3YjU2Njg5NmY0MDVmY2I5ZmYwYzNmNmIwMTRhZA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
ZGExNDM4ZjUyMzhhOTY2MTEyODY4MThjMjQ0MDE0Njg2MTBkNTY1Yw==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
MzMyMzU2Yjg3ZjY3ZmVhZmU4ODViN2NjMTE2NDRhZjdiNTBhN2VhYTdlMWEx
|
10
|
+
MjE5ZmFkNjIzNjNmYWVkOWZmMzI1ZDBhOWFlYjY4NmFjNmVmNmI2NmZhYzE3
|
11
|
+
MTAwZDhjMDFjYmE5YWJhYmE5YzZjOTA5ZGJmM2Q3MzEzZTYzMGQ=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
ZTA0ZWFhNDE2Mjk2ODcwNjk0MWEyNjMyZGI3NGRmMTQyOGMxYTJkMzUwZDFj
|
14
|
+
Y2NlMzlmODNjNzdkNWJiODU0ZTllZjRmODQ1MjQ2Y2Y0ZTAwYzIxOGI2YjRj
|
15
|
+
ZTVlNDU4MGViZjY5ODU1ZmZlOTg0MzQyOTg4NDNmOGIwNjI0ZDY=
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,26 @@
|
|
1
1
|
# ChangeLog
|
2
2
|
|
3
|
+
## 0.4.7 _(April 12, 2014)_
|
4
|
+
|
5
|
+
- `Spider`
|
6
|
+
- Fixed mixed up status messages upon out-of-scope redirections.
|
7
|
+
- `HTTP`
|
8
|
+
- `disable_ssl_host_verification` set to `true`.
|
9
|
+
- `Element`
|
10
|
+
- `Capabilities::Auditable::Taint`
|
11
|
+
- Fixed bug when checking for trust level of issue when there's no match.
|
12
|
+
- `Form`
|
13
|
+
- Updated to handle empty base-href values.
|
14
|
+
- Plugins
|
15
|
+
- `autologin`
|
16
|
+
- Updated to handle stacked post-login redirects.
|
17
|
+
- Added debugging information for failed logins.
|
18
|
+
- `proxy`
|
19
|
+
- Fixed forwarding of request bodies.
|
20
|
+
- Modules
|
21
|
+
- All
|
22
|
+
- Updated descriptions and remedies.
|
23
|
+
|
3
24
|
## 0.4.6 _(January 1, 2014)_
|
4
25
|
|
5
26
|
- CLI user interfaces
|
data/Gemfile
CHANGED
data/README.md
CHANGED
data/lib/arachni/element/form.rb
CHANGED
@@ -736,12 +736,10 @@ class Form < Arachni::Element::Base
|
|
736
736
|
#
|
737
737
|
def self.from_document( url, document )
|
738
738
|
document = Nokogiri::HTML( document.to_s ) if !document.is_a?( Nokogiri::HTML::Document )
|
739
|
-
|
740
|
-
|
741
|
-
|
742
|
-
|
743
|
-
base_url = url
|
744
|
-
end
|
739
|
+
|
740
|
+
base_url = document.search( '//base[@href]' )[0]['href'] rescue nil
|
741
|
+
base_url = url if base_url.to_s.empty?
|
742
|
+
|
745
743
|
document.search( '//form' ).map do |cform|
|
746
744
|
next if !(form = form_from_element( base_url, cform ))
|
747
745
|
form.url = url
|
data/lib/arachni/http.rb
CHANGED
@@ -144,6 +144,7 @@ class HTTP
|
|
144
144
|
follow_location: false,
|
145
145
|
max_redirects: opts.redirect_limit,
|
146
146
|
disable_ssl_peer_verification: true,
|
147
|
+
disable_ssl_host_verification: true,
|
147
148
|
timeout: opts.http_timeout || HTTP_TIMEOUT,
|
148
149
|
username: opts.http_username,
|
149
150
|
password: opts.http_password
|
data/lib/arachni/parser.rb
CHANGED
@@ -333,7 +333,7 @@ class Parser
|
|
333
333
|
exception_jail( false ){ self.class.extractors[name].new.run( doc ) }
|
334
334
|
end.flatten.uniq.compact.
|
335
335
|
map { |path| to_absolute( path ) }.compact.uniq.
|
336
|
-
reject { |path| skip?( path ) }
|
336
|
+
reject { |path| path.to_s.empty? || skip?( path ) }
|
337
337
|
rescue ::Exception => e
|
338
338
|
print_error e.to_s
|
339
339
|
print_error_backtrace e
|
data/lib/arachni/spider.rb
CHANGED
@@ -417,8 +417,20 @@ class Spider
|
|
417
417
|
if res.redirection? && res.location
|
418
418
|
@redirects << res.request.url
|
419
419
|
location = to_absolute( res.location, res.request.url )
|
420
|
-
|
421
|
-
|
420
|
+
|
421
|
+
skipped = false
|
422
|
+
redir_limit = false
|
423
|
+
|
424
|
+
if (redir_limit = hit_redirect_limit?) || (skipped = skip?( location ))
|
425
|
+
|
426
|
+
if skipped
|
427
|
+
print_info "Ignoring redirection due to exclusion criteria: #{location}"
|
428
|
+
end
|
429
|
+
|
430
|
+
if redir_limit
|
431
|
+
print_info "Redirect limit reached, skipping: #{location}"
|
432
|
+
end
|
433
|
+
|
422
434
|
decrease_pending
|
423
435
|
next
|
424
436
|
end
|
data/lib/version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.4.
|
1
|
+
0.4.7
|
@@ -14,14 +14,13 @@
|
|
14
14
|
limitations under the License.
|
15
15
|
=end
|
16
16
|
|
17
|
-
#
|
18
17
|
# It's designed to work with PHP, Perl, Python, Java, ASP and Ruby
|
19
18
|
# but still needs some more testing.
|
20
19
|
#
|
21
20
|
#
|
22
21
|
# @author Tasos "Zapotek" Laskos <tasos.laskos@gmail.com>
|
23
22
|
#
|
24
|
-
# @version 0.2
|
23
|
+
# @version 0.2.1
|
25
24
|
#
|
26
25
|
# @see http://cwe.mitre.org/data/definitions/94.html
|
27
26
|
# @see http://php.net/manual/en/function.eval.php
|
@@ -29,7 +28,6 @@
|
|
29
28
|
# @see http://docs.python.org/py3k/library/functions.html#eval
|
30
29
|
# @see http://www.aspdev.org/asp/asp-eval-execute/
|
31
30
|
# @see http://en.wikipedia.org/wiki/Eval#Ruby
|
32
|
-
#
|
33
31
|
class Arachni::Modules::CodeInjection < Arachni::Module::Base
|
34
32
|
|
35
33
|
def self.rand1
|
@@ -81,7 +79,7 @@ class Arachni::Modules::CodeInjection < Arachni::Module::Base
|
|
81
79
|
was successful.},
|
82
80
|
elements: [ Element::FORM, Element::LINK, Element::COOKIE, Element::HEADER ],
|
83
81
|
author: 'Tasos "Zapotek" Laskos <tasos.laskos@gmail.com>',
|
84
|
-
version: '0.2',
|
82
|
+
version: '0.2.1',
|
85
83
|
references: {
|
86
84
|
'PHP' => 'http://php.net/manual/en/function.eval.php',
|
87
85
|
'Perl' => 'http://perldoc.perl.org/functions/eval.html',
|
@@ -91,16 +89,44 @@ class Arachni::Modules::CodeInjection < Arachni::Module::Base
|
|
91
89
|
targets: %w(PHP Perl Python ASP),
|
92
90
|
issue: {
|
93
91
|
name: %q{Code injection},
|
94
|
-
description: %q{
|
95
|
-
|
92
|
+
description: %q{A modern web application will be reliant on
|
93
|
+
several different programming languages. These languages can
|
94
|
+
be broken up into two flavours. These are client side
|
95
|
+
languages such as those that run in the browser eg.
|
96
|
+
JavaScript and HTML, and server side languages that are
|
97
|
+
executed by the server (ASP, PHP, JSP, etc) to form the
|
98
|
+
dynamic pages (client side code) that are then sent to the
|
99
|
+
client. Because all server side code should be executed by
|
100
|
+
the server, it should only ever come from a trusted source.
|
101
|
+
Code injection occurs when the server takes untrusted server
|
102
|
+
side code (ie. From the client) and executes the code as if
|
103
|
+
it were on the server. Cyber-criminals will abuse this
|
104
|
+
weakness to execute their own arbitrary code on the server,
|
105
|
+
and could result in complete compromise of the server.
|
106
|
+
Arachni was able to inject specific server side code and
|
107
|
+
have the executed output from the code contained within the
|
108
|
+
server response. This indicates that proper input
|
109
|
+
sanitisation is not occurring.},
|
96
110
|
tags: %w(code injection regexp),
|
97
111
|
cwe: '94',
|
98
112
|
severity: Severity::HIGH,
|
99
113
|
cvssv2: '7.5',
|
100
|
-
remedy_guidance: %q{
|
101
|
-
|
102
|
-
|
103
|
-
|
114
|
+
remedy_guidance: %q{ It is recommended that untrusted or
|
115
|
+
invalidated data is never stored where it may then be
|
116
|
+
executed as server side code. To validate data, the
|
117
|
+
application should ensure that the supplied value contains
|
118
|
+
only the characters that are required to perform the
|
119
|
+
required action. For example, where a username is required,
|
120
|
+
then no non-alpha characters should be accepted.
|
121
|
+
Additionally, within PHP, the "eval" and "preg_replace"
|
122
|
+
functions should be avoided as these functions can easily be
|
123
|
+
used to execute untrusted data. If these functions are used
|
124
|
+
within the application then these parts should be rewritten.
|
125
|
+
The exact way to rewrite the code depends on what the code
|
126
|
+
in question does, so there is no general pattern for doing
|
127
|
+
so. Once the code has been rewritten the eval() function
|
128
|
+
should be disabled. This can be achieved by adding eval to
|
129
|
+
disable_funcions within the php.ini file.},
|
104
130
|
remedy_code: '',
|
105
131
|
metasploitable: 'unix/webapp/arachni_php_eval'
|
106
132
|
}
|
@@ -18,7 +18,7 @@
|
|
18
18
|
#
|
19
19
|
# @author Tasos "Zapotek" Laskos <tasos.laskos@gmail.com>
|
20
20
|
#
|
21
|
-
# @version 0.
|
21
|
+
# @version 0.2
|
22
22
|
class Arachni::Modules::CodeExecutionPHPInputWrapper < Arachni::Module::Base
|
23
23
|
|
24
24
|
def self.options
|
@@ -56,18 +56,51 @@ class Arachni::Modules::CodeExecutionPHPInputWrapper < Arachni::Module::Base
|
|
56
56
|
uses the php://input wrapper to try and load it.},
|
57
57
|
elements: [ Element::FORM, Element::LINK, Element::COOKIE, Element::HEADER ],
|
58
58
|
author: 'Tasos "Zapotek" Laskos <tasos.laskos@gmail.com> ',
|
59
|
-
version: '0.
|
59
|
+
version: '0.2',
|
60
60
|
references: {
|
61
61
|
'OWASP' => 'https://www.owasp.org/index.php/Top_10_2007-Malicious_File_Execution'
|
62
62
|
},
|
63
63
|
targets: %w(PHP),
|
64
64
|
issue: {
|
65
65
|
name: %q{Code injection (php://input wrapper)},
|
66
|
-
description: %q{
|
67
|
-
|
66
|
+
description: %q{A modern web application will be reliant on
|
67
|
+
several different programming languages. These languages can
|
68
|
+
be broken up into two flavours. These are client side
|
69
|
+
languages such as those that run in the browser eg.
|
70
|
+
JavaScript and HTML, and server side languages that are
|
71
|
+
executed by the server (ASP, PHP, JSP, etc) to form the
|
72
|
+
dynamic pages (client side code) that are then sent to the
|
73
|
+
client. Because all server side code should be executed by
|
74
|
+
the server, it should only ever come from a trusted source.
|
75
|
+
Code injection occurs when the server takes untrusted server
|
76
|
+
side code (ie. From the client) and executes the code as if
|
77
|
+
it were on the server. Cyber-criminals will abuse this
|
78
|
+
weakness to execute their own arbitrary code on the server,
|
79
|
+
and could result in complete compromise of the server.
|
80
|
+
Arachni was able to inject specific server side code wrapped
|
81
|
+
within a php wrapper (<?php ... ?>) and have the executed
|
82
|
+
output from the code contained within the server response.
|
83
|
+
This indicates that proper input sanitisation is not
|
84
|
+
occurring..},
|
68
85
|
tags: %w(remote injection php code execution),
|
69
86
|
cwe: '94',
|
70
|
-
severity: Severity::HIGH
|
87
|
+
severity: Severity::HIGH,
|
88
|
+
remedy_guidance: %q{It is recommended that untrusted or
|
89
|
+
invalidated data is never stored where it may then be
|
90
|
+
executed as server side code. To validate data, the
|
91
|
+
application should ensure that the supplied value contains
|
92
|
+
nly the characters that are required to perform the required
|
93
|
+
action. For example, where a username is required, then no
|
94
|
+
non-alpha characters should be accepted. Additionally,
|
95
|
+
within PHP, the "eval" and "preg_replace" functions should
|
96
|
+
be avoided as these functions can easily be used to execute
|
97
|
+
untrusted data. If these functions are used within the
|
98
|
+
application then these parts should be rewritten. The exact
|
99
|
+
way to rewrite the code depends on what the code in question
|
100
|
+
does, so there is no general pattern for doing so. Once the
|
101
|
+
code has been rewritten the eval() function should be
|
102
|
+
disabled. This can be achieved by adding eval to
|
103
|
+
disable_funcions within the php.ini file.},
|
71
104
|
}
|
72
105
|
|
73
106
|
}
|
@@ -23,7 +23,7 @@
|
|
23
23
|
#
|
24
24
|
# @author Tasos "Zapotek" Laskos <tasos.laskos@gmail.com>
|
25
25
|
#
|
26
|
-
# @version 0.
|
26
|
+
# @version 0.4
|
27
27
|
#
|
28
28
|
# @see http://cwe.mitre.org/data/definitions/94.html
|
29
29
|
# @see http://php.net/manual/en/function.eval.php
|
@@ -62,7 +62,7 @@ class Arachni::Modules::CodeInjectionTiming < Arachni::Module::Base
|
|
62
62
|
was successful using a time delay.},
|
63
63
|
elements: [ Element::FORM, Element::LINK, Element::COOKIE, Element::HEADER ],
|
64
64
|
author: 'Tasos "Zapotek" Laskos <tasos.laskos@gmail.com>',
|
65
|
-
version: '0.
|
65
|
+
version: '0.4',
|
66
66
|
references: {
|
67
67
|
'PHP' => 'http://php.net/manual/en/function.eval.php',
|
68
68
|
'Perl' => 'http://perldoc.perl.org/functions/eval.html',
|
@@ -74,21 +74,44 @@ class Arachni::Modules::CodeInjectionTiming < Arachni::Module::Base
|
|
74
74
|
|
75
75
|
issue: {
|
76
76
|
name: %q{Code injection (timing attack)},
|
77
|
-
description: %q{
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
77
|
+
description: %q{A modern web application will be reliant on
|
78
|
+
several different programming languages. These languages can
|
79
|
+
be broken up into two flavours. These are client side
|
80
|
+
languages such as those that run in the browser eg.
|
81
|
+
JavaScript and HTML, and server side languages that are
|
82
|
+
executed by the server (ASP, PHP, JSP, etc) to form the
|
83
|
+
dynamic pages (client side code) that are then sent to the
|
84
|
+
client. Because all server side code should be executed by
|
85
|
+
the server, it should only ever come from a trusted source.
|
86
|
+
Code injection occurs when the server takes untrusted server
|
87
|
+
side code (ie. From the client) and executes the code as if
|
88
|
+
it were on the server. Cyber-criminals will abuse this
|
89
|
+
weakness to execute their own arbitrary code on the server,
|
90
|
+
and could result in complete compromise of the server. By
|
91
|
+
injecting server side code that is known to take a specific
|
92
|
+
amount of time to execute Arachni was able to detect time
|
93
|
+
based code injection. This indicates that proper input
|
94
|
+
sanitisation is not occurring.},
|
84
95
|
tags: %w(code injection timing blind),
|
85
96
|
cwe: '94',
|
86
97
|
severity: Severity::HIGH,
|
87
98
|
cvssv2: '7.5',
|
88
|
-
remedy_guidance: %q{
|
89
|
-
|
90
|
-
|
91
|
-
|
99
|
+
remedy_guidance: %q{It is recommended that untrusted or
|
100
|
+
invalidated data is never stored where it may then be
|
101
|
+
executed as server side code. To validate data, the
|
102
|
+
application should ensure that the supplied value contains
|
103
|
+
nly the characters that are required to perform the required
|
104
|
+
action. For example, where a username is required, then no
|
105
|
+
non-alpha characters should be accepted. Additionally,
|
106
|
+
within PHP, the "eval" and "preg_replace" functions should
|
107
|
+
be avoided as these functions can easily be used to execute
|
108
|
+
untrusted data. If these functions are used within the
|
109
|
+
application then these parts should be rewritten. The exact
|
110
|
+
way to rewrite the code depends on what the code in question
|
111
|
+
does, so there is no general pattern for doing so. Once the
|
112
|
+
code has been rewritten the eval() function should be
|
113
|
+
disabled. This can be achieved by adding eval to
|
114
|
+
disable_funcions within the php.ini file.},
|
92
115
|
remedy_code: '',
|
93
116
|
metasploitable: 'unix/webapp/arachni_php_eval'
|
94
117
|
}
|
data/modules/audit/csrf.rb
CHANGED
@@ -42,7 +42,7 @@
|
|
42
42
|
#
|
43
43
|
# @author Tasos "Zapotek" Laskos <tasos.laskos@gmail.com>
|
44
44
|
#
|
45
|
-
# @version 0.3.
|
45
|
+
# @version 0.3.2
|
46
46
|
#
|
47
47
|
# @see http://en.wikipedia.org/wiki/Cross-site_request_forgery
|
48
48
|
# @see http://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)
|
@@ -167,27 +167,57 @@ class Arachni::Modules::CSRF < Arachni::Module::Base
|
|
167
167
|
It requires a logged-in user's cookie-jar.},
|
168
168
|
elements: [ Element::FORM ],
|
169
169
|
author: 'Tasos "Zapotek" Laskos <tasos.laskos@gmail.com> ',
|
170
|
-
version: '0.3.
|
170
|
+
version: '0.3.2',
|
171
171
|
references: {
|
172
172
|
'Wikipedia' => 'http://en.wikipedia.org/wiki/Cross-site_request_forgery',
|
173
173
|
'OWASP' => 'http://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)',
|
174
|
-
'CGI Security' => 'http://www.cgisecurity.com/csrf-faq.html'
|
174
|
+
'CGI Security' => 'http://www.cgisecurity.com/csrf-faq.html',
|
175
|
+
'WASC' => 'http://projects.webappsec.org/w/page/13246919/Cross%20Site%20Request%20Forgery'
|
175
176
|
},
|
176
177
|
targets: %w(Generic),
|
177
178
|
|
178
179
|
issue: {
|
179
180
|
name: %q{Cross-Site Request Forgery},
|
180
|
-
description: %q{
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
181
|
+
description: %q{In the majority of today's web applications,
|
182
|
+
clients are required to submit forms. When these forms are
|
183
|
+
submitted that contents within the form are typically
|
184
|
+
processed by the server. An example of such a form is when
|
185
|
+
an administrator wishes to create a new user for the
|
186
|
+
application. In the simplest form the administrator would
|
187
|
+
submit a form with the users Name, Password, and Role (level
|
188
|
+
of access). Cross Site Request Forgery (CSRF) is where an
|
189
|
+
administrator could be tricked into clicking on a link that
|
190
|
+
if logged into the application would automatically submit
|
191
|
+
the form without any further interaction. Cyber-criminals
|
192
|
+
will look for sites where sensitive functions are performed
|
193
|
+
in this vulnerable manner, and then craft malicious requests
|
194
|
+
that will be used against clients in a social engineering
|
195
|
+
attack. There are 3 things that are required for a CSRF
|
196
|
+
attack to occur. 1. The form must perform a sensitive action
|
197
|
+
2. The victim (admin the example above) must have an active
|
198
|
+
session 3. Most importantly, all parameter values must be
|
199
|
+
known or guessable. Arachni discovered that all parameters
|
200
|
+
within the form were known or predictable, and therefore
|
201
|
+
could be vulnerable to CSRF. Manual verification may be
|
202
|
+
required to check whether the submission will then perform a
|
203
|
+
sensitive action such as reset a password, modify user
|
204
|
+
profiles, post content for a forum, etc.},
|
185
205
|
tags: %w(csrf rdiff form token),
|
186
206
|
cwe: '352',
|
187
207
|
severity: Severity::HIGH,
|
188
|
-
remedy_guidance: %q{
|
189
|
-
|
190
|
-
|
208
|
+
remedy_guidance: %q{Based on the risk determined by manual
|
209
|
+
verification of whether the submission will then perform a
|
210
|
+
sensitive action, it is recommended that the server utilise
|
211
|
+
CSRF tokens. These can be configured in such a way that each
|
212
|
+
session generates a new CSRF token or such that each
|
213
|
+
individual request requires a new token. CSRF tokens are
|
214
|
+
passed to the server as a normal parameter and not as a
|
215
|
+
cookie value. It is equally important that the server track
|
216
|
+
and maintain the status of each token, this will enable a
|
217
|
+
server to reject any request that does not contain a valid
|
218
|
+
token, and therefore prevent any cyber-criminal from knowing
|
219
|
+
or guessing all parameter values. For examples of framework
|
220
|
+
specific remediation, refer to the references.}
|
191
221
|
}
|
192
222
|
}
|
193
223
|
end
|
@@ -18,7 +18,7 @@
|
|
18
18
|
#
|
19
19
|
# @author Tasos "Zapotek" Laskos <tasos.laskos@gmail.com>
|
20
20
|
#
|
21
|
-
# @version 0.1.
|
21
|
+
# @version 0.1.2
|
22
22
|
#
|
23
23
|
# @see http://cwe.mitre.org/data/definitions/98.html
|
24
24
|
# @see https://www.owasp.org/index.php/PHP_File_Inclusion
|
@@ -103,7 +103,7 @@ class Arachni::Modules::FileInclusion < Arachni::Module::Base
|
|
103
103
|
based on the presence of relevant content or errors in the HTTP responses.},
|
104
104
|
elements: [ Element::FORM, Element::LINK, Element::COOKIE, Element::HEADER ],
|
105
105
|
author: 'Tasos "Zapotek" Laskos <tasos.laskos@gmail.com> ',
|
106
|
-
version: '0.1.
|
106
|
+
version: '0.1.2',
|
107
107
|
references: {
|
108
108
|
'OWASP' => 'https://www.owasp.org/index.php/PHP_File_Inclusion'
|
109
109
|
},
|
@@ -111,13 +111,43 @@ class Arachni::Modules::FileInclusion < Arachni::Module::Base
|
|
111
111
|
|
112
112
|
issue: {
|
113
113
|
name: %q{File Inclusion},
|
114
|
-
description: %q{
|
115
|
-
of a
|
114
|
+
description: %q{Web applications occasionally use
|
115
|
+
parameter values to store the location of a file required by
|
116
|
+
the server. An example of this is often seen in error pages
|
117
|
+
where the actual file path for the error page is called the
|
118
|
+
parameter value. For example
|
119
|
+
'yoursite.com/error.php?page=404.php'. A file inclusion
|
120
|
+
occurs when the parameter value (ie. path to file being
|
121
|
+
called by the server) can be substituted with the path of
|
122
|
+
another resource on the same server, and the server then
|
123
|
+
displays that resource as text without processing it.
|
124
|
+
Therefore revealing the server side source code. Cyber-
|
125
|
+
criminals will abuse this vulnerability to view restricted
|
126
|
+
files or the source code of various files on the server.
|
127
|
+
Arachni discovered that it was possible to substitute a
|
128
|
+
parameter value with another resource and have the server
|
129
|
+
return the contents of the resource to the client within
|
130
|
+
the response. },
|
116
131
|
tags: %w(file inclusion error injection regexp),
|
117
132
|
cwe: '98',
|
118
133
|
severity: Severity::HIGH,
|
119
|
-
remedy_guidance: %q{
|
120
|
-
|
134
|
+
remedy_guidance: %q{ It is recommended that untrusted or
|
135
|
+
invalidated data is never used to form a literal file
|
136
|
+
include request. To validate data, the application should
|
137
|
+
ensure that the supplied value for a file is permitted. This
|
138
|
+
can be achieved by performing whitelisting on the parameter
|
139
|
+
value. The whitelist should contain a list of pages that the
|
140
|
+
application is permitted to fetch resources from. If the
|
141
|
+
supplied value does not match any value in the whitelist
|
142
|
+
then the server should redirect to a standard error page.
|
143
|
+
In some scenarios where dynamic content is being requested
|
144
|
+
it may not be possible to perform validation of a list of
|
145
|
+
trusted resources, therefor the list must also become
|
146
|
+
dynamic (update as the files change), or perform filtering
|
147
|
+
to remove any unrequired user input such as semicolons or
|
148
|
+
periods etc. and only permit a-z0-9. It is also advised that
|
149
|
+
sensitive file are not stored within the web root, and that
|
150
|
+
the user permissions enforced by the directory are correct.}
|
121
151
|
}
|
122
152
|
|
123
153
|
}
|