当前位置: 首页 > news >正文

SQL注入 报错注入、文件上传、布尔盲注、时间盲注

第7关   文件上传     ---面试官常问

1、MySQL上传shell的满足条件

如果面试官问你如何通过MySQL向网站上传一个shell脚本或者其他语言的一些脚本

---就可以通过outfile导出的方式进行上传;

outfile导出的前提条件:1、必须知道网站的物理路径;

---因为你要导出到网站那就必须知道网站的路径

  2、必须拥有管理员权限;//上传文件就必须要管理员权限

  3、secure_file_priv 不为 NULL ;

当值不为空,则必须要上传到着参数指定的路径下

2、secure_file_priv 参数

secure_file_priv 为 NULL 时,表示限制mysqld不允许导入或导出。

secure_file_priv 为 /tmp 时,表示限制mysqld只能在/tmp目录中执行导入导出,其他目录不能导出导入。

secure_file_priv 没有值时,表示不限制mysqld在任意目录的导入导出。

--2、查看secure_file_priv 的命令

show global variables like '%secure_file_priv%';

第8关   ---布尔注入

前端直接只会显示一个是否已经进入的界面;

当后端的MySQL代码执行没有报错,或执之后的逻辑返回也是为真,那么就会显示你进入其中了;

当后端的MySQL代码被执行时,出现了报错,那么你的web前端将会显示什么也没有;

这就类似于布尔类型的显示

你要记住,这里的$row是被if给逻辑判断了的,当被正确执行或值为真就会进去;

我们查看后端代码,发现出现这种情况的无非就是因为这段代码--->

MySQL代码被执行就是这段代码实现的。这段代码即对MySQL代码进行执行了又对返回的结果进行处理了;

mysql_quer()才是执行MySQL的查询语句的

当MySQL代码被执行之后返回结果为真的时候就会进入这个if里面;

反之当MySQL代码被执行之后的返回结果为假或直接MySQL代码执行错误(执行错误肯定也算不上为真吧)就会不进入里面;

---所以我们就应该利用这个真假不同的来通过地址栏来执行一段MySQL代码,这个MySQL代码因为不会打印错误信息,所以我们就直接一个一个判断数据库的每个字符;

2、如何进行爆破出数据库名称

---1、通过地址栏,来直接输入一段MySQL的逻辑代码,让后端接收到的为真或假,然后后端在真的基础之后就会显示 东西1,在假的基础上就会显示  东西2,那么我们就可以知道我们的逻辑代码执行之后到底是真还是假;

所以我们这段逻辑代码就可以用来判断数据库的每个字符,一个一个推敲数据库的每个字符;

127.0.0.1/sqli-labs-master/Less-8/?id=1' and ascii(substr(database(),1,1))>114 --+

---当为真的时候,说明比ASCII114大,当为假的时候表示<114 or =114;

--就是这样就可以一个一个推出数据库的每个字符了;

---substr(str,start,long);  截取字符串,一个是起始位置,一个是长度;

当然我们这种获取数据库名称的方式适合任何显示具有布尔视图的网站!!!,包括我们的第5关;

---2、有没有发现如果我们真的在地址栏这里一个一个测试判定数据库的名字字符的话就会非常慢,所以我们尽量这种情况直接使用脚本;

---写脚本之前我们要先明白,我们的脚本不是被网站去调用,而是脚本来调用我们的网站,你想想网站怎么可能去主动调用我们的脚本嘛,肯定是脚本去访问我们的网站,然后一个一个去测试我们的数据库名称呀!

只要是布尔注入就可以使用时间盲注,之所以很多时候不用时间盲注,是因为时间盲注耗费的时间;

---那么时间盲注到底什么时候用最好?

请看下一关:

第9关,不管你有没有进入,就是不管你有没有登录成功,前端都会显示一样的界面   ---时间盲注

1、当我们的前端不管你有没有进入成功都是显示的同样的界面怎么办?

这种总不能还让我们通过页面的布尔类型来判断了吧;

对,这种肯定是不能通过页面布尔来判断,但是我们可以人为手工去创建一个布尔效果来;

如:手工造一个时间布尔!!

127.0.0.1/sqli-labs-master/Less-5/?id=1'

and if(ascii(substr(database(),1,1))>115,sleep(2),sleep(0))--+

当数据库的首字母ascll码>115网站就沉睡2秒,当<115就不沉睡;

注意sleep()是在if()里面的!

所以,从这里可以看出我们的当我们不管是真是假,我们的显示界面一样的话,我们就直接手动创建一个时间布尔;

可以看出这个时间布尔也是可以通过脚本实现的,且实现的方式和前面的页面显示布尔差不多;且可以通同一套逻辑来实现!!

----------->

我们的数据表该怎么求?

第10关   ---同第九关一个原理,只是闭合换成了')

第11关   ---从此关开始,后续都是使用的post传参;

此关和第一关类似,你怎么在url输入查询的就怎么在这里输入查询;post传参和get传参的逻辑没有区别,只是在注释的时候会有区别

但是注意:post传参注释会从--+变成#,原因请看末尾补充部分!

--使用联合查询即可

第12关   ---此关和第2关类似,只是在闭合的时候发生变化,从‘’变成()

使用联合查询即可

第13关   ---和第3关类似,当你输入的数据看不到真实的数据,但是会报错;

那么我们就可以直接使用报错函数updatexml进行强制执行sql语句,将查询出来的结果给爆出来;

对报错注入有疑惑不妨尝试看看这个博客------>

SQL注入 报错注入+附加拓展知识,一篇文章带你轻松入门-CSDN博客

第14关   ---和第4关类似,当然就肯定和第13关类似,也是会输出报错内容,只是闭合和第13关有区别;

所以还是可以使用updatexml(参数1,路径,参数2);路径必须合法,不能有特殊符号;

所以可以使用

--->concat('%7e',(select-group_concat(table_name)

from-information_schema.tables where table_schema=security))

第15关和第5关类似,直接使用时间盲注

---注意:不管是时间盲注还是updatexml通过路径错误来实现报错注入,他们都是可以执行查询语句的;因为后端的php代码会执行sql代码;

补充知识点:

1、var_dump($row)   //使用php函数在屏幕上打印字典集合

2、url编码会把#进行其他转换,所以#传给数据库的时候,已经不是#了,所以就没有了注释的效果的了;

url的地址栏的数据必须是在ASCII码表上有的

详细可见以下博客

URL编码/解码详解

3、为什么要用--+,而不能用--空格;+的作用是什么

MySQL中多行注释是/* */

单行注释是:--空格和#

那么我们在url中传递MySQL的命令时,如果要注释一行的话,就不能写#,因为#是特殊字符,url中不允许出现这种,只能用%23来表示;

--可见上文;

能用%23表示后,在经过url编码之后就会变成#;

同时,我们传递参数也不能使用--空格,因为我们的url中空格/+经过编码之后就会变成+/空格

所以--空格在url中会被编码成--+,然后传递过去也就是--+;

当然如果你在url中写的是--+的话,那么经过url转换之后就会变成--空格;

多行注释是:/* */

---------------------------------我们只讲思路,不讲详细过程;

                                          过程是背,思路是理解;

                                           想要走多远,10%背+90%理解

祝你年薪百万,成绩辉煌!!!

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • TortoiseSVN迁移到本地git
  • P2045 方格取数加强版
  • 人工智能时代,程序员当如何保持核心竞争力?
  • 通过代码学python——格式化变量
  • 当AIGC走进温室大棚:AI+“种菜“的前世今生
  • ACl访问控制实验
  • Ceres Cuda加速
  • 【你也能从零基础学会网站开发】SQL Server 2000中的数据类型之String字符串类型
  • Java:基础语法
  • javascript 的奇技巧淫一
  • Java面试八股之JDK 动态代理和 CGLIB 动态代理的区别
  • 用户画像系列——Spark任务调优实践
  • mysql问题解决
  • 【Material-UI】Icon Button 组件详解
  • 【2.4 python中的基本输入和输出】
  • Angular6错误 Service: No provider for Renderer2
  • JavaSE小实践1:Java爬取斗图网站的所有表情包
  • Laravel Mix运行时关于es2015报错解决方案
  • leetcode46 Permutation 排列组合
  • Linux链接文件
  • MySQL数据库运维之数据恢复
  • passportjs 源码分析
  • PHP 程序员也能做的 Java 开发 30分钟使用 netty 轻松打造一个高性能 websocket 服务...
  • React组件设计模式(一)
  • vue2.0项目引入element-ui
  • VuePress 静态网站生成
  • 阿里云购买磁盘后挂载
  • 关于List、List?、ListObject的区别
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 扑朔迷离的属性和特性【彻底弄清】
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 数据科学 第 3 章 11 字符串处理
  • 说说动画卡顿的解决方案
  • 硬币翻转问题,区间操作
  • 教程:使用iPhone相机和openCV来完成3D重建(第一部分) ...
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • #微信小程序:微信小程序常见的配置传旨
  • (2)(2.10) LTM telemetry
  • (23)Linux的软硬连接
  • (7)svelte 教程: Props(属性)
  • (70min)字节暑假实习二面(已挂)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (Java数据结构)ArrayList
  • (k8s中)docker netty OOM问题记录
  • (vue)el-tabs选中最后一项后更新数据后无法展开
  • (三)centos7案例实战—vmware虚拟机硬盘挂载与卸载
  • (三)Kafka离线安装 - ZooKeeper开机自启
  • (算法)区间调度问题
  • (一)Spring Cloud 直击微服务作用、架构应用、hystrix降级
  • (转)Scala的“=”符号简介
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • .net core 管理用户机密
  • .net Signalr 使用笔记