oppo手机网站建设策划方案,广州平面设计学徒招聘,长沙seo就选智优营家,网站域名怎么选择一、前言
结合内部资料#xff0c;与安全渗透部门同事合力整理的安全测试相关资料教程#xff0c;全方位涵盖电商、支付、金融、网络、数据库等领域的安全测试#xff0c;覆盖Web、APP、中间件、内外网、Linux、Windows多个平台。学完后一定能成为安全大佬#xff01; 全部…一、前言
结合内部资料与安全渗透部门同事合力整理的安全测试相关资料教程全方位涵盖电商、支付、金融、网络、数据库等领域的安全测试覆盖Web、APP、中间件、内外网、Linux、Windows多个平台。学完后一定能成为安全大佬 全部文章请访问专栏《全栈安全测试教程0基础》 文章目录 一、前言SQL注入1什么是SQL注入2SQL注入漏洞对于数据安全的影响3SQL注入漏洞的方法4SQL注入类型5各个数据库注入方式6如何预防SQL注入7SQL注入工具 SQL注入
1什么是SQL注入
所谓SQL注入就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串最终达到欺骗服务器执行指定的SQL语句。具体来说它是利用现有应用程序将SQL语句注入到后台数据库引擎执行的能力它可以通过在Web表单中输入SQL语句得到一个存在安全漏洞的网站上的数据而不是按照设计者意图去执行SQL语句。应用为了和数据库进行沟通完成必要的管理和存储工作必须和数据库保留一种接口。目前的数据库一般都是提供api以支持管理应用使用底层开发语言如 PhpJavaaspPython与这些api进行通讯。对于数据库的操作目前普遍使用一种SQL语言Structured Query Language语言SQL语言的功能包括查询、操纵、定义和控制是一个综合的、通用的关系数据库语言同时又是一种高度非过程化的语言只要求用户 指出做什么而不需要指出怎么做SQL作为字符串通过API传入给数据库数据库将查询的结果返回数据库自身是无法分辨传入的SQL是合法的还是不合 法的它完全信任传入的数据如果传入的SQL语句被恶意用户控制或者篡改将导致数据库以当前调用者的身份执行预期之外的命令并且返回结果导致安全问题。
2SQL注入漏洞对于数据安全的影响
SQL注入漏洞会 可读取修改数据库中的库和表
获取用户的账号密码可能被加密过邮箱联系方式信用卡信息修改产品价格删除数据
可执行系统命令
修改权限获取系统管理员权限修改任意文件安装后门
SQL注入原理如下 3SQL注入漏洞的方法
下图是一个常见的登录页面 点击“submit”之后web应用会执行
接收发送的POST请求获取用户名和密码bart, simpson)构建SQL语句select * from users where username bart and password simpson;发送给数据库服务器来验证
这个时候我们可以对username进行变化
输入的用户名不是简单的bart,而是 bart’ and 11; –这样整个语句变成如下 select * from users where username bart and 11; -- and password simpson;这个时候–后面的都会变成注释不用密码就能进行登录。 4SQL注入类型
简单注入simple SQL injection)
永真式最后加入 or 11 来保证无论如何都能获取数据。错误语句让Web应用构造错误的SQL语句来抛异常来判断数据库类型结束注释使用注释符注释剩余语句联合查询使用union all后面可以写我要查询的真正语句
盲注Blind SQL injection)
一般我们可以根据返回数据获取我们想要的信息。但一些页面我们是获取不到详细信息。信息只有正确或不正确。 5各个数据库注入方式
注释符 --(MSSQL, MySQL), #(MySQL), /comment/(MySQL)单行用分号隔开运行多个SQL语句MSSQL判断IFELSE语句 MySQLIF(condition,true-part,false-part) SELECT IF(11,true,false) MSSQLIF condition true-part ELSE false-part IF (11) SELECT true ELSE SELECT false OracleBEGIN IF condition THEN true-part; ELSE false-part; END IF; END; BEGIN IF (11) THEN dbms_lock.sleep(3); ELSE dbms_lock.sleep(0); END IF; END;字符串链接 MSSQL MySQLOracle ||
示例 在DVWA我们可以进行测试
简单注入
1’ and 11; # , 1’ and 11; # 判断是否可以被注入1’ or 11; # 来尝试获取全部账号信息1’ union all select 1, 2; # 来判断可以获取的参数个数1’ union all select 1,(version); #来获取数据库版本1’ union all select 1,(database()); #获取数据库名称1’ union all select 1, group_concat(column_name) from information_schema.columns where table_name‘users’ ; #获取表所有列名 6如何预防SQL注入
数据库可以运行系统命令
用最小化权限的账户启动数据库进制让数据库执行系统命令
连接数据库的用户权限过大
使用IDSWAF等监控是否有异常操作连接数据库的用户权限最小化
错误信息返回过多的信息
统一管理错误信息禁止向用户提供错误信息
在服务器未进行过滤
过滤所有客户端数据审核数据 7SQL注入工具
SQLMAP 功能强大 界面不友好 AWVSAPPScanWebInspect 可以查找各种类型的漏洞 速度较慢