Sql-Inject漏洞解析-课程目录
? SQL Inject 漏洞原理概述 ? 如何判断注入点类型及常见注入类型讲解 ? 注入方式get&post的区别 ? SQL Inject漏洞手工测试:基于union联合查询的信息获取(select)
? SQL Inject漏洞手工测试:基于报错的信息获取(select/delete/update/insert) ? SQL Inject漏洞手工测试:操作系统权限获取 ? SQL注入漏洞-盲注(boolian base)原理及测试 ? SQL注入漏洞-盲注(time base)原理及测试 ? SQL注入漏洞-基于http header的注入 ? SQL注入表列明猜解-暴力破解在sqli上的应用
表名和列名
? SQL注入-宽字节注入原理及演示 ? 如何使用SQL-Map进行SQL Inject漏洞测试
能够提高我们的工作效率,前提是我们的原理能够搞懂,这样子,在工作当中,才能更好的去跟开发人员沟通,而不仅仅是做一个脚本小子
? SQL注入漏洞常见防范措施
SQL Inject漏洞概述
在owasp发布的top 10漏洞里面,注入漏洞一直是危害排名第一,其中主要指SQL Inject漏洞。
攻击者可以通过这个漏洞,对我们数据库里面的信息,进行获取,因为我们数据库里面的信息是比较重要的东西,获取操作系统权限,对我们操作系统进行远程控制
数据库注入漏洞,主要是开发人员在构建代码时,没有对输入边界(前端用户的输入)进行安全考虑,导致攻击者可以通过合法的输入点提交一些精心构造的语句(明明是要输入1,但是却输入了其它的东西),从而欺骗后台数据库对其进行执行,导致数据库信息泄漏的一种漏洞。
SQL Inject漏洞概述
在这里有个网站,假设它是论坛,一般我们的网站都会有个数据库,用户信息,留言等相关信息都会保存到数据库里面,这是一个正常、普通的架构,假设在我们的页面上有个功能,输入用户id,后端会把用户邮箱,给它显示出来,提供一个页面查询
正常输入: 1
select email from users where id=1;
这个1会被提交到我们的用户程序上面来,我们通过对应的参数,获取到我们输入之后,去连接数据库,把这个输入,放到对应的数据库操作里面去,去获取对应的数据库信息
非法输入: 1 or 1=1
select email from users where id=1 or 1=1;
攻击者不按套路出牌,后端没有对输入参数进行对应的安全措施的话,就会导致用户输入的一整段们都会被完整的拼接到sql语句里面去,因为在我们的后端,你可能把获取到的用户输入直接放到sql里面去,那用户输入的是什么,拼接到的就是什么,这样,整个sql逻辑就变了,执行效果就不同了,它会导致我们表里的数据,都会被遍历出去,那这样子,就导致了我们数据库信息的泄露
SQL Inject漏洞攻击流程
第一步:注入点探测 自动方式:使用web漏洞扫描工具,自动进行注入点发现 手动方式:手工构造sql inject测试语句进行注入点发现
通过前端拼接进去,他传到后台之后,我们通过他返回的数据,看他是否有报错,或者说看他返回的逻辑,来判断我们输入的内容,在后台是不是拼接到数据库里面去执行了,如果是这样,就意味着后端的数据库,会接受我们前端传入的一些其它的操作,那这个地方就存在sql注入
第二步:信息获取 通过注入点取期望得到的数据。 1.环境信息:数据库类型,数据库版本,操作系统版本,用户信息等。 2.数据库信息:数据库名称、数据库表、表字段、字段内容(加密内容破解)
如果数据库权限过大的话,攻击者可以通过数据库功能
第三步:获取权限
获取操作系统权限: 通过数据库执行shell,上传木马,来彻底控制这台机器
SQL Inject漏洞-常见注入点类型
如何判断注入点的类型?
输入这个变量,当他传到我们sql语句的时候,是以什么样的类型拼接进去的
? 数字型 user_id=$id
比如说,以纯数字的方式拼接进去的
? 字符型 user_id=‘$id’
以双引号、单引号、字符串的形式,拼接进去的
? 搜索型 text LIKE ‘%{$_GET[‘search’]}%’"
在数据库里面,还有可能是搜索,像like、百分号方式拼接进去的
其实这个分类并不是绝对的,主要是我们在构造sql注入payload的时候,我们按照这么个分类,来整理我们的思路,来进行相关的闭合测试,数字型怎么闭合,字符型怎么闭合,搜索型怎么闭合,还有其它的类型,我们主要是构造闭合,成功的构建一个闭合,进行相关的测试,这就是成功的
|