Size: a a a

2019 November 06

MM

Marat Mustafin in Python Flask
Как китайский прочел😂
источник

АП

Агент Печенька in Python Flask
Koote
будет ли это интересно но вот

Если вы когда-нибудь сталкивались с SSTI в Jinja2, то вы наверняка гуглили RCE payload и находили что-то монструозное вроде этого:

{{''.__class__.mro()[1].__subclasses__()[46]('touch /tmp/rce',shell=True)}}
Этот пейлоад достает класс Popen по индексу из наследников object и исполняет команду. Он не очень-то удобен: индекс Popen (который в примере равен 46) различается от сетапа к сетапу, поэтому его нужно подбирать.

К счастью, всё можно сделать гораздо проще:

{{lipsum.__globals__["__builtins__"].eval("<python code>")}}
Здесь мы используем встроенную в Jinja функцию lipsum (она возвращает текст "Lorem ipsum dolor..."), но вместо того чтобы вызывать её, мы через __globals__ достаем её глобальные переменные — а в них нас ждет модуль __builtins__ с функцией eval.

Вообще, при эксплуатации SSTI-подобных уязвимостей в питоне полезно помнить о существовании свойства __globals__ у всех питоновских функций (кроме встроенных). Если в вашем окружении нет функций, а только объекты — не беда, найдите у него любой метод и возьмите свойство __func__. Вы получите unbound функцию, у которой уже будет __globals__.
Айайай
источник

MM

Marat Mustafin in Python Flask
Нифиговый ответ)
источник

T

Tishka17 in Python Flask
Koote
будет ли это интересно но вот

Если вы когда-нибудь сталкивались с SSTI в Jinja2, то вы наверняка гуглили RCE payload и находили что-то монструозное вроде этого:

{{''.__class__.mro()[1].__subclasses__()[46]('touch /tmp/rce',shell=True)}}
Этот пейлоад достает класс Popen по индексу из наследников object и исполняет команду. Он не очень-то удобен: индекс Popen (который в примере равен 46) различается от сетапа к сетапу, поэтому его нужно подбирать.

К счастью, всё можно сделать гораздо проще:

{{lipsum.__globals__["__builtins__"].eval("<python code>")}}
Здесь мы используем встроенную в Jinja функцию lipsum (она возвращает текст "Lorem ipsum dolor..."), но вместо того чтобы вызывать её, мы через __globals__ достаем её глобальные переменные — а в них нас ждет модуль __builtins__ с функцией eval.

Вообще, при эксплуатации SSTI-подобных уязвимостей в питоне полезно помнить о существовании свойства __globals__ у всех питоновских функций (кроме встроенных). Если в вашем окружении нет функций, а только объекты — не беда, найдите у него любой метод и возьмите свойство __func__. Вы получите unbound функцию, у которой уже будет __globals__.
да, тут обсуждали в соседнем чате. Это тольк оесли вы вдруг даете редактировать шаблон хз кому. А в этом случае у вас много проблем
источник

АП

Агент Печенька in Python Flask
+
источник

A

Alex in Python Flask
Tishka17
да, тут обсуждали в соседнем чате. Это тольк оесли вы вдруг даете редактировать шаблон хз кому. А в этом случае у вас много проблем
теме сто лет в обед. Jinja2 никогда не была безопасным шаблонизатором.
источник

T

Tishka17 in Python Flask
народ, аохимия умеет пинговать содеинения висящие в пуле?
источник

T

Tishka17 in Python Flask
если да, как настроить период?
источник

V

Vlad in Python Flask
Пинговать точно умеет
источник

T

Tishka17 in Python Flask
вижу пинг перед открытием
источник

T

Tishka17 in Python Flask
а фоновые не найду
источник

V

Vlad in Python Flask
psycopg2.OperationalError) server closed the connection unexpectedly This probably means the server terminated abnormally before or while processing the request.
Не это случаем фиксишь?
источник

V

Vlad in Python Flask
источник

V

Vlad in Python Flask
pool_pre_ping¶ –

boolean, if True will enable the connection pool “pre-ping” feature that tests connections for liveness upon each checkout.
источник

T

Tishka17 in Python Flask
ну pre_ping это другое
источник

V

Vlad in Python Flask
У тебя уже в пуле дохлые?
источник

T

Tishka17 in Python Flask
ну я хочу чтобы не было дохлых, а не проверял дохлость при открытии
источник

АП

Агент Печенька in Python Flask
Tishka17
ну я хочу чтобы не было дохлых, а не проверял дохлость при открытии
The “pre ping” feature will normally emit SQL equivalent to “SELECT 1” each time a connection is checked out from the pool;
источник

АП

Агент Печенька in Python Flask
The “pre ping” feature will normally emit SQL equivalent to “SELECT 1” each time a connection is checked out from the pool; if an error is raised that is detected as a “disconnect” situation, the connection will be immediately recycled, and all other pooled connections older than the current time are invalidated, so that the next time they are checked out, they will also be recycled before use.
источник

АП

Агент Печенька in Python Flask
Не устраивает?
источник