首页 > 数据库 >web安全学习(sql注入1)

web安全学习(sql注入1)

时间:2022-10-28 21:35:12浏览次数:40  
标签:web information 数据库 sql 注入 select schema

web安全学习(sql注入1)

一.简介

sql语句就是数据库语句,而sql注入就是用户将自己构造的恶意sql语句提交,然后服务器执行提交的危险语句。sql注入可能造成信息泄露以及服务器被控制等危害。

二.产生原因(数据拼接)

大多数web应用或者web服务需要与数据库进行交互,比如根据用户输入名字返回相应的搜索结果,如果没有对用户的输入进行无害处理,web应用程序对用户输入的数据的合法性判断或者过滤不严格,用户输入数据与sql请求拼接,直接操作数据库,那么就容易形成安全漏洞。

漏洞产生位置(用户可以提交数据的地方) get post user-agent cookie x-forward-for

分类:联合注入 报错注入 时间盲注 布尔盲注 二次注入 增删改注入

三.详细介绍

1.mysql数据库系统

该数据库系统里面又包含以下几个数据库,第一个是自己创建的数据库,存储我们需要的信息,第二个是performance_schema,这个里面存储的是mysql数据库的一些性能指标,一些参数信息,sys是以一种更容易让人理解的方式展示mysql数据库的性能指标,sql注入经常使用的是这个information_schema 数据库,这个是对于数据库所有元数据信息的一个视图,因此可以很方便的浏览数据库的全部信息,然后information_schema这个数据库中也存在很多表,比如schema表中的就是所有数据库名称,tables表中存储的是所有的表信息,包括这个表属于哪个数据库以及表的类型等等,columns存储的是列信息,USER_PRIVILEGES是用户权限表。

2.具体的查询思路

首先判断是否存在注入点,基本的方法就是给可能存在注入点的参数传值为单引号,如果存在sql注入那么页面会出现sql相关的错误信息,下面是个sql查询的例子,$sql="SELECT * FROM users WHERE id=$id LIMIT 0,1"; 一般来说,报错显示near '''就是数字型注入,也就是传入的参数没有被引号闭合的,如果报错信息中有near "3'"包含数字那就是字符型注入,

3.在判断出是否存在sql注入之后就可以进行下一步查询操作,首先我们会用到联合查询,这样可以查找其他数据库或者其他表中的数据,而不是仅限于存在漏洞的参数所在的表。联合查询有一个要求就是前后的查询结果的数量要一样,比如"select username,email from member where id=$id";  联合查询就是?id=1 union select 1,2。因为原本的结果有两个数据,所以union select后面也跟着两个数据。我们首先判断数据库名,语句为?id=-1 union select 1,group_concat(schema_name) from information_schema.schemata,这里用到-1是为了只显示我们需要查询的后面的数据,后面的group_concat是为了将所有的数据库名在同一个数据点显示出来,起到连接的作用,得到了所有数据库名我们就选其中一个去查询表,语句为id=-1 union select 1,group_concat(table_name) from information_schema.tables where table_schema='exp',查列名,union select 1,group_concat(column_name) from information_schema.columns where table_name='exp' and table_schema='exp',在得到这些信息后就可以查数据了,语句为select 列名,列名 from 数据库名.表名。

任何用户可以控制输入并且和sql语句进行了拼接的地方都可能存在sql注入

4.无回显

前面说到的联合查询是在页面有回显信息,显示你的查询到的信息的情况下可以使用,那如果页面没有回显我们就会使用布尔盲注,时间盲注以及报错注入,布尔盲注就是使用or语句进行猜测,猜对了和猜错了的页面显示不同,时间盲注差不多,根据猜测的结果是否正确决定页面响应的时间,猜长度:' or length(database()) > 8 --+ ,猜名字:'or ORD(mid(database(),1,1)) > 100 --+,猜表的数量'or (select count(TABLE_NAME) from information_schema.TABLES where TABLE_SCHEMA=database()) = 2  --+  ,猜表名的长度'or (select length(TABLE_NAME) from information_schema.TABLES where TABLE_SCHEMA=database() limit 0,1) = 5 --+,运用limit进行限制,'Or ORD(mid(select TABLE_NAME from information_schema.TABLES where
TABLE_SCHEMA = database() limit 0,1),1,1)) >100   --+,'or (select count(column_name) from information_schema.COLUMNS where TABLE_NAME='表名') > 5 --+,'or (select length(column_name) from information_schema.COLUMNS where TABLE_NAME='表名' limit 0,1) = 10 --+,'or ORD(mid((select COLUMN_NAME from information_schema.COLUMNS where TABLE_NAME = '表名' limit 0,1),1,1)) > 100 --+,'or (select Length(concat(username,"---",password)) from admin limit 0,1) = 16  --+,'or ORD(mid((select concat(username,"-----",password) from admin limit 0,1),1,1)) > 100 --+ ,以上就是会使用到的盲注查询语句,时间盲注就是用sleep函数以及if函数替换掉or函数,报错就是页面会显示错误信息,我们用updatexml函数,并且将徐要查询的信息作为参数传给这个函数。

5.二次注入

我们为了防止sql注入攻击有时会对数据进行转义,比如输入的是1',转义后变成了1\',但是存入数据库的还是原数据1',而我们在另一个位置再次将数据库中的数据取出使用的时候取出的就是1'这个危险数据了,比如我们注册一个用户名称为admin'#,虽然进行了转义但存在数据库的可能是原数据,我们在登陆的时候利用这个就能登录admin的账号,因为此时在登陆这个功能这里并未对特殊符号进行转义。

6.堆叠注入

堆叠注入就是同时执行多条sql语句,因为我们在使用sql查询的时候总是用分号把每条语句隔开,因此我们也可以像?id=1';select * from table;这样来查询。

 

 

 

标签:web,information,数据库,sql,注入,select,schema
From: https://www.cnblogs.com/yeipunz/p/16830326.html

相关文章

  • 使用CEfSharp之旅(7)CEFSharp 拦截 http 请求 websocket 内容
    废话不多说直接上代码:不清楚的加群:群:191065815privatevoidForm1_Load(objectsender,EventArgse){try{//更改设置......
  • SQL的基本介绍
    1.介绍1.什么是数据库?2.什么是数据库管理系统?3.什么是SQL?1.数据库是保存有组织的数据的容器,通常是一个文件或一组文件,可以将其看作电子化的文件柜。用户可以对文件中的数......
  • MySQL——00
    索引数据结构MySQL中常见索引数据有B+Tree、Hash,其他几乎不用。Hash最简单,容易理解,其实用的也不多,因为有局限性优点:一次内存运算即可定位,效率高缺点:有可能hash冲突,这就会导......
  • SQL总结
    HiveSQL篇SerDe相关语法SerDe相关语法(多用,记清楚):#SerDe主要用于序列化和反序列化的 在Hive的建表语句中,和SerDe相关的语法为: rowformatdelimited/serde d......
  • MySQL事务
    事务通常是默认开启事务的,所以不会回滚事务保证了数据的一致性要么都成功要么都失败对于没有开启自动提交的数据,是可以回滚的,一旦提交了之后,就不可以回滚,体现了MySQ......
  • 重构 Flask 服务端项目对于 SQL 的配置使用和延迟的请求回调巧妙设计运用
    一.Flask-SQLAlchemySQLAlchemy的声明扩展是使用SQLAlchemy的最新方法,可以像Django一样在一个位置定义表和模型,然后在任何地方使用。fromsqlalchemyimportcreate_engi......
  • 常见的MySQL面试题有哪些?
    本文主要介绍我在公司招聘的时候,主要问应聘者的一些问题,希望对换工作的同行及在使用过程中有些疑问的同行有所帮助1. MySQL海量数据优化优化问题主要从SQL优化、事务级别调......
  • MySQL--常用语句
    MySQL常用语句1、获取数据库信息1.use数据库名;//选择要操作的Mysql数据库,使用该命令后所有Mysql命令都只针对该数据库。2.showdatabases;//列出MySQL数据库管理......
  • 【SpringBoot】引入mybatis及连接Mysql数据库
    创建一个SpringBoot项目其他不赘叙了,引入MyBaties、MySql依赖编辑 创建mysql表CREATETABLEsp_users(`id`INTPRIMARYKEY,`username`VARCHAR(30),`age`INT);刚......
  • sqlserver and or 的区别
    sqlserverandor的区别Or不加括号:查询结果36条数据,BID=21,BID=25匹配的Status的数据都会查询出来 selectBID,TradeID,[status],PaymentToBIdfromTradewhereBID......