Chance
Themenersteller
Programmierer
Guru (173 Beiträge)

SQL Injection / Störungs Verdacht

am 06.03.2013, 08:39 Uhr eröffnete Chance folgenden Thread
Sonstige    1740 mal gelesen    7 Antwort(en).

In den Fehlerlogs einer Webanwendung die ich mit Entwickle, tauchen seltsamme URL Parameter auf.

Ich vermute ein SQL Injection, bzw. das der SQL Server durch Berechnungen eine hohe Last erzeugen soll.

Z.B. sind diese:

and (3=3 xor 1=10)-- a'
and 4=12-- a'
and not 4=6-- a'
and (4=9 xor 6=10)-- a'
and (4=4 xor 5=5)-- a'
and 2=2-- a'
and (8=8 xor 7=13)-- a'
and not 7=10-- a'
and 9=13-- a'
and (2=8 xor 9=16)-- a'
and (6=6 xor 6=6)-- a'

Diese Erweiterungen hängen an einem Parameter dran.

Durch Google habe ich gesehen, das es bei anderen Webseiten auch versucht wird.
Dort erscheinen Suchergebnisse mit diesen Erweiterungen, die da deutlich nicht drangehören, z.B. auf einer Suchseite.


romacron
JDev Xer
Content Gott (1224 Beiträge)
am 06.03.2013, 08:59 Uhr schrieb romacron

Hallo Chance,

Injection hin oder her, du validierst die Daten nicht die du empfängst.


<?php
/**
* PHP version 5.3
*
* @category CategoryName
* @package PackageName php
* @version SVN: $Id$
* @link
* @see
* @since 06.03.13
**/
defined(\'_JEXEC\') or die(\'Restricted access\');

// Simple Cast
$clearInt = (int) $_POST[\'evilVar\'];

/**
* Method to Clean Strings from evil Code
*
* @param string $string
*
* @return mixed
*/
function clearEvilStrings($string = \'\')
{
// Pattern to clear the String
$boesePattern = \'\';

return preg_replace($boesePattern, \'\', $string);
}

//
$clearArray = array ();

// Lets perform an simple clean
if (isset($_POST[\'evilArray\']) && !empty($_POST[\'evilArray\']))
{
foreach ($_POST[\'evilArray\'] as $key => $val)
{
$saniKey = clearEvilStrings($key);
$clearArray[$saniKey] = (int) $val;
}
}
//
var_dump($clearArray);


?>


Das nur als Ansatz. In der Regel sollte jeder eine eigene Standard Klasse oder fertige Funktionsblöcke besitzen, die ALLES sauber machen.

Die Query nervt vielleicht, die nächste hilft dir bei der Wartung des Systems


Chance
Programmierer
Guru (173 Beiträge)
am 06.03.2013, 09:55 Uhr schrieb Chance

Wie erkennst du, ob die Daten validiert worden sind oder nicht ?
Die Fehler landen im Fehlerlog, weil sie als invalide in der Verarbeitung erkannt worden sind, und die Verarbeitung abgebrochen wurde.

Warum sollte man die Schlüssel säubern, wenn man erkennen will, ob ein Angriff o.Ä. stattgefunden hat ?
Man will dem Angreifer ja nicht in die Hände spielen.


rdombach
Avatar rdombach
Security-Admin
Content Halbgott (608 Beiträge)
am 06.03.2013, 18:05 Uhr schrieb rdombach

Hallo Chance,

SQL-Injection .. wäre möglich ... aber ich denke, dass würde auch einfacher gehen, da braucht es keine so "aufwendige" Logik-Anweisung.

Auslastung ... halte ich für unlogisch, denn das bringt keinen Mehrwert. Vor allem da ja Dein Projekt noch in der Entwicklung (?) ist. Denkbar wäre ein Störer, aber das wäre dann schon ein sehr spezifischer Angriff.

Der Hinweis von Roma ist in der Tendenz richtig, keine unvalidierten Eingaben zuzulassen - aber wir wissen ja nicht, wann Dein Log geschrieben wird - könnte vor oder auch nach der Validierung sein (Ideal wäre es m.E. bei Parametern an beiden Stellen).

Du hast recht, man sollte einem theoretischen Angriefer so wenig Angaben als möglich geben. Wobei mein Ansatz der ist, wenn der Angreifer sieht, das Du deine Hausaufgaben gemacht hast, geht er weiter und attakiert ein anders (leichters) Ziel. Ohne dieses Info probiert er es ggf. bei Dir länger und kostet Dich Ressourcen.
Aber Dein Ansatz ist auch richtig, kommt immer darauf an, wer der Angreifer ist und wie dieser Tickt.

Ich verstehe deinen Beitrag aber eher so, als Info an die Seitenreport-Community, doch mal wieder Logs und andere Sicherheitseinstellungen zu kontrollieren. Schaden tut es sicher nicht!

Beste Grüße
Ralph

Grüße


Bitte nicht vergessen, Virenscanner und Co. zu aktualisieren!
SecuTipp: GRATIS Security-Informationen für die eigene Webseite und [url="http://twitter.com/secuteach"][img]http://w

romacron
JDev Xer
Content Gott (1224 Beiträge)
am 06.03.2013, 18:07 Uhr schrieb romacron

Hallo Chance

meintest du von Außen ?

and (3=3 xor 1=10)-- a // so nen string ist nicht validiert

Mir unterlaufen in der Eile oft kleine Tipfehler oder ich paste in die Input-zeile aus versehen meinen Tastatur-Puffer und drücke [Enter].
Dann bekomme ich ne Fehlermeldung und auch eine Rückgabe

Meintest du Innerhalb des Systems?
* Alle Request Daten nie direkt anfassen oder im Code verwenden
* immer eine Proxy Getter/Filter Klasse zum verwenden von Request-Daten verwenden.

Wenn du Angriffe loggen möchtest, dann packe dir apache mod_security rein(POST).

Im tieferen Quellcode müssen Fehler abgefangen werden, das ist klar. Nur eine SQL injection bis zur SQL Query durchzulassen...das ist schon echt hart

Keine ungefilterten Daten durchlassen und schon ist Ruhe! Es spielen immer ein paar Kinder, möchtest du da eine "Krabbel-gruppen Betreuung" einrichten?


rdombach
Avatar rdombach
Security-Admin
Content Halbgott (608 Beiträge)
am 06.03.2013, 19:16 Uhr schrieb rdombach

romacron schrieb:

...
Keine ungefilterten Daten durchlassen und schon ist Ruhe! Es spielen immer ein paar Kinder, möchtest du da eine "Krabbel-gruppen Betreuung" einrichten?



GRINS

Hallo Roman,

sicherlich spielen immer einige. Aber wir sollten nicht vergessen, dass da auch Erwachsene mitspielen und die verstehen ihr Handwerk!
Ich denke, die sog. "Script-Kiddies" sind weitestgehend aus der Szene verschwunden. Dominiert wird heute der Markt von profesionellen Playern und ebensolcher Angriffs-Software.

Security ist die eine Seite der Münze - Hacking, Cyberwar (etc.) ist die Rückseite ... und auf beiden Seiten sitzen bzw. kämpfen Profis (und auch Amateure).
Das sollte man einfach im Hinterkopf behalten!

Beste Grüße
Ralph




Bitte nicht vergessen, Virenscanner und Co. zu aktualisieren!
SecuTipp: GRATIS Security-Informationen für die eigene Webseite und [url="http://twitter.com/secuteach"][img]http://w

romacron
JDev Xer
Content Gott (1224 Beiträge)
am 06.03.2013, 20:12 Uhr schrieb romacron

Hallo Ralph,

Sicherheit ist als Schicht-Modell zu betrachten.
Viele Lücken und Angriffspunkte basieren auf Unwissenheit und Fahrlässigkeit.


$boese="and (3=3 xor 1=10)-- a ";
$varMalBoese= (int)$boese;


So einfach kann Sicherheit sein oder täusche ich mich da?

Ich denke mit Populismus kann man schwerlich in einem technischen Thema Punkten.
Auch Ängste schüren, vom bösen Hägga, Cybärwar.... großer Unsinn ist das!
Gehackt wurde immer, angegriffen wurde immer, Leute die wissen was sie tun gibt es immer

Sobald man den ganzen Zauber großer Worte entfernt hat, bleibt einfach nur ein (int)$int übrig...

So einfach ist Sicherheit


Chance
Programmierer
Guru (173 Beiträge)
am 07.03.2013, 09:00 Uhr schrieb Chance

@romacron: Von Außen, und es kommt nicht nur einmal vor oder zweimal, sondern mehr als zehn mal.
Und es geht hier nicht um die Prüfung der eingehenden Daten, sondern um das, was bei der Prüfung bemerkt wurde.
Die AND Anhängsel kommen erst gar nicht in die Nähe des Querys, sondern scheitern schon an der Oberfläche.

@Ralph:
Mitentwicklung, nicht in Entwicklung .

Mit Google habe ich folgende Seite gefunden, bei denen das auch gemacht wurde:

metal-magnesium.com/index.php/catalogsearch/result/index/



  • 1


« zurück zu: Sonstige

Das Seitenreport Forum hat aktuell 5274 Themen und 36108 Beiträge.
Insgesamt sind 48346 Mitglieder registriert.