website attack

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

J C

J C

15/02/2015 17:19:58
Quote Anchor link
Sinds twee dagen wordt mijn website aangevallen, waardoor het de website overbelast werd.

Je krijgt dan als foutmelding iets als: exceeded the max_connections_per_hour.

Inmiddels is dit verhoogd waardoor de website weer bereikbaar is.

Als ik de errorlog erbij pak krijg ik veel dingen als onderstaande meldingen, is hieruit op te maken dat er een grove fout in mijn script zit dat ze aan het gebruiken zijn?

Quote:
[Sun Feb 15 01:20:03.630711 2015] [:error] [pid 4543] [client #####] PHP Fatal error: Uncaught exception 'mysqli_sql_exception' with message 'The used SELECT statements have a different number of columns' in *****\nStack trace:\n#0 *****: mysqli->query('\\n\\t\\t\\t\\t\\t\\tSELECT\\n\\t...')\n#1 ***** \n#2 {main}\n thrown in ***** on line 71, referer: *****'+%2f**%2fuNiOn%2f**%2faLl+%2f**%2fsElEcT+0x393133353134353632312e39,0x393133353134353632322e39,0x393133353134353632332e39,0x393133353134353632342e39,0x393133353134353632352e39,0x393133353134353632362e39,0x393133353134353632372e39,0x393133353134353632382e39,0x393133353134353632392e39,0x39313335313435363231302e39,0x39313335313435363231312e39,0x39313335313435363231322e39,0x39313335313435363231332e39,0x39313335313435363231342e39,0x39313335313435363231352e39,0x39313335313435363231362e39,0x39313335313435363231372e39,0x39313335313435363231382e39,0x39313335313435363231392e39,0x39313335313435363232302e39,0x39313335313435363232312e39,0x39313335313435363232322e39,0x39313335313435363232332e39,0x39313335313435363232342e39,0x39313335313435363232352e39,0x39313335313435363232362e39,0x39313335313435363232372e39,0x39313335313435363232382e39,0x39313335313435363232392e39,0x39313335313435363233302e39,0x39313335313435363233312e39,0x39313335313435363233322e39,0x39313335313435363233332e39,0x39313335313435363233342e39,0x39313335313435363233352e39,0x39313335313435363233362e39,0x39313335313435363233372e39,0x39313335313435363233382e39,0x39313335313435363233392e39,0x39313335313435363234302e39,0x39313335313435363234312e39,0x39313335313435363234322e39,0x39313335313435363234332e39,0x39313335313435363234342e39,0x39313335313435363234352e39,0x39313335313435363234362e39,0x39313335313435363234372e39,0x39313335313435363234382e39,0x39313335313435363234392e39,0x39313335313435363235302e39,0x39313335313435363235312e39,0x39313335313435363235322e39,0x39313335313435363235332e39,0x39313335313435363235342e39,0x39313335313435363235352e39,0x39313335313435363235362e39,0x39313335313435363235372e39,0x39313335313435363235382e39,0x39313335313435363235392e39,0x39313335313435363236302e39,0x39313335313435363236312e39,0x39313335313435363236322e39,0x39313335313435363236332e39,0x39313335313435363236342e39,0x39313335313435363236352e39,0x39313335313435363236362e39,0x39313335313435363236372e39,0x39313335313435363236382e39,0x39313335313435363236392e39,0x39313335313435363237302e39,0x39313335313435363237312e39,0x39313335313435363237322e39,0x39313335313435363237332e39,0x39313335313435363237342e39,0x39313335313435363237352e39,0x39313335313435363237362e39,0x39313335313435363237372e39,0x39313335313435363237382e39,0x39313335313435363237392e39,0x39313335313435363238302e39,0x39313335313435363238312e39,0x39313335313435363238322e39,0x39313335313435363238332e39,0x39313335313435363238342e39,0x39313335313435363238352e39+and+'0'='0--


Quote:
[Sun Feb 15 01:18:52.338818 2015] [:error] [pid 4542] [client ######] PHP Fatal error: Uncaught exception 'mysqli_sql_exception' with message 'You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(/**/sElEcT 1 /**/fRoM(/**/sElEcT count(*),/**/cOnCaT((/**/sElEcT(/**/sElEcT /**' at line 10' in *****\nStack trace:\n#0 *****: mysqli->query('\\n\\t\\t\\t\\t\\t\\tSELECT\\n\\t...')\n#1 *****): include_once('***o...')\n#2 {main}\n thrown in ***** on line 71, referer: *****(%2f**%2fsElEcT+1+%2f**%2ffRoM(%2f**%2fsElEcT+count(*),%2f**%2fcOnCaT((%2f**%2fsElEcT(%2f**%2fsElEcT+%2f**%2fuNhEx(%2f**%2fhEx(%2f**%2fcOnCaT(0x217e21,0x4142433134355a5136324457514146504f4959434644,0x217e21))))+%2f**%2ffRoM+information_schema.%2f**%2ftAbLeS+%2f**%2flImIt+0,1),floor(rand(0)*2))x+%2f**%2ffRoM+information_schema.%2f**%2ftAbLeS+%2f**%2fgRoUp%2f**%2fbY+x)a)+'


Quote:
[Sun Feb 15 01:18:52.597517 2015] [:error] [pid 4526] [client ######] PHP Fatal error: Uncaught exception 'mysqli_sql_exception' with message 'Duplicate entry '!~!ABC145ZQ62DWQAFPOIYCFD!~!1' for key 'group_key'' in *****\nStack trace:\n#0 *****: mysqli->query('\\n\\t\\t\\t\\t\\t\\tSELECT\\n\\t...')\n#1 *****: include_once('***...')\n#2 {main}\n thrown in ***** on line 71, referer: *****'+and(%2f**%2fsElEcT+1+%2f**%2ffRoM(%2f**%2fsElEcT+count(*),%2f**%2fcOnCaT((%2f**%2fsElEcT(%2f**%2fsElEcT+%2f**%2fuNhEx(%2f**%2fhEx(%2f**%2fcOnCaT(0x217e21,0x4142433134355a5136324457514146504f4959434644,0x217e21))))+%2f**%2ffRoM+information_schema.%2f**%2ftAbLeS+%2f**%2flImIt+0,1),floor(rand(0)*2))x+%2f**%2ffRoM+information_schema.%2f**%2ftAbLeS+%2f**%2fgRoUp%2f**%2fbY+x)a)+and+'1'='1
Gewijzigd op 15/02/2015 21:14:59 door J C
 
PHP hulp

PHP hulp

03/03/2025 07:47:24
 
Eeyk Vd noot

Eeyk Vd noot

15/02/2015 17:38:03
Quote Anchor link
Als ik het zo zie dan hebben ze een sql injectie gebruikt.
 
J C

J C

15/02/2015 17:41:21
Quote Anchor link
Dat dacht ik eerst ook, maar het stukje zou volgens mij veilig moeten zijn:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
$mainqry    ="
                        SELECT
                                website_titel,
                                website_naam,
                                website_inhoud  
                        FROM
                                website
            ";
                                
if (!isset ($_GET['pagina']) || $_GET['pagina'] == '')
    {                                
$mainqry     .="            WHERE
                                website_id=201
            ";
    }                                    
else            
    {                      
$mainqry     .="         WHERE
                                website_id BETWEEN  200 and 299
                        AND
                                website_naam='".mysql_real_escape_string($_GET['pagina'])."'
            ";
    }
    
    $mainsql = $connection->query($mainqry);
    


IS er hier uit te halen of ze er ook in zijn gekomen?
Gewijzigd op 15/02/2015 17:41:42 door J C
 
Ward van der Put
Moderator

Ward van der Put

15/02/2015 17:42:32
Quote Anchor link
Iemand probeert je site te hacken met SQL-injectie. Als dat in een fatal error eindigt, is dat niet zo'n probleem; je moet je meer zorgen maken over de injecties die wél slagen en die je daardoor niet als error voorbij ziet komen.

Als /medewerkers/ alleen voor medewerkers toegankelijk is, zou ik die directory snel even dichttimmeren met een whitelist van vertrouwde IP-adressen in .htaccess. Dat is de snelste oplossing. (Je voorbeelden noemen slechts één kwaadaardig IP-adres, maar er kunnen meerdere IP-adressen worden gebruikt.)

Daarna eens controleren of je ergens gevoelig bent voor SQL-injectie.
 
J C

J C

15/02/2015 17:46:02
Quote Anchor link
Bedankt, ik was al bezig alles overzetten naar het nieuwe php en daarmee alle scripts te controleren.
Maar dat heeft dus vanaf nu prioriteit nummer 1.

Ik kan uit de database niet halen dat er iemand is ingelogd.
Dit wordt namelijk wel bijgehouden.

We hebben best wel wat medewerkers, die ook via hun telefoon inloggen op de website.
Ik zal eens kijken of ik al die ipadressen kan gebruiken.
 
Thomas van den Heuvel

Thomas van den Heuvel

15/02/2015 19:31:13
Quote Anchor link
$connection->query($mainqry);
<-- -->
mysql_real_escape_string($_GET['pagina'])

???

Gebruik je overal (nog) de mysql-extensie?
En als je dan toch een wrapper hebt, waarom maak je dan geen shorthand voor mysql_real_escape_string()?
$connection->escape() leest toch wat prettiger. Ik zou het ook $db noemen, en niet $connection.

Het zou ook logischer zijn dat als je van een wrapper gebruik maakt, ook alles in deze wrapper zit.

Daarnaast, weet je zeker dat de bovenstaande query je parten speelt?
Tevens, is je character encoding overal hetzelfde? Dit is namelijk van cruciaal belang voor de correcte werking van _real_escape_string() functionaliteit en daarmee dus ook voor het voorkomen van SQL-injectie.

En ook: het escapen van je (SQL) output alleen is soms niet genoeg. Soms moet je je input ook filteren.
Als je een numerieke waarde verwacht in $_GET['whatever'], controleer hier dan op. Als deze waarde vervolgens niet numeriek is, zou je de query niet eens uit moeten voeren.
 
J C

J C

15/02/2015 19:46:18
Quote Anchor link
Ik ben nu alles aan het omzetten naar mysqli en probeer meteen dit soort dingen te tackelen.
Door de jaren heen zijn die basis bestanden een beetje verwaterd.
Het is me ook niet helemaal meer duidelijk waarom ik dit zo heb gedaan.

ik heb er nu dit van gemaakt:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
if(isset($_GET['pagina'])){
$pagina = $_GET['pagina'];
}
else
{
$pagina = 'home';
}

$qry    ="
    SELECT
            website_titel,
            website_naam,
            website_inhoud  
    FROM
            website
    WHERE
        website_id
            BETWEEN  200 and 299
    AND
        website_naam=?
            ";

    $statement = $connection->prepare($qry);
    $statement->error;
    $statement->bind_param('s', $pagina);
    $statement->execute();
    $result = $statement->get_result();
    $maintekst = $result->fetch_assoc();  
 
Thomas van den Heuvel

Thomas van den Heuvel

15/02/2015 20:17:38
Quote Anchor link
Wellicht wil je je oorspronkelijke bericht ook anonimeseren.

Hier zitten nu nog remote IP's in (die trouwens van nederlandse origine lijken te zijn :)) en de URL van je website.

Waarschijnlijk wil je juist nu niet nog meer mensen hebben die aan jouw poort(en) gaan voelen wel?
Gewijzigd op 15/02/2015 20:18:12 door Thomas van den Heuvel
 
J C

J C

15/02/2015 20:25:40
Quote Anchor link
Dat ip adres had hij eerder moeten bedenken. Voordat hij aan mijn website begon te rommelen.
We hebben een behoorlijk vermoeden wie er achter zit. Namelijk degene die al maanden probeert via het inlog scherm probeert in te loggen.
 
Thomas van den Heuvel

Thomas van den Heuvel

15/02/2015 20:35:09
Quote Anchor link
Misschien gebeurt dit via een website die een even goede beveiliging had als die van jou.
 
J C

J C

15/02/2015 20:36:53
Quote Anchor link
Als dat werkelijk zo zou zijn, dan is het nog steeds zijn eigen schuld.

Maar gezien het ipadres en zijn geschiedenis op onze website vermoed ik wat anders.
Gewijzigd op 15/02/2015 20:37:38 door J C
 
- wes  -

- wes -

16/02/2015 09:04:38
Quote Anchor link
Als je het IP van iemand hebt die dit doet , waarom deze niet excluden van je gehele site?
 
J C

J C

16/02/2015 10:02:59
Quote Anchor link
hoe doe ik dat? In de htacces?
 
Ivo P

Ivo P

16/02/2015 10:10:53
Quote Anchor link
Allow from all
Deny from 111.222.333.444

Evt hoofdletter gebruik even checken
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.