Bent u gevoelig voor Shell of SQL Injection?
Injectie gebreken toestaan dat aanvallers relais kwaadaardige code via een web-applicatie aan een ander systeem. Deze aanvallen ook uitnodigingen voor het besturingssysteem via system calls, het gebruik van externe programma's via shell-commando's, alsmede oproepen tot databases via SQL backend (dat wil zeggen, SQL injectie). Hele scripts geschreven in perl, python, en andere talen kunnen worden geïnjecteerd in webapplicaties slecht ontworpen en uitgevoerd. Iedere keer dat een webapplicatie maakt gebruik van een tolk, ongeacht het type, is er gevaar voor een injectie aanval.
Injectie-aanvallen kan heel eenvoudig om te ontdekken en te benutten, maar ze kunnen ook zeer duister. De gevolgen kunnen ook het hele gamma van ernst, van triviaal tot complete systeem compromis of vernietiging. In ieder geval is het gebruik van externe gesprekken zeer wijdverbreid is, zodat de waarschijnlijkheid van een webapplicatie met een commando injectie fout moet worden beschouwd als hoog.
Shell Commando's
Veel web-toepassingen gebruiken besturingssysteem kenmerken en externe programma's om hun taken te vervullen. Sendmail is waarschijnlijk het meest frequent ingeroepen extern programma, maar veel andere programma's worden gebruikt. Wanneer een webapplicatie passeert informatie van een HTTP-verzoek door naar de command line, deze moet zorgvuldig worden opgepoetst. Dit geldt ook bij het openen van bestanden in het bestandssysteem. Anders zou de aanvaller kan injecteren van speciale (meta-) tekens, kwaadaardige commando's, of de commando modifiers in de informatie en de webapplicatie is blind doorgeven aan de externe regeling voor de uitvoering ervan.
SQL
SQL injectie is een zeer wijdverbreide en gevaarlijke vorm van aanval. Om gebruik te kunnen maken van een SQL injectie lek, de aanvaller moet het vinden van een parameter die de web-applicatie loopt door naar een database. Door zorgvuldige inbedding schadelijke SQL-commando's naar de inhoud van de parameter, de aanvaller kan de truc met web-applicatie in het doorsturen van een kwaadaardige query naar de database. Deze aanvallen zijn niet moeilijk te proberen en meer tools ontwikkeld die scan voor deze gebreken. De gevolgen daarvan zijn bijzonder schadelijk, zoals een aanvaller kan verkrijgen, beschadigd of vernietigen database-inhoud.
Beïnvloede milieus
Elke webapplicatie maakt het uitvoeren van externe commando's zoals system calls, shell-commando's, en SQL verzoeken. De gevoeligheid van een externe oproep om het commando te injecteren, hangt af van hoe het gesprek tot stand is gekomen en de specifieke component die wordt opgeroepen, maar bijna alle externe gesprekken kunnen worden aangevallen als de web-applicatie niet correct is gecodeerd.
Enkele specifieke milieu overwegingen:
- MySQL - oudere mysql bibliotheken verwerkt enkel een verklaring op een moment dat je het een query. Nieuwer mysql bibliotheken (bijv. mysql in PHP) zal proces meerdere SQL-commando's in een query
- Oracle - Oracle client meeste bibliotheken ondersteuning binding van variabelen. Dit is de beste manier om SQL injectie.
- Perl - controleer voor shell-injectie wanneer u een bestand opent filename als het afkomstig is van input van de gebruiker
Voorbeelden:
Een kwaadwillende parameter kunnen wijzigen van de maatregelen die zijn genomen door een system call die normaal gesproken haalt de huidige gebruiker om toegang te krijgen tot het dossier van een andere gebruiker het bestand (bijvoorbeeld door het opnemen van pad doorkruizing "../" tekens als onderdeel van een verzoek bestandsnaam).
Extra commando's kunnen worden wijze aan het einde van een parameter die wordt doorgegeven aan een shell script uit te voeren, een extra command shell (bijvoorbeeld; "rm-r *") samen met de beoogde opdracht.
SQL queries kunnen worden aangepast door toevoeging van extra 'beperkingen' naar een where (bijvoorbeeld, "OR 1 = 1") om toegang te krijgen tot of ongeoorloofd wijzigen van gegevens.
Voorbeeld:
DELETE FROM CRITICALTABLE waarbij gebruikersnaam = '$ VAR'
waar de gebruiker
HACKER 'OR'1' ='1
Let op de verkeerde quotes! Het inbrengen van dit in de SQL statement, wij zouden krijgen:
DELETE FROM CRITICALTABLE waarbij gebruiker = 'BADGUY' of een'1 '='1'
Dit zou u alle gegevens in de kritieke tafel.
Hoe te bepalen of u kwetsbaar zijn
De beste manier om te bepalen of u kwetsbaar zijn voor opdrachtregel of SQL injectie aanvallen is om te zoeken in de broncode voor alle oproepen naar externe middelen (bijvoorbeeld, het systeem, exec, gaffel, Runtime.exec, SQL queries, of wat de syntax is voor verzoeken tot het maken van tolken in uw omgeving). Onthoud dat veel talen hebben meerdere manieren om te draaien van externe commando's. Ontwikkelaars moeten hun code en zoek naar alle plaatsen waar de inbreng van een HTTP-verzoek kan maken zijn weg naar een van deze gesprekken. U dient zorgvuldig na te gaan elke oproep om zeker te zijn dat de bescherming onderstaande procedure worden gevolgd.
Hoe bescherm jezelf
De eenvoudigste manier om te beschermen tegen injectie is om toegang te krijgen tot externe tolken waar dit mogelijk is. Voor veel shell-commando's en sommige system calls, zijn er specifieke taal-bibliotheken die dezelfde functies vervullen. Het gebruik van dergelijke bibliotheken houdt niet in dat het besturingssysteem shell interpreter, en daarom wordt een groot aantal problemen met shell-commando's.
- Gebruik bind variabelen waar ooit mogelijk. Zo niet, dan ontsnappen de gebruiker alle variabelen die worden gebruikt in een SQL statement of op de opdrachtregel.
- In Coldfusion, gebruik binding van variabelen met behulp van de CFQueryParam Tag binnen uw CFQuery tags.
- In Perl, de voorbereiding van uw verklaringen met behulp van variabele bindend, en vervolgens de parameters bij het uitvoeren van de zoekopdracht:
- cursor $ = $ db-> prepare ( "DELETE FROM CRITICALTABLE waarbij gebruiker =?");
$ cursor-> execute ($ gebruiker); - Gebruik patroon dat overeenkomt met input van de gebruiker te verifiëren is een verwachte waarde. Als input is niet wat wordt verwacht, gooi een fout. Foutmeldingen moeten generiek.
- Turn off / controle debug-berichten te vermijden waardoor een aanvaller mogelijk nuttige informatie.
- Database niveau: Beperk de toegang tot het web account waarmee toegang wordt verkregen tot de database. Schrijf procedures records toe te voegen en bij te werken gegevens in plaats van de aanvraag geeft direct toegang tot de tabellen; Beperk toepassing op alleen-lezen toegang indien mogelijk - op gebruikersniveau evenals database-niveau.
- Hergebruik eerder geteste code waar dit mogelijk is.
Voor die gesprekken die u moet nog steeds in dienst hebben, zoals oproepen tot backend databases, moet u zorgvuldig valideren van de gegevens die worden verstrekt om ervoor te zorgen dat zij geen schadelijke inhoud. U kunt ook de structuur veel verzoeken op een manier die garandeert dat alle meegeleverde parameters worden behandeld als data, in plaats van potentieel uitvoerbare inhoud. Het gebruik van stored procedures of bereid uitspraken zullen zorgen voor een significante bescherming, ervoor te zorgen dat de geleverde input wordt behandeld als data. Deze maatregelen zullen verminderen, maar niet volledig elimineren van de risico's verbonden aan deze externe oproepen. Je moet nog altijd valideren deze input te zorgen dat het voldoet aan de verwachtingen van de applicatie in kwestie.
Een andere krachtige bescherming tegen commando injectie is om ervoor te zorgen dat de web-applicatie draait alleen met de privileges het absoluut nodig voor het vervullen van zijn functie. Dus moet je de webserver niet worden uitgevoerd als root of toegang tot een database als DBADMIN, anders kan een aanvaller misbruik maken van deze administratieve privileges verleend aan de web-applicatie. Enkele van de J2EE omgevingen maken het gebruik van de sandbox van Java, die kunnen verhinderen dat de uitvoering van het systeem commando's.
Als een externe opdracht moet worden gebruikt, alle informatie over de gebruiker die wordt ingevoegd in het commando zou streng moeten worden gecontroleerd. Er moeten mechanismen worden ingevoerd om eventuele fouten, time-outs of blokkades tijdens het gesprek.
Alle output, rendement codes en foutcodes uit het gesprek dienen te worden gecontroleerd om ervoor te zorgen dat de verwachte verwerking daadwerkelijk heeft plaatsgevonden. Tijdens een minimum, hiermee kun je om vast te stellen dat er iets mis is. Anders zou de aanval kunnen voorkomen en nooit worden opgespoord.
De OWASP Filters project is de productie van herbruikbare componenten in verschillende talen om te voorkomen dat veel vormen van injectie. OWASP is ook vrijgegeven CodeSeeker, een applicatie-niveau firewall.
Populariteit: 1% [?]

Verwante posten:
- Top 15 SQL injection Scanners
- Lijst van alle SQL Injection Strings
- Gereedschap voor het hacken van Bluetooth-apparaten
- Scheurvorming .htaccess / .htpasswd voor wachtwoorden
- Top 10 trucs om gebruik te maken van SQL Server Systems
Enjoyed dit artikel? Abonneren op Hacking Waarheden en ontvang dagelijks updates over nieuwe coole websites en programma's in je e-mail gratis. 














































Laat uw reactie!