DatorerProgrammering

Vad är injektion av SQL?

Antalet webbplatser och sidor på webben växer stadigt. För utvecklingen tas av alla som kan. Och nybörjare webbprogrammerare använder ofta osäker och gammal kod. Och detta skapar en hel del kryphål för inkräktare och hackare. Än de använder också. En av de mest klassiska sårbarheterna är SQL-injektion.

Lite teori

Många vet att de flesta webbplatser och tjänster på nätverket använder SQL för att lagra databasen. Detta är ett strukturerat fråge språk som låter dig hantera och administrera datalager. Det finns många olika versioner av databashanteringssystem - Oracle, MySQL, Postgre. Oavsett namn och typ, använder de dataförfrågningarna lika. Här ligger potentiell sårbarhet. Om utvecklaren inte kunde hantera begäran på ett korrekt och säkert sätt kan angriparen dra nytta av detta och tillämpa speciell taktik för att få tillgång till databasen, och därifrån till förvaltningen av hela webbplatsen.

För att undvika sådana situationer behöver du intelligent optimera koden och noggrant övervaka vilken fråga som behandlas på vilket sätt.

SQL-injektionstest

För att fastställa förekomst av sårbarhet i nätverket finns det många färdiga automatiserade mjukvarusystem. Men du kan göra ett enkelt test manuellt. För att göra detta, gå till en av de undersökta platserna och försök att orsaka ett databasfel i adressfältet. Ett skript på en webbplats kan till exempel inte behandla förfrågningar och inte beskära dem.

Till exempel finns det något_site / index.php? Id = 25

Det enklaste sättet är att lägga efter 25 citat och skicka en förfrågan. Om inget fel har uppstått, filtreras antingen alla förfrågningar på webbplatsen och bearbetas korrekt, eller deras utmatning är inaktiverad i inställningarna. Om sidan omstartades med problem, är det en sårbarhet för SQL-injektion.

När det har hittats kan du försöka bli av med den.

För att genomföra denna sårbarhet behöver du veta lite om SQL-kommandon för SQL. En av dem är UNION. Den kombinerar flera sökresultat till en. Så du kan beräkna antalet fält i tabellen. Exemplet på den första frågan ser så här ut:

  • Some_site / index.php? Id = 25 UNION SELECT 1.

I de flesta fall bör en sådan post skapa ett fel. Det betyder att antalet fält inte är lika med 1. Således väljer du alternativ från 1 och mer, du kan ange exakt nummer:

  • Some_site / index.php? Id = 25 UNION SELECT 1,2,3,4,5,6.

Det vill säga när felet upphör att visas, betyder det att antalet fält gissas.

Det finns också en alternativ lösning på detta problem. Till exempel när antalet fält är stor - 30, 60 eller 100. Detta är GROUP BY-kommandot. Det grupperar resultaten av frågan enligt vissa egenskaper, till exempel id:

  • Some_site / index.php? Id = 25 GRUPP AV 5.

Om fel inte mottogs finns det fler fält än 5. Således ersätter varianter från ett ganska brett intervall, är det möjligt att beräkna hur många av dem faktiskt är.

Detta exempel på SQL-injektion är för nybörjare som vill försöka sig vid testning av deras webbplats. Det är viktigt att komma ihåg att för obehörig tillgång till någon annan finns en artikel i strafflagen.

De viktigaste typerna av injektioner

Genomförandet av sårbarheter genom SQL-injektion kan göras på flera sätt. Nästa är de mest populära teknikerna:

  • UNION- fråga SQL- injektion. Ett enkelt exempel på denna typ har redan beaktats ovan. Det implementeras på grund av ett fel vid kontroll av inkommande data, vilket inte filtreras på något sätt.

  • Felbaserad SQL-injektion. Som namnet antyder använder denna typ också fel, sänder uttryck som är syntaktiskt felaktiga. Därefter avlyssas svarhuvudena, analyserar vilket, du kan senare utföra SQL-injektionen.

  • Stackade frågor SQL- injektion. Denna sårbarhet bestäms av utförandet av efterföljande förfrågningar. Det kännetecknas av bilagan i slutet av ";" tecknet. Detta tillvägagångssätt implementeras ofta för att få åtkomst till genomförandet av läsning och skrivning av data eller hantering av operativsystemets funktioner, om privilegierna tillåter det.

Programkomplex för att söka efter SQL-sårbarheter

Programmen som är tillgängliga för SQL-injektioner har vanligtvis två komponenter: skanning av webbplatsen för möjliga sårbarheter och användning av dem för att få tillgång till data. Det finns sådana verktyg för nästan alla kända plattformar. Deras funktionalitet underlättar verifieringen av webbplatsen för möjligheten att hacka SQL-injektion.

sqlmap

En mycket kraftfull scanner som fungerar med mest kända DBMS. Stödjer olika tekniker för att implementera SQL-injektion. Har möjlighet att automatiskt identifiera lösenords hash-typen och hacka den genom ordlistan. Det finns också funktionaliteten att ladda upp och ladda upp filer från servern.

Installation i Linux-miljön utförs med följande kommandon:

  • Git klon https://github.com/sqlmapproject/sqlmap.git sqlmap-dev,
  • Cdsqlmap-dev /,
  • ./sqlmap.py - wizard.

För Windows finns det ett alternativ med en kommandorad och med ett grafiskt användargränssnitt.

JSQL Injection

JSQL Injection är en plattformsverktyg för att testa användningen av SQL-sårbarheter. Skriven i Java, så systemet måste ha JRE installerat. Kan hantera förfrågningar om GET, POST, header, cookie. Den har ett bekvämt grafiskt gränssnitt.

Installationen av denna programvara är som följer:

Wget https://github.com/`curl -s https: //github.com/ron190/jsql-injection/releases | Grep-E-o '/ron190/jsql-injection/releases/download/v[0-9]{1,2}.[0-9]{1,2}/jsql-injection-v[0-9] {1,2}. [0-9] {1,2} .jar '| Head-n 1`

Lanseringen utförs med kommandot java -jar ./jsql-injection-v*.jar

För att börja kolla en webbplats för en SQL-sårbarhet måste du ange adressen i toppfältet. De är separata för GET och för POST. Om resultatet är positivt visas en lista med tillgängliga tabeller i det vänstra fönstret. De kan ses och lära sig konfidentiell information.

För att söka efter administrativa paneler, använd fliken Administrationssida. Det använder särskilda mallar för att automatiskt söka efter systemposter av privilegierade användare. Av dessa kan du bara få ett lösenordshash. Men det finns även i programmets verktyg.

När du har hittat alla sårbarheter och injicerar de nödvändiga frågorna kan verktyget låta dig ladda upp filen till servern eller, omvänt, hämta den därifrån.

SQLi Dumper v.7

Detta program är ett lättanvänt verktyg för att söka och implementera sårbarheter i SQL. Producerar den på grundval av så kallade övningar. Deras listor finns på Internet. Dorky för SQL-injektion är ett speciellt sökmönster. Med hjälp av dem kan du hitta en potentiellt utsatt webbplats genom vilken sökmotor som helst.

Verktyg för träning

Webbplatsen itsecgames.com har en speciell verktygslåda, som visar att man exempelvis kan skapa en SQL-injektion och testa den. För att kunna användas måste den hämtas och installeras. Arkivet innehåller en uppsättning filer, som är webbplatsens struktur. För att installera den behöver du den befintliga uppsättningen webbserver Apache, MySQL och PHP.

Efter att ha packat arkivet i webbserverns mapp måste du gå till adressen som angavs när du installerade den här programvaruprodukten. En sida med användarregistrering öppnas. Här måste du ange dina uppgifter och klicka på "Skapa". Genom att översätta användaren till ett nytt fönster uppmanar systemet dig att välja ett av testalternativen. Bland dem finns både beskrivna injektioner och många andra testuppgifter.

Det är värt att överväga ett exempel på SQL-injektionstypen GET / Search. Här måste du välja den och trycka på "Hack". Innan användaren kommer att visas en söksträng och en imitation av en viss webbplats med filmer. Du kan gå igenom filmen under en längre tid. Men det finns bara 10. Du kan till exempel försöka skriva in Iron Man. En film kommer att visas, vilket innebär att webbplatsen fungerar, och tabellerna i den är tillgängliga. Nu måste vi kontrollera om skriptet filtrerar specialtecken, särskilt citatmärket. För att göra detta, lägg till '' till adressraden. Och du måste göra detta efter filmens titel. Webbplatsen kommer att kasta ett fel Fel: Du har ett fel i din SQL-syntax; Kontrollera manualen som motsvarar din MySQL-serverversion för rätt syntax för att använda nära '%' 'på rad 1, vilket säger att tecknen fortfarande behandlas felaktigt. Så, du kan försöka ersätta din förfrågan. Men du måste först beräkna antalet fält. För att göra detta, använd order av, som introduceras efter citatet: http://testsites.com/sqli_1.php?title=Iron+Man 'order med 2 - & action = search.

Detta kommando kommer helt enkelt visa information om filmen, det vill säga antalet fält är större än 2. En dubbel bindestreck berättar servern att de återstående förfrågningarna ska kasseras. Nu måste vi sortera igenom, ersätta alla stora värden tills ett fel utmatas. I slutändan visar det sig att fälten blir 7.

Nu är det dags att få något användbart från databasen. Det kommer att vara nödvändigt att ändra sökfrågan i adressfältet lite, och ta den till den här formen: http://testsites.com/sqli_1.php?title=Iron+Man 'union select 1, databas (), användare (), 4, lösenord, 6, 7 från användare - & action = sökning. Som ett resultat av dess körning kommer du att se rader med lösenords hashes som enkelt kan omvandlas till begripliga tecken med hjälp av en av onlinetjänsterna. En liten pokoldovav och hämtar fältets namn med en inloggning, du kan komma åt någon annans rekord, till exempel administratörssidan.

Det finns många typer av injektioner i produkten, som du kan träna på. Det är värt att komma ihåg att tillämpningen av dessa färdigheter i nätverket, på verkliga webbplatser kan vara brottslig.

Injektion och PHP

PHP-koden är som regel ansvarig för den nödvändiga behandlingen av förfrågningar som kommer från användaren. Därför är det på den här nivån att du behöver bygga skydd mot SQL-injektioner i PHP.

Till att börja med är det värt att ge några enkla rekommendationer utifrån vilka du behöver göra detta.

  • Uppgifterna måste alltid behandlas innan de läggs i databasen. Du kan implementera detta antingen genom att använda befintliga uttryck eller genom att organisera frågor manuellt. Här är det också värt att beakta att de numeriska värdena omvandlas till den typ som behövs.
  • Undvik begäran om utseende av olika kontrollstrukturer.

Nu lite om reglerna för att fråga i MySQL för att skydda mot SQL-injektioner.

När du skriver några uttryck för en fråga är det viktigt att skilja data från SQL-sökorden.

  • VÄLJ * FRÅN tabell WHERE namn = Zerg.

I den här konstruktionen kan systemet tro att Zerg är namnet på ett fält, så du måste bifoga det i citattecken.

  • VÄLJ * FRÅN tabell WHERE namn = 'Zerg'.

Det finns dock situationer där värdet i sig innehåller citat.

  • VÄLJ * FRÅN TABLE WHERE namn = 'Cote d'Ivoire'.

Här behandlas bara en del av katten, och resten kan uppfattas som ett lag, vilket naturligtvis inte är. Därför inträffar ett fel. Så du måste skicka den här typen av data. För att göra detta, använd backslash- \.

  • VÄLJ * FRÅN tabell WHERE namn = 'cat-e' Elfenben. '

Allt ovanstående gäller strängar. Om åtgärden sker med ett nummer behöver det inte citat eller snedstreck. De måste emellertid nödvändigtvis leda till den obligatoriska typen av data.

Det finns en rekommendation att fältnamnet ska bifogas i en backquote. Den här symbolen är på vänster sida av tangentbordet, tillsammans med tilde "~". Detta är nödvändigt för att MySQL ska kunna exakt skilja fältnamnet från sökordet.

Dynamiskt arbete med data

Mycket ofta, för att erhålla data från databasen, används genererade sökningar dynamiskt. Till exempel:

  • VÄLJ * FRÅN tabell WHERE nummer = '$ nummer'.

Här skickas $ nummer som en fältvärdesdefinition. Vad händer om katt-d'Ivoire träffar det? Ett fel inträffade.

För att undvika detta problem kan du naturligtvis inkludera "magic quotes" i inställningarna. Men nu kommer data att screenas om det behövs och inte nödvändigt. Dessutom, om koden skrivs manuellt kan du spendera lite mer tid på att försöka skapa ett inbrottsresistent system själv.

För att lägga till ett snedstreck själv kan du använda mysql_real_escape_string.

$ Number = mysql_real_escape_string ($ nummer);

$ År = mysql_real_escape_string ($ år);

$ Query = "INSERT INTO tabell (antal, år, klass) värden (" $ nummer "," $ år ", 11)".

Även om koden har ökat i volym, men potentiellt kommer den att fungera mycket säkrare.

platshållare

Plassinnehavare är originalmarkörer, enligt vilka systemet lär sig att en specialfunktion måste ersättas till denna plats. Till exempel:

$ Sate = $ mysqli-> förbereda ("SELECT District FROM Number WHERE Name =?");

$ Sate-> bind_param ("s", $ nummer);

$ Sate-> execute ();

Denna del av koden förbereder frågemallen och binder sedan variabelnumret och kör det. Detta tillvägagångssätt låter dig dela upp behandlingen av förfrågan och dess genomförande. Således kan du skydda dig från att använda skadlig kodinjektion i SQL-frågor.

Vad kan en angripare göra

Skydd av systemet är en mycket viktig faktor som inte kan försummas. Naturligtvis blir ett enkelt webbplats-visitkort enklare att återställa. Och om det här är en bra portal, service, forum? Vilka konsekvenser kan det finnas om du inte tänker på säkerhet?

Först kan hackaren bryta både integriteten i databasen och ta bort den helt. Och om webbplatsadministratören eller värdmedlemen inte gjorde en säkerhetskopia, blir det inte lätt. Dessutom kan en angripare hacka in på en webbplats växla till andra, som finns på samma server.

Nästa är stöld av personuppgifter för besökare. Hur man använder dem - allt är endast begränsat av hackerens fantasi. Men i alla fall kommer konsekvenserna inte vara mycket trevliga. Särskilt om den finansiella informationen var innehållen.

Dessutom kan en angripare slå samman databasen själv och döpa sedan pengar till sin återkomst.

Disinformation av användare på uppdrag av webbplatsadministratören, som inte är egen, kan också få negativa konsekvenser, eftersom bedrägerier är möjliga.

slutsats

All information i denna artikel är endast avsedd för informationsändamål. Använd den bara för att testa dina egna projekt när sårbarheter upptäcks och fixas.

För en mer djupgående studie av tekniken för hur man utför SQL-injektion, måste du börja med att faktiskt utforska funktionerna och funktionerna i SQL-språket. Hur frågor görs, nyckelord, datatyper och tillämpningen av allt detta.

Du kan också inte utan att förstå driften av PHP-funktioner och HTML-element. De viktigaste sårbara punkterna för att använda injektioner är adressfältet, sökningen och olika fält. Studien av PHP-funktioner, hur de implementeras och möjligheterna hjälper dig att förstå hur fel kan undvikas.

Närvaron av många färdiga programverktyg gör att du kan göra en djupgående analys av webbplatsen på kända sårbarheter. En av de mest populära produkterna är kali linux. Det är en bild av ett Linux-baserat operativsystem som innehåller ett stort antal verktyg och program som kan genomföra en omfattande analys av webbplatsen för styrka.

Vad du behöver veta hur man ska hacka på webbplatsen? Det är väldigt enkelt - det är nödvändigt att vara medveten om den potentiella sårbarheten i ditt projekt eller hemsida. Speciellt om det är en webbutik med online-betalning, där betalning användardata kan äventyras av en angripare.

För professionella studie av befintlig personal informationssäkerheten kommer att kunna kolla in platsen för en mängd olika kriterier och djup. Med utgångspunkt från en enkel HTML-injektioner och social ingenjörskonst och phishing.

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

Copyright © 2018 sv.unansea.com. Theme powered by WordPress.