目录
SQL注入基本步骤:
一、Less-1
1.注入点测试
2.查询字段数
3.判断回显位
4.查询数据库基本信息
5.爆表名
6.爆字段名
7.获取数据
总结
SQL注入基本步骤:
第一步:注入点测试
第二步:查询字段数
第三步:判断回显位
第四步:查询数据库的基本信息
第五步:爆数据库所含表名
第六步:爆字段名
第七步:爆数据
一、Less-1
新手在学习可以修改源码文件,可以更清楚的了解靶场中sql语句的执行过程,可以更清晰的了解我们在注入过程中,sql语句的执行与变化。
打开sqli-labs存放的位置 Less-1/index.php,添加以下语句
echo '执行的sql语句为:'.$sql;
echo '<br/>';
echo '<br/>';
效果如下:
打印出一行sql语句
好了,准备完毕开始正式sql注入的学习。
1.注入点测试
首先,测试是否存在注入点
按照提示,在末尾添加?id=1,发现数据随输入变化,判断出该处存在注入点
知道了存在注入点,那我们就需要判断sql语句是否为拼接,注入类型是字符型还是数字型
增加一个单引号 ' ,判断语句的闭合符号,图中结果出现错误,由源码可以知道添加的单引号提前完成了闭合,多余的单引号引起了错误,我们可以将其注释掉。
末尾添加--+,将之后的字段注释掉,显示恢复正常,可以判断出该处sql语句为字符型。
(如果是数字型,引号引起报错,将引号后语句注释掉也无法恢复,因为只有字符型格式需要添加符号进行闭合)
2.查询字段数
由第一步的结果,我们可以将sql语句执行起来
末尾添加
?id=1' order by 3 --+
?id=1' order by 4 --+
到4之后开始报错,说明字段数只有3
3.判断回显位
知道了存在字段数,判断第几个字段能在页面中显示出来
使用联合查询 union,添加一个查询
但是前面的赋值会影响之后的查询显示
将id赋值为假(id=-1)
?id=-1' union select 1,2,3 --+
可以看到页面中显示相应的内容,可以知道查询的字段会在此处显示(回显位)
4.查询数据库基本信息
到这一步,SQL注入的准备基本完成,开始获取数据库的信息
?id=-1'union select 1,database(),version()--+
获取当前数据名和版本号,通过结果知道当前数据库为是security,版本是5.7.26
5.爆表名
group_concat(table_name) 意思为将查询结果一起显示
information_scema 则为mysql自带的一个表,它包含了所有的数据库,拥有数据的访问权,
tables 是该库下的一个表,包含了所有表和表所属的数据库
table_chema 字段就是数据库名,表示该表所属数据库
table_name 表名
拼接起来就能获取该库下所有表名了
?id=-1'union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+
6.爆字段名
和5.爆表名一样,只不过条件和结果不一样了
columns 是库下一个表,能访问所有表的字段名
table_name 字段为表名,表示该行字段名所属表
?id=-1'union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'--+
7.获取数据
根据以上表名、字段信息,可以直接获取数据
?id=-1' union select 1,2,group_concat(username , password) from users--+
实际运用中若分不清获取的数据是哪个字段
可以分别获取,先获取用户名再获取密码
总结
新人入门学习总结,如有错误请大家多多指教
本文参考
详细sqli-labs(1-65)通关讲解_糊涂是福yyyy的博客-CSDN博客_sqllabs通关
sql注入详解_山山而川'的博客-CSDN博客_sql注入
(手工)【sqli-labs靶场1-4】GET请求、错误注入、单引号、双引号、括号闭合、字符型、整型_黑色地带(崛起)的博客-CSDN博客