1.SQL注入

原理:

在数据交互中,前端的数据传入到后台处理时,由于后端没有做严格的判断,导致其传入的恶意“数据”拼接到SQL语句中后,被当作SQL语句的一部分执行。漏洞产生于脚本,注入是针对数据库进行。

利用条件:

1.参数用户可控:从前端传给后端的参数内容是用户可以控制的。

2.参数带入数据库查询:传入的参数拼接到 SQL 语句,且带入数据库查询。

危害:

通过SQL注入漏洞,可以查询数据、下载数据、写入webshell 、执行系统命令以及绕过登录限制等。

注入方式的选择:

联合注入≥报错注入>DNSlog注入>布尔注入>延时注入

1.1一般SQL注入流程

  1. 判断是否存在注入点,以及闭合方式

  2. 使用 order by 判断字段数

  3. 使用select 1,2 判断回显点

  4. 查询数据库信息 version() datadir()

  5. 查询用户名,数据库名 user() database()

  6. 查看是否能够文件读取 union select 1,load_file('绝对路径’)#

  7. 写入webshell select..into outfile...

2.SQL注入的分类?

按照数据类型区分,分为数字型,字符型,搜索型

按照回显方式区分,分为有回显的和没有回显的

按照请求类型区分,分为GET注入,POST注入,Cookie注入

2.1联合注入

原理:

联合查询注入是联合两个表进行同时查询。

利用条件:

  1. 页面有数据回显

  2. 查询字段数前后必须一致

  3. 使其前条数据查询失败

2.2布尔注入

原理:

通过页面返回正确或者错误两个差异页面,来对我们想要查询的数据其进行判断。

利用方式:

先利用substring函数将数据进行截取,然后再利用acsii函数将截取后的数据进行转换后进行遍历比对。

2.3延时注入

原理:

通过页面对传入数据处理后页面的反馈时间差异,来对我们想要查询的数据进行判断。

利用方式:

利用if函数对查询语句进行判断,接着根据需求而设定对应的sleep函数数值。

2.4报错注入

原理:

执行SQL语句的时,如果执行语句存在错误,并且设定代码中有使用回执错误信息的函数,这时就会将出错回显到页面。

利用方式

利用报错函数进行查询数据,通过信息的回显从而得到我们想要的数据。

十大报错函数

floor(),extractvalue(),updatexml(),exp(),GeometryCollection(),polygon(),multipoint(),multilinestring(),linestring(),multipolygon()

2.5宽字节注入

原理:

先使用过滤函数对传入数据进行过滤,当数据传入数据库进行代码执行时,前后编码不一致,这时数据库采用了宽字节编码,由于编码的识别差异性这一特点,攻击者可以进行恶意构造,使其原本的闭合得以逃逸,从而可以被利用。

利用方式:

通过添加df%等方式,使其因为过滤函数所产生出的 \ ,能够在数据库宽字节编码的识别下组合成为汉字,使其闭合能够逃逸出来。

2.6二次注入

原理:

数据在进行插入时,被过滤函数进行转义处理,导致恶意语句不能正常执行,但经过转义后的数据产生的 \ 不会被插入数据库中,在下一次进行需要进行数据查询的时候,直接从数据库中取出了存在恶意代码的数据,没有进行进一步的检验和处理,直接被调用拼接到语句当中,二次调用产生注入。

2.7DNSlog注入

原理:

通过子查询,将内容拼接到域名内,利用load_file函数去访问共享文件,访问的域名记录被日志记录为报错信息,通过查询日志信息查看我们想要的数据。

利用条件:

1.需要在数据库中支持域名解析

2.需要数据库配置文件中设置secure_file_priv=''

3.支持UNC路径

4.目标服务器需要出网

2.8堆叠注入

原理:

执行代码中,使用了可以执行一个或针对多个数据库的查询函数。

利用方式:

执行多条查询 SQL 语句时,语句之间以分号(;)隔开,在语句中构造需要执行攻击的语句。

3.如何使用SQL注入写入shell

原理:

利用union 跟select into outfile,将一句话写入shell.php文件中。

利用条件:

1.知道网站绝对路径,可以通过报错,phpinfo界面,404界面等一些方式知道

2.gpc没有开启,开启了单引号被转义了,语句就不能正常执行了

3.拥有有file权限,默认情况下只有root有

4.对目录拥有写入权限,一般image之类的存放突破的目录就有

4.SQL注入绕过waf的方法

4.1从架构层面:

找到服务器真实IP,同网段绕过,http和https同时开放服务绕过,边缘资产漏洞利用绕过。

4.2从协议层面:

分块延时传输,利用pipline绕过,利用协议未覆盖绕过,POST及GET提交绕过。

4.3从规则层面:

编码绕过,等价符号替换绕过,普通注释和内敛注释,缓冲区溢出,mysql黑魔法,白名单及静态资源绕过,文件格式绕过,参数污染等。

5.修复建议

使用预编译,PDO,正则表达式过滤,开启魔术引号,加装WAF等。

代码层最佳防御 sql 漏洞方案:采用 sql 语句预编译和绑定变量,是防御sql 注入的最佳方法。

1.所有的查询语句都使用数据库提供的参数化查询接口,参数化的语句使用参数而不是将用户输入变量嵌入到 SQL 语句中。当前几乎所有的数据库系统都提供了参数化 SQL 语句执行接口,使用此接口可以非常有效的防止 SQL 注入攻击。

2.对进入数据库的特殊字符( ' <>&*; 等)进行转义处理,或编码转换。

3.确认每种数据的类型,比如数字型的数据就必须是数字,数据库中的存储字段必须对应为 int型。

4.数据长度应该严格规定,能在一定程度上防止比较长的 SQL 注入语句无法正确执行。

5.网站每个数据层的编码统一,建议全部使用 UTF-8 编码,上下层编码不一致有可能导致一些过滤模型被绕过。

6.严格限制网站用户的数据库的操作权限,给此用户提供仅仅能够满足其工作的权限,从而最大限度的减少注入攻击对数据库的危害。

7.避免网站显示 SQL 错误信息,比如类型错误、字段不匹配等,防止攻击者利用这些错误信息进行一些判断。

浅谈SQL注入漏洞原理及利用方式相关推荐

  1. 易想团购 注入 user.php,易想团购系统通杀SQL注入漏洞分析及利用漏洞预警 -电脑资料...

    刚打开红黑看到J8基友写的一个{易想团购系统 最新版 通杀}的文章,看他贴的代码里面有个get_client_ip()函数,哈哈,我猜没过滤,果断下了一套程序, 找到get_client_ip()函数 ...

  2. 浅谈SQL注入风险 - 一个Login拿下Server(转)

    前两天,带着学生们学习了简单的ASP.NET MVC,通过ADO.NET方式连接数据库,实现增删改查. 可能有一部分学生提前预习过,在我写登录SQL的时候,他们鄙视我说:"老师你这SQL有注 ...

  3. 易想团购 注入 user.php,易想购物(easethink)存在sql注入漏洞,附利用测试POC

    漏洞概要 缺陷编号:WooYun-2013-022023 漏洞标题:易想购物(easethink)存在sql注入漏洞,附利用测试POC 相关厂商:易想购物 漏洞作者:lxsec 提交时间:2013-0 ...

  4. 【SQL注入漏洞-01】SQL注入漏洞原理及分类

    SQL注入简介 结构化查询语言(Structured Query Language,缩写︰SQL),是一种特殊的编程语言,用于数据库中的标准数据查询语言. SQL注入(SQL Injection)是一 ...

  5. SQL 注入漏洞检测与利用

    SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,它是利用现有应用程序将(恶意的)SQL命令注入到后台数据库引擎执行的能力, ...

  6. 张小白的渗透之路(二)——SQL注入漏洞原理详解

    SQL注入漏洞简介 乱七八糟的就不多说了,自己百度去 SQL注入原理 想要更好的学习SQL注入,那么我们就必须要深入的了解每种数据库的SQL语法及特性.下面通过一个经典的万能密码的例子带大家来拨开一下 ...

  7. 【漏洞复现】泛微OA E-Cology V9 browser.jsp SQL注入漏洞复现及利用(CNVD-2023-12632)

    文章目录 前言 声明 一.产品介绍 二.漏洞描述 三.影响范围 四.漏洞分析 五.漏洞复现 六.SQLMAP漏洞利用 七.修复方案 前言 泛微E-Cology v9 Browser.jsp 存在SQL ...

  8. 浅谈SQL注入,XSS攻击

    作为计算机小白,一直都认为黑客很牛逼所以简单的了解一下这反面的知识--信息安全 黑客是个英译词,译作Hacker.黑客攻击或者黑计算机的方式多种多样,主要分为两种: (1)非破坏性的攻击:一般是为了扰 ...

  9. 00005在java结果输出_浅谈Java反序列化漏洞原理(案例未完善后续补充)

    摘要: 0005,这个16进制流基本上也意味者java反序列化的开始:(2)HTTP:必有rO0AB,其实这就是aced0005的base64编码的结果:以上意味着存在Java反序列化,可尝试构造pa ...

最新文章

  1. 源数据文件(.csv)中的空格串和空串对pandas读取结果的影响
  2. linux6用户t密码,linux系统 用户和组管理类命令的使用方法
  3. 词法分析(2)---NFA
  4. xtrabackup支持的engine
  5. 如何将VBE中模块、工作表、工作簿和窗体等内的所有代码一次导出?
  6. atitit.java解析sql语言解析器解释器的实现
  7. mysql 文本处理函数,MySQL常用的文本处理函数
  8. python控制、监听鼠标键盘
  9. air flow空调上是什么意思_airflow空调滤芯上是什么意思
  10. linux 查看 man 路径配置文件 man.config,linux中的man(zz)
  11. SecureCRT连接服务器报错Failed to open the host key database file解决方法
  12. BiLSTM+CRF实现AI诗人与长短记忆网络
  13. 微信小程序 canvas 分享图片 生成图片
  14. 用计算机算一算循环小数,循环小数化分数计算器
  15. FFmpeg —— 屏幕录像和录音并推流(命令行的方式)
  16. vue 字典配置_字典配置
  17. 国内无线通信模组企业(TOP 80)
  18. python复制粘贴代码_将代码复制并粘贴到Python解释器
  19. Voronoi Noise 原理
  20. 苹果8plus优点和不足_2020年双十一有哪些苹果手机值得购买?

热门文章

  1. 7_使用OGR模块操作矢量数据
  2. 路由 OSPF LSA介绍、1~7类LSA详细介绍
  3. visualSVN server的安装和使用
  4. NPM problem: npm ERR! extraneous
  5. gitHub不能用密码推送了,必须要使用令牌
  6. android singleTask
  7. 计算机课ps软件,电脑上的ps软件叫什么
  8. 关于人工智能不会使大脑变懒惰的议论文_自律,拒绝懒惰和放纵,不枉余生
  9. 学习笔记-CCS-MSP430F5529[快速入门篇二]
  10. 欧几里得算法及其扩展欧几里得算法——数论