《网络安全学习》第二部分-----SQL注入系列学习

关于更详细的文档资料,请回看第一部分
《网络安全学习》第一部分-----初识OWASP

《网络安全学习》第二部分-----SQL注入系列学习_第1张图片

SQL注入系列一:简单注入

实际案例

1.通过sql注入,绕过用户名和密码校验

数值型注入方式-------通过-1 or 1=1

原理: 例如我们后台有这样一个查询sql:
SELECT * from user_message WHERE id=
那么我们可以通过修改前端的值位:-1 or 1=1 来实现查询所有的数据,其中-1表示永远不可能存在的数据。

2.字符串注入方式-------通过注释字符,来实现绕过

原理:由于#通常标识注释,因此可以在输入用户名的时候加上’#,然后输入任意的密码,这样就可以绕过登陆密码的校验。

《网络安全学习》第二部分-----SQL注入系列学习_第2张图片

原理:由于--通常标识注释,因此可以在输入用户名的时候加上’–,然后输入任意的密码,这样就可以绕过登陆密码的校验。
《网络安全学习》第二部分-----SQL注入系列学习_第3张图片

以上问题解决方案:前后台输入框格式的绝对校验。另外严格禁止sql拼接,必须使用占位符。

3.通过sql注入,返回所有数据

假设我现在有一个user表,表中有3个字段。现在使用order by 命令i将所有数据查出来。
SQL语句如下,其中3表示列数,当然,攻击者需要不停的去猜,只有当该数和数据库的列数相同后,才会返回数据。

SELECT * from user order by 3;

《网络安全学习》第二部分-----SQL注入系列学习_第4张图片
解决方案:sql查询之前,对sql进行筛选/特殊处理。

SQL注入系列二:宽字节注入

宽字节注入其实应该输入sql注入的一种类型,但是又不同于sql注入。

宽字节注入源于程序员设置MySQL连接时错误配置为:set_character_set_client=gbk(即编码格式设置为GBK编码),这样配置会引发编码转换从而导致的注入漏洞。具体原理如下:
1.正常情况下当GPC开启或使用addslashes函数过滤GET或POST提交的参数时,黑客使用的单引号 ’ 就会被转义为:’
2.但如果存在宽字节注入,我们输入%df%27时首先经果上面提到的单引号转义变成了%df%5c%27(%5c表示反斜杠\ ) ,之后在数据库查询前由于使用了GBK多字节编码,即在汉字编码范围内两个字节会被编码为一个汉字。然后MySQL服务器会对查询语句进行GBK编码即%df%5c转换成了汉字"運",从而单引号逃逸了出来,从而造成了注入漏洞。

原因:GBK编码导致宽字节注⼊

  • GBK编码是数据库编码,跟前台的编码⽆关

下图就是一个数据库编码为gbk的设置。
《网络安全学习》第二部分-----SQL注入系列学习_第5张图片
<有待更新>

SQL注入系列三:移位溢注

在Access数据库类型注入的时候,我们获取不到列名(前提是有表名),一般会选择使用偏移注入,但是这种注入方式往往借助的是个人的人品,且步骤繁琐。

1. 了解偏移注入

偏移注入的步骤:

  1. 判断注入点
  2. order by num
  3. 判断表名
  4. 联合查询
  5. 获取表中列数:union select 1,2,3,4,…* from TABLE
  6. 开始偏移注入:TABLE as a inner join TABLE as b on a.id=b.id

偏移注入的技巧:

  1. 顺序打乱法
  2. 多级偏移法

【网络安全学习】系列教程

《网络安全学习》第一部分-----初识OWASP
《网络安全学习》第二部分-----SQL注入学习
《网络安全学习》第三部分-----XSS攻击系列学习
《网络安全学习》第四部分-----SSRF服务器端请求伪造
《网络安全学习》第五部分-----远程代码执行漏洞
《网络安全学习》 第六部分-----文件上传漏洞
《网络安全学习》 第七部分-----跨域资源共享(CORS)漏洞
《网络安全学习》 第八部分-----《网络安全学习》 第八部分-----越权漏洞详解
《网络安全学习》 第九部分----CSRF(跨站请求伪造)漏洞详解

你可能感兴趣的:(开发栈----网络安全学习)