Abfangen von Backslashs, einfachen und doppelten Anführungszeichen in GET-Anfragen

Abfangen von Backslashs, einfachen und doppelten Anführungszeichen in GET-Anfragen

DemzufolgeGrundlagen der SQL-InjectionArtikel:

<…> Dies sind die Operationen, die am häufigsten zum Aufbrechen/Fuzzing der SQL-Abfragen verwendet werden.

  • 'Einfaches Anführungszeichen
  • "Doppeltes Anführungszeichen
  • \Backslash (MySQL-Escapezeichen)

Manchmal gibt es auch hexadezimal codierte Zeichen (z. B. 0x3a3a).

Ich möchte alle Anfragen, die diese enthalten, protokollieren und löschen. Hier ist mein bisheriger Stand:

set $susp 0;
if ($request_uri ~ "%27") {
  set $susp 1;
}
location ~ \.php {
    if ($susp = 1) {
        access_log /var/log/nginx/for-review.log;
        return 500;
    }
    # further fastcgi configuration
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
}

(Ich verstehe daswenn es böse ist, aber esschien notwendig)

Dies wird bei nicht ausgelöst /foo/ba'r, funktioniert aber zumindest bei einwandfrei /?foo=b'ar. Aber das ist es: Die anderen Zeichen, die ich ausprobiere, werden auch nicht ausgelöst.

Folgendes habe ich versucht:

  • $request_uri ~ "%27|%22": einfach funktioniert, doppelt nicht
  • $request_uri ~ "%27|\"": einfach funktioniert, doppelt nicht
  • $request_uri ~ "%27|0x": beide funktionieren, aber 0xes gibt falsche Positivmeldungen beiDaumen=230x240

Und ich bin nicht einmal sicher, wie ich mit dem Backslash umgehen soll.

Wisst ihr, wie es funktioniert?

PS: Ich habe darüber nachgedacht,Amazon WAS, aber es erfordert einen anderen Dienst (Cloudflare oder Load Balancer), für den ich noch nicht bereit bin.

PS: Mir ist klar, dass andere Maßnahmen ergriffen werden müssen; dies soll diese lästigen GET-Scans beseitigen. Außerdem bezweifle ich, dass die legitimen Besucher diese beim Surfen haben werden. Meine Logik war folgende: Jede Barriere, die den Hack erschwert, hilft

Antwort1

Die wichtigsten nginx.confunter http {}:

# set the variable
map "$request_uri" $susp {
    default 0;
    "~*(?<suspm>(\\x|%)(3c|3e|5c|22|27)+)" 1;
}
# match logging
log_format suspl '$remote_addr /$suspm/ - $remote_user $host [$time_local] '
    '"$request" $status $body_bytes_sent '
    '"$http_referer" "$http_user_agent" "$http_cookie"';

Individuelle virtuelle Hostkonfiguration:

location / {
    if (\$susp = 1) {
        access_log /var/log/suspl.log suspl;
        return 403;
    }
    # etc…
}

Auch,

Ich bezweifle, dass die legitimen Besucher diese beim Surfen haben werden

Achtung: Es stellt sich heraus, dass sie so etwas wie %7B%22die Cookies enthalten, die von einigen (nicht allen) Tracking-/Analyseprogrammen gesetzt werden.

verwandte Informationen