一,五种常见的注入方式
-
基于Bool类型的注入方式
-
基于时间的盲注
' and (select * from (select(sleep(20)))a)--+
-
基于错误的检测
服务器把错误信息反馈回来(少见)
-
基于UNION联合查询
联合查询的前提是通过for(while)循环直接输出联合查询结果,否则我们只能查出第一条结果
-
基于堆叠查询检测
通过分号多条查询 前提是可以加分号......
如果原先的注入代码中有select,此时用分号堆叠查询无效
二,常见命令解释
-d表示主动连接数据库,当然我们需要有账号密码,类似于我们是客户端机器
-u 表示扫描的目标URL地址,但是url地址必须要有参数? a=XXX
-m 我们可写多个url地址,将他们放入一个文件中,-m则可以逐个进行扫描
下面对以上几个参数进行实验测试
-
-u参数
先进入mutillidae测试环境,选择sql注入
当我们输入账号密码(错误)之后url地址栏就会有参数显示
此时就可以利用-u方式进行sqlmap探测
-p表示对某个变量进行探测,-f表示指纹探测
红圈表示已经探测出username字段有可能sql注入,后面疑问表示是否跳过其他的数据库的扫描类型,这里已经判断基本为MYSQL类型数据库,最后的查询结果:
存放的结果放在最后一行 root/.sqlmap/output/XXXXXXXX
刚刚设置的参数为-f 查询数据库的指纹信息,也可以设置其他参数
--users 查询数据库中用户有哪些
--banner查询对方数据库版本信息
--dbs查询目标数据库管理系统有哪些库
--schema查源数据库
-a 查询所有的信息 (all)
-
-d参数
连接数据库语句:sqlmap -d "mysql://账号:密码@192.168.1.1:3306/dvwa" -f --users
-
-m参数
有多个url地址时候
sqlmap -m list.txt
如果使用POST方式就无法用url方式扫描
可以使用http请求文件,这里需要用burp去结合,将所有头部信息保存至一个文件request.txt文件内,然后用sqlmap -r request.txt进行扫描
现在burp截断一个我们需要的post请求
将他保存为txt文件,之后用sqlmap进行扫描
同样的文件扫描我们可以利用burp里面的log文件
方式:sqlmap -l log.txt
对于HTTPS的扫描:
sqlmap -u "目标url:端口" --force-ssl