SQL注入细则

最近重新学习了sql注入的一些相关的知识,对于之前的一些初学的时候的细节有了一些补充。

 

成因问题

sql注入的成因,其本质上是来自于未过滤的用户输入和不正确的sql代码拼接和执行。

环境来源

简单的sql注入会有一个报错的显示,对于这个报错之前一直不太清楚。

其来源是来源于,各个后端语言的数据库错误报错函数。

典型的在php种就是mysql_error()函数。

报错函数会收集所有的数据库错误返回给web服务器。

其原因主要是由于web服务器和数据库服务器处在不同的位置,之间的交互需要一些特定的方式去完成。

sql注入在测试的时候使用的'(单引号)搭建的语法错误报错本质上会被定为502或者是302报错,常见出现这些错误的时候都会被定向到自定义的错误界面。

在进行sql注入探测的时候应该关注这些特殊的web服务器状态,这种特殊的状态代表着我们对web服务器确实产生了一定的影响,往往漏洞就在这些特殊的影响效果之中。

人为构造判断条件

常见的人为构造判断条件也有一些特殊的小知识

' or 1=1#

这个语句会构建一个永真条件,对于永真条件sql数据库的判断是比较特殊的。

数据库理论上会返回所有的值给web服务器,等效于从数据库中抽去了所有的东西,如果数据库含有百万条信息,对网络的影响是非常大的。

条件构造的特殊情况

select 'or 1=1 from user union select pasw from paw

当出现如下sql的查询语句的时候,判断条件是没有意义的,无论判断如何都会产生数据的筛选值。

这里就涉及到注释符号#的使用

url编码细则

当 URL 路径,或者查询参数中带有中文、特殊字符的时候,就需要对 URL 进行编码(采用十六进制编码格式)。URL 编码的原则是使用安全字符(即没有特殊用途或者特殊意义的字符)去表示那些不安全的字符。

URL基本组成

一个 URL 的基本组件包括协议、域名、端口号、路径和查询字符串,其中路径和查询字符串之间使用问号?隔离,示例如下:

 

http://www.biancheng.net/index?param=10

其中域名为 http://www.biancheng.net,路径为 index,查询字符串为 param=1。

 

URL 中规定了一些字符(:/ ? # [ ] @)用来分隔不同的 URL 组件,这些字符被称为保留字符。例如:

冒号:用于分隔协议和主机组件,斜杠用于分隔主机和路径

问号:用于分隔路径和查询参数等。

还有一些保留字符(! $ & * + , ; =)起到分割 URL 不同组件的作用,比如:

=用于表示查询参数中的键值对

&符号用于分隔查询多个键值对。

哪些字符需要编码

URL 编码协议规定(即 RFC3986 协议):URL 中只允许包含英文字母、数字、以及这 4 个 - _ . ~ 特殊字符和所有的保留字符。协议中规定了以下保留字符:

 

! * ’ ( ) ; : @ & = + $ , / ? # [ ]

但是当组件中的普通数据包含这些特殊字符时,它们就变成了不安全字符,此时就需要对其进行编码处理。比如查询字符串中包含了特殊字符:

http://www.biancheng.net/index?param=10*&param1=20*

为了让符需要编码。主要分为以下三种情况:

ASCII 表中没有对应可显示字符的,例如汉字。

不安全字符,包括:# ”% <> [] {} | \ ^ ` ~ 。

不当做保留字符来使用的保留字符,即& / : ; = ? @ 。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值