თარიღი
/   ავტორიSCSA

საიტის სკანირება Nikto ხელსაწყოს მეშვეობით

 რუბრიკა:  სკრიპტები

Nikto არის თავისუფალი ვებ სკანირების ხელსაწყო რომელიც ამოწმებს საიტებს და იძლევა ინფორმაციას არსებული სისუსტეების შესახებ

ნებისმიერი ჰაკერისთვის ან შეღწევადობის ტესტერისთვის პროცესი სამიზნის შესახებ ინფორმაციის მოგროვებით იწყება. როცა ცნობილია თავდასხმის მიმართულება საჭიროა ხელსაწყო, რომლის მეშვეობითაც ხდება შესაძლებელი სისტემის სისუსტეების დადგენა და მათი შემდგომი გამოყენებისთვის მომზადება (ექსლპოიტი). ასეთი ტიპის სკანერებს მიეკუთვნება Nikto web vulnerability არის თავისუფალი ვებ სკანირების ხელსაწყო რომელიც ამოწმებს საიტებს და იძლევა ინფორმაციას არსებული სისუსტეების შესახებ. ეს სკანერი სოლიდური პოპულარულობით სარგებლობს, ხოლო გარკვეულ წრეებში კი ითვლება ერთ-ერთ ძირითად ხელსაწყოთ ვებ სკანირების დროს.

მიუხედავად Nikto-ს ეფექტურობისა, იგი არ არის უჩინარი და ნებისმიერი ამ სკანერით განხორციელებული ქმედება უპრობლემოდ ფიქსირდება სამიზნე სისტემის უსაფრთხოების მექანიზმის მიერ. Nikto იყო შემუშავებული უსაფრთხოების მიზნით სკანირებისთვის, მის ავტორებს მიზნად არ ჰქონდათ შეუმჩნეველი ხელსაწყოს შექმნა.

Nikto – ს სწორი გამოყენება

როცა პირველად გაუშვებთ Nikto – ს, სავარაუდოდ ვერ მიხვდებით როგორ უნდა გამოიყენოთ სკანერით მიღებული ინფორმაცია. Nikto ამ შემთხვევაში უფრო სამიზნეს ჰგავს, რომელიც მიუთითებს კონკრეტულ მიზანზე, რომელშიც უნდა განხორციელდეს გასროლა – ცოტა ხანში ამ სკანერის მუშაობის მექანიზმში გარკვევა აღარ გაგიჭირდებათ.

თავიდან ვისაუბროთ იმაზე თუ რა შეიძლება გახდეს ჩვენი სამიზნე. შესაძლებელია თავდასხმის სამიზნედ იქცეს ქსელური სკანერი ან სხვა მოწყობილობა მაგალითად ვებ სერვერი. Nikto – ს გამოყენების დროს სკანერს სჭირდება ინფორმაციის ერთ-ერთი ტიპის მითითება: ლოკალური სერვისის IP მისამართი,  ვებ დომენი თავდასხმისთვის ან SSL/HTTPS ვებ საიტი.

იქამდე სანამ დაიწყება თავდასხმა Nikto სკანერის მეშვეობით, სასურველი გაკეთდეს ე.წ. დაზვერვა სხვა პოპულარული ხელსაწყოთი Maltego. ასეთი ტიპის ხელსაწყო იქნება გამოსადეგი უფრო კონკრეტული ამოცანების სიის ჩამონათვალის გაკეთებაში და სამიზნის შესახებ უფრო სიღრმისეული ინფორმაციის მოპოვებაში. პირველი საფეხურის გავლის შემდეგ, შესაძლებელი იქნება სამიზნეზე Nikto სკანერის გატარება რაც შესაბამისი რესურსის სისუსტეების შესახებ მოგცემთ ინფორმაციას.

გამართლების შემთხვევაში სისუსტე იქნება ნაპოვნი, ამასთან ერთად მოიძებნება ექსპლოიტიც (მეთოდი ან ხელსაწყო რითიც ხდება მოწყვლადობის “ამუშავება”), ამ უკანასკნელის არსებობის შემთხვევაში დიდი ალბათობით იქნება ხელსაწყოც რომელიც მას წარმატებით ამუშავებს. შესაბამისი ხელსაწყოს მეშვეობით ჰაკერს შეეძლება სისტემაში არსებული სისუსტეების გამოყენება და სამიზნეზე სხვა და სხვა ფარული თავდასხმების ჩატარება, მაგალითად მავნე კოდის ჩაშვება.

ეტაპი 1. Nikto – ს ინსტალაცია: 

თუ თქვენ Kali Linux სისტემას იყენებს, Nikto იქნება დაყენებული “ყუთიდან”. თუკი რაიმე მიზეზების გამო თქვენს სისტემაზე არ აყენია Nikto, მისი დაყენება შეგიძლიათ GitHub -დან ან უბრალოდ გამოიყენოთ git clone https://github.com/sullo/nikto.git  ბრძანება:

git clone https://github.com/sullo/nikto.git 

თუ თქვენი სამუშაო სისტემა არის Mac, Nikto-ს დაყენება შეგიძლიათ Homebrew – ს გამოყენებით.

brew install nikto

ეტაპი 2. Nikto – ს გაცნობა:

სკანერის გაშვების შემდეგ აუცილებლად გაიცანით მისი ბრძანებები, გამოიყენეთ -Help პარამეტრი. ამის გაშვების შემდეგ ნახავთ Nikto-ს ყველა ხელმისაწვდომ ბრძანებას და პარამეტრს: 

nikto -Help
Options:
       -ask+               Whether to ask about submitting updates
                               yes   Ask about each (default)
                               no    Don't ask, don't send
                               auto  Don't ask, just send
       -Cgidirs+           Scan these CGI dirs: "none", "all", or values like "/cgi/ /cgi-a/"
       -config+            Use this config file
       -Display+           Turn on/off display outputs:
                               1     Show redirects
                               2     Show cookies received
                               3     Show all 200/OK responses
                               4     Show URLs which require authentication
                               D     Debug output
                               E     Display all HTTP errors
                               P     Print progress to STDOUT
                               S     Scrub output of IPs and hostnames
                               V     Verbose output
       -dbcheck           Check database and other key files for syntax errors
       -evasion+          Encoding technique:
                               1     Random URI encoding (non-UTF8)
                               2     Directory self-reference (/./)
                               3     Premature URL ending
                               4     Prepend long random string
                               5     Fake parameter
                               6     TAB as request spacer
                               7     Change the case of the URL
                               8     Use Windows directory separator (\)
                               A     Use a carriage return (0x0d) as a request spacer
                               B     Use binary value 0x0b as a request spacer
        -Format+           Save file (-o) format:
                               csv   Comma-separated-value
                               htm   HTML Format
                               nbe   Nessus NBE format
                               sql   Generic SQL (see docs for schema)
                               txt   Plain text
                               xml   XML Format
                               (if not specified the format will be taken from the file extension passed to -output)
       -Help              Extended help information
       -host+             Target host
       -404code           Ignore these HTTP codes as negative responses (always). Format is "302,301".
       -404string         Ignore this string in response body content as negative response (always). Can be a regular expression.
       -id+               Host authentication to use, format is id:pass or id:pass:realm
       -key+              Client certificate key file
       -list-plugins      List all available plugins, perform no testing
       -maxtime+          Maximum testing time per host (e.g., 1h, 60m, 3600s)
       -mutate+           Guess additional file names:
                               1     Test all files with all root directories
                               2     Guess for password file names
                               3     Enumerate user names via Apache (/~user type requests)
                               4     Enumerate user names via cgiwrap (/cgi-bin/cgiwrap/~user type requests)
                               5     Attempt to brute force sub-domain names, assume that the host name is the parent domain
                               6     Attempt to guess directory names from the supplied dictionary file
       -mutate-options    Provide information for mutates
       -nointeractive     Disables interactive features
       -nolookup          Disables DNS lookups
       -nossl             Disables the use of SSL
       -no404             Disables nikto attempting to guess a 404 page
       -Option            Over-ride an option in nikto.conf, can be issued multiple times
       -output+           Write output to this file ('.' for auto-name)
       -Pause+            Pause between tests (seconds, integer or float)
       -Plugins+          List of plugins to run (default: ALL)
       -port+             Port to use (default 80)
       -RSAcert+          Client certificate file
       -root+             Prepend root value to all requests, format is /directory
       -Save              Save positive responses to this directory ('.' for auto-name)
       -ssl               Force ssl mode on port
       -Tuning+           Scan tuning:
                               1     Interesting File / Seen in logs
                               2     Misconfiguration / Default File
                               3     Information Disclosure
                               4     Injection (XSS/Script/HTML)
                               5     Remote File Retrieval - Inside Web Root
                               6     Denial of Service
                               7     Remote File Retrieval - Server Wide
                               8     Command Execution / Remote Shell
                               9     SQL Injection
                               0     File Upload
                               a     Authentication Bypass
                               b     Software Identification
                               c     Remote Source Inclusion
                               d     WebService
                               e     Administrative Console
                               x     Reverse Tuning Options (i.e., include all except specified)
       -timeout+          Timeout for requests (default 10 seconds)
       -Userdbs           Load only user databases, not the standard databases
                               all   Disable standard dbs and load only user dbs
                               tests Disable only db_tests and load udb_tests
       -useragent         Over-rides the default useragent
       -until             Run until the specified time or duration
       -update            Update databases and plugins from CIRT.net
       -useproxy          Use the proxy defined in nikto.conf, or argument http://server:port
       -Version           Print plugin and database versions
       -vhost+            Virtual host (for Host header)
     + requires a value

 

ეტაპი 3. საბაზისო სინტაქსის გამოყენება:

როგორც ვხედავთ Nikto-ს გააჩნია საკმაოდ ბევრი პარამეტრი და ბრძანება, მაგრამ ხშირ შემთხვევაში საკმარისია ვიცოდეთ ამ სკანერის ძირითადი სინტაქსი სასურველი შედეგის მისაღებად <IP ან hostname> ფაქტიური IP მისამართი ან ჰოსტის სახელი:

nikto -h <IP or hostname>

მაგრამ საინტერესო ისაა, რომ Nikto – ს შეუძლია SSL – ის და 443 პორტის სკანირება, რომელიც გამოიყენება HTTPS საიტებზე (HTTP ნაგულისხმევად 80 პორტს იყენებს). ამგვარად, ჩვენ არ ვიზღუდებით მხოლოდ HTTP საიტებით და შეგვიძლია განვახორციელოთ მხოლოდ HTTPS საიტების სკანირება ბრძანებაში ბოლოში შესაბამისი -ssl პარამეტრის დამატებით.

nikto -h <IP or hostname> -ssl 

 

ეტაპი 4. საიტების სკანირება:

მაგალითად, შეგვიძლია დავასკანიროთ ჩვენი საიტი scsa.ge, იმის სანახავად თუ რა ტიპის ინფორმაციას გვაძლევს ხელსაწყო Nikto. იმის შემდეგ რაც სკანერი ჯდება 443  პორტზე, შეგვიძლია ვნახოთ გარკვეული სასარგებლო ინფორმაცია, მაგალითად, რომ სერვერი მუშაობს nginx – ზე, მაგრამ ეს არ არის იმდენად საინტერესო:

nikto -h scsa.ge -ssl
- Nikto v2.1.6
---------------------------------------------------------------------------
+ Target IP:          88.99.213.54
+ Target Hostname:    scsa.ge
+ Target Port:        443
---------------------------------------------------------------------------
+ SSL Info:        Subject:  /CN=scsa.ge
                   Ciphers:  ECDHE-RSA-AES128-GCM-SHA256
                   Issuer:   /C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
+ Start Time:         2020-03-25 12:31:25 (GMT4)
---------------------------------------------------------------------------
+ Server: nginx
+ The anti-clickjacking X-Frame-Options header is not present.
+ The X-XSS-Protection header is not defined. This header can hint to the user agent to protect against some forms of XSS
+ Uncommon header 'x-redirect-by' found, with contents: Polylang
+ The site uses SSL and Expect-CT header is not present.
+ The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type
+ Cookie pll_language created without the httponly flag
+ Root page / redirects to: https://scsa.ge/en/
+ Uncommon header 'link' found, with contents: <https://scsa.ge/wp-json/>; rel="https://api.w.org/"
+ Entry '/wp-admin/' in robots.txt returned a non-forbidden or redirect HTTP code (302)
+ "robots.txt" contains 2 entries which should be manually viewed.
+ ERROR: Error limit (20) reached for host, giving up. Last error: error reading HTTP response
+ Scan terminated:  20 error(s) and 9 item(s) reported on remote host
+ End Time:           2020-03-25 12:40:34 (GMT4) (549 seconds)
---------------------------------------------------------------------------
+ 1 host(s) tested

ეტაპი 5. IP მისამართის სკანირება:

იმის მერე რაც გავატარეთ სწრაფი სკანირება, შეგვიძლია გავუშვათ ლოკალური ქსელის ანალიზი ე.წ. embedded სერვერების მოსაძებნად, რომლებიც მოგვცემს ინფორმაციას მაგალითად როუტერში შესვლის მისამართს ან HTTP სერვისს სხვა მანქანაზე, რომელიც არის წარმოდგენილი უბრალო ვებ სერვერის სახით ვებ საიტის გარეშე. IP მისამართის დადგენისთვის, შეგვიძლია გამოვიყენოთ ifconfig .

IP მისამართი რომელიც გვჭირდება მიეკუთვნება ე.წ. inet-ს. მასზე შეგვიძლია ipcalc – ის გამოყენება. თუკი თქვენ იგი არ გაქვთ, შეგიძლიათ დააინსტალიროთ apt install ipcalc ბრძანების მეშვეობით. დიაპაზონი იქნება “Network” – ის შემდეგ, ჩემ შემთხვევაში ეს არის 192.168.1.0/24.

ifconfig
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST>  mtu 1500
        inet 192.168.0.48  netmask 0xffffff00  broadcast 192.168.0.255
        inet6 XXXX::XXX:XXXX:XXXX:XXXX%en0  prefixlen 64  secured scopeid 0x8
        ether XX:XX:XX:XX:XX:XX  txqueuelen 1000  (Ethernet)
        inet6 XXXX::XXX:XXXX:XXXX:XXXX%en0  prefixlen 64 autoconf secured
        inet6 XXXX::XXX:XXXX:XXXX:XXXX%en0  prefixlen 64 autoconf temporary
        nd6 options=201<PERFORMNUD,DAD>
        media: autoselect
        status: active
en2: flags=8863<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
options=60<TS04,TS06>
ether XX:XX:XX:XX:XX:XX
media: autoselect <full-duplex>
status: inactive

ახლა საჭიროა Nmap – ის გაშვება იმ სერვისების მოსაძებნად, რომელიც მუშაობს მიღებულ დიაპაზონში. დავასკანიროთ ის სერვისები რომლებიც პასუხობენ 80 პორტზე მუშაობის მოთხოვნაზე. ამისთვის საჭიროა ბრძანება -oG (grepable output). მიღებულ ინფორმაციას შევინახავთ ფაილში სახელად nullbyte.txt (შეგიძლიათ დაარქვათ რაც გინდათ).

ipcalc 192.168.0.48
Address:   192.168.0.48         11000000.10101000.00000000. 00110000
Netmask:   255.255.255.0 = 24   11111111.11111111.11111111. 00000000
Wildcard:  0.0.0.255            00000000.00000000.00000000. 11111111
=>
Network:   192.168.0.0/24       11000000.10101000.00000000. 00000000
HostMin:   192.168.0.1          11000000.10101000.00000000. 00000001
HostMax:   192.168.0.254        11000000.10101000.00000000. 11111110
Broadcast: 192.168.0.255        11000000.10101000.00000000. 11111111
Hosts/Net: 254                   Class C, Private Internet

არსებობს ერთგვარი ხრიკი იმისთვის, რომ არსებული ფაილიდან მონაცემები პირდაპირ Nikto-სთან დასასკანირებლად გადავცეთ. პირველ რიგში ვიყენებთ Cat – ს, შენახულ nullbyte.txt ფაილში არსებული მონაცემების გამოსაყვანად (თქვენ შემთხვევაში იქნება ის სახელი, რაც დაარქვით წინა ნაბიჯზე).  ამის შემდეგ ვიყენებთ – awk სპეციალური ინსტრუმენტი Linux-ში, რაც დაგვეხმარება შემდეგი შაბლონის მოძიებაში – Up ნიშნავს, რომ ჰოსტი აწეულია, ხოლო print $2 ნიშნავს, რომ უნდა გამოვიდეს ყოველი სიტყვა მეორე სტრიქონში ანუ მხოლოდ IP მისამართი. ამის შემდეგ მიღებული მონაცემები შეინახება targetIP.txt ფაილში (ან ისეთი სახელი მიანიჭეთ, რომელიც მოგწონთ).

cat nullbyte.txt | awk '/Up$/{print $2}' | cat >> targetIP.txt

ახლა შეგვიძლია ვნახოთ ფაილ targetIP.txt – ის შიგთავსი, რომელშიც თავმოყრილია ყველა IP მისამართი გახსნილი 80 პორტით

cat targetIP.txt
192.168.0.1
192.168.0.2
192.168.0.4
192.168.0.5
192.168.0.11
192.168.0.24
192.168.0.31
192.168.0.48
192.168.0.60

ასეთი ფორმატი იქნება ძალიან მოსახერხებელი Nikto-სთვის და მას მარტივად შეეძლება ასეთი ფაილის ინტერპრიტირება. ფაილს სკანერთან შემდგომი ბრძანებით ვაგზავნით

nikto -h targetIP.txt

შედეგი იქნება იმის ანალოგიური რაც მივიღეთ SSL სკანირების დროს.

პუბლიკაციის გაზიარება

Facebook
Twitter
LinkedIn
Telegram

მოგეწონათ სტატია ?

გამოიწერეთ ჩვენი სიახლეები

სხვა სტატიები

I agree to Privacy Policy of Scientific Cyber Security Association