原文链接:https://paper.seebug.org/386/

摘要点关键知识点

<?php$input = addslashes("%1$' and 1=1#");
$b = sprintf("AND b='%s'", $input);
...
$sql = sprintf("SELECT * FROM t WHERE a='%s' $b", 'admin');
echo $sql;

通过fuzz得知,在php的格式化字符串中,%后的一个字符(除了'%')会被当作字符类型,而被吃掉,单引号',斜杠\也不例外。

如果能提前将%' and 1=1#拼接入sql语句,若存在SQLi过滤,单引号会被转义成\'

select * from user where username = '%\' and 1=1#';

然后这句sql语句如果继续进入格式化字符串,\会被%吃掉,'成功逃逸

<?php
$sql = "select * from user where username = '%\' and 1=1#';";
$args = "admin";
echo sprintf( $sql, $args ) ;
//result: select * from user where username = '' and 1=1#'
?>

还可以使用%1$吃掉后面的斜杠,而不引起报错

<?php
$sql = "select * from user where username = '%1$\' and 1=1#' and password='%s';";
$args = "admin";
echo sprintf( $sql, $args) ;
//result: select * from user where username = '' and 1=1#' and password='admin';
?>

国外安全研究人员Anthony Ferrara给出了另一种此漏洞的利用方式

<?php$input1 = '%1$c) OR 1 = 1 /*';
$input2 = 39;
$sql = "SELECT * FROM foo WHERE bar IN ('$input1') AND baz = %s";
$sql = sprintf($sql, $input2);
echo $sql;

%c起到了类似chr()的效果,将数字39转化为',从而导致了sql注入。

转载于:https://www.cnblogs.com/test404/p/7821884.html

sprintf格式化字符串带来的注入隐患相关推荐

  1. php中sql格式化字符串,sqli注入-sprintf格式化字符串带来的注入隐患

    PHP中 sprintf()格式化输出详解 sprintf()函数把格式化的字符串写入变量中. arg1.arg2.++参数将被插入到主字符串中的百分号(%)符号处.该函数是逐步执行的.在第一个%符号 ...

  2. ssacanf\Sprintf格式化字符串

    一.sscanf sscanf() - 从一个 int sscanf(const char *buffer,const char *format,[argument ]...); buffer 存储的 ...

  3. c语言中格式化字符串系列函数包括,解析C语言中常用的格式化输入、输出函数...

    fprintf(格式化输出数据至文件) 这个函数的功能类似于文件操作函数 fwrite();通过一个文件描述符将数据写入该文件描述符所指向的文件中. 函数定义: int fprintf(FILE * ...

  4. sprintf函数的格式化字符串_尚学堂百战程序员:Python 字符串处理

    一个字符不等价于一个字节,字符是人类能够识别的符号,而这些符号要保存到计算的存储中就需要用计算机能够识别的字节来表示.一个字符往往有多种表示方法,不同的表示方法会使用不同的字节数.这里所说的不同的表示 ...

  5. python格式化字符串漏洞_Python新型字符串格式漏洞分析及解决方案

    最近一个python字符串格式化的漏洞引起了我的注意,今天就来说一下Python引入的一种格式化字符串的新型语法的安全漏洞进行了深入的分析,并提供了相应的安全解决方案. 当我们对不可信的用户输入使用s ...

  6. php sprintf u,PHP sprintf()格式化用法详解

    php sprintf函数是一个非常强大的函数,本篇文章特别记录一下php中的sprintf函数格式化字符串的相关用法. 定义和用法 sprintf() 函数把格式化的字符串写入一个变量中. 语法 s ...

  7. CTF(pwn)-格式化字符串漏洞讲解(一)

    例题讲解 https://blog.csdn.net/weixin_45556441/article/details/114081864 一.基本介绍 格式化字符串漏洞在通用漏洞类型库CWE中的编号是 ...

  8. c++字符串输入_【pwn】什么是格式化字符串漏洞?

    0x00 前言 格式化字符串漏洞是在CWE[1](Common Weakness Enumeration,通用缺陷枚举)例表中的编号为CWE-134,由于在审计过程中很容易发现该漏洞,所以此类漏洞很少 ...

  9. python中格式化字符串的作用_python中字符串格式化的意义(化妆)

    格式 描述 %%百分号标记 #就是输出一个% %c字符及其ASCII码 %s字符串 %d有符号整数(十进制) %u无符号整数(十进制) %o无符号整数(八进制) %x无符号整数(十六进制) %X无符号 ...

最新文章

  1. poj 1681 Painter#39;s Problem(高斯消元)
  2. 4 个 MySQL 优化工具 AWR,帮你准确定位数据库瓶颈!
  3. 不愧是大佬用Python做一个游戏辅助脚本,完整编程思路分享!
  4. 关卡设计快速入门_5. 编辑已放置的Actor
  5. 在线识图翻译_拍照翻译ios版下载在线识图翻译-免费拍照翻译软件苹果版下载...
  6. 全国计算机等级考试题库二级C操作题100套(第09套)
  7. 国内高速前端 Unpkg CDN 替代方案
  8. oracle oci.dll的作用,ASP.NET bin目录中的Oracle oci.dll无法删除/不起作用
  9. oracle 11g跳过坏块,oracle 使用Dbms_Repair跳过坏块
  10. opencv cvtColor dtype issue(error: (-215) )
  11. python发音语言-python 利用pyttsx3文字转语音过程详解
  12. 「Leetcode」142.环形链表II:环找到了,那入口呢?
  13. java连接数据库实现一个简单的登陆界面
  14. Android 健康饮食软件详解
  15. 14个UI精美功能强大的Android应用设计模板
  16. 富爸爸穷爸爸读书感言
  17. 编码器和译码器(数电实验报告)
  18. 网络骇客入门之网络编程(一):网络应知应会
  19. [HNOI2004]宠物收养所
  20. 剑指XX游戏(二) - 网易2011笔试题详解

热门文章

  1. php首尾空格,php 去掉 头尾   空格 2种方法
  2. c语言字符串化简,华为面试题:一元多项式的化简 C语言实现源码
  3. innodb主键的长度为什么不能大于767字节
  4. java类库帮助文档,薪资翻倍
  5. python【蓝桥杯vip练习题库】BASIC-14 时间转换(取余 水题)
  6. 【题解】 HDU 2570 迷瘴
  7. win10定时关机c语言,Win10系统怎么定时关机?Windows10设置定时关机的两种方法
  8. idea svn配置_IDEA 导入svn项目实践
  9. c++ thread 内存泄漏_深入剖析ThreadLocal原理、内存泄漏及应用场景
  10. js中关于this的小问题