渗透学习之SQL注入基础

概述

当应用程序将用户输入的内容,拼接到SQL语句中,一起提交给数据库执行时,就会产生SQL注入威胁。
判断漏洞的依据
根据客户端返回的结果来判断提交的测试语句是否成功被数据库引擎执行,如果测试语句被执行了,说明存在注入漏洞。
SQL注入经典判断方法
- 当拼接永真逻辑,如And 1=1 ,返回结果正常。
- Select * from user where id=1 and 1=1
- 当拼接永假逻辑,如And 1=2 ,返回结果异常。
- Select * from user where id=1 and 1=2
由此可以判断输入的测试参数被执行,从而确定当前位置存在注入漏洞。
SQL注入危害
▪ 窃取数据库敏感信息
任意查询用户信息、任意查询管理员账号密码
▪ 对数据进行恶意的增删改
▪ 造成拒绝服务
通过sleep,benchmark 等函数时数据库阻塞不能正常工作
▪ 文件系统操作:列目录,读取、写入文件(一句话木马)等。
▪ 获取服务器权限(执行系统命令)
使用数据库内置的一些函数来执行系统命令
SQL注入防御
▪ 1、参数化查询
- 参数化查询首先要定义好所有的SQL代码,然后再将每个参数逐个传入,这种编码风格就能够让数据库辨明代码和数据。
数据库也不会把恶意用户拼接进来的数据,当做部分SQL语句去解析。
▪ 2、存储过程
- 存储过程和参数化查询的作用是一样的,唯一的不同在于存储过程是预先定义并存放在数据库中,从而被应用程序调用的。
▪ 3、对所有用户输入进行转义
- 每个DBMS都有一个字符转义机制来告知DBMS输入的是数据而不是代码,如果我们将所有用户的输入都进行转义,那么DBMS就不会混淆数据和代码,也就不会出现SQL注入了。
▪ 4、其他思路:
- 检测参数
- 敏感信息加密
- 低权限账户连接数据库
- 白名单
哪些地方存在注入漏洞?
• 最普遍的注入漏洞是由于参数值过滤不严导致的。
• Cookie注入漏洞普遍存在于ASP的程序中。
• 参数名、目录名、文件名等注入漏洞通常存在于有网站路由的程序中。
使用漏洞扫描器寻找注入点

猜你喜欢

转载自www.cnblogs.com/heiwa-0924/p/12814439.html