zoukankan      html  css  js  c++  java
  • sprintf格式化字符串安全问题

    先看sprintf用法:

    定义和用法

    sprintf() 函数把格式化的字符串写入变量中。

    arg1arg2++ 参数将被插入到主字符串中的百分号(%)符号处。该函数是逐步执行的。在第一个 % 符号处,插入 arg1,在第二个 % 符号处,插入 arg2,依此类推。

    注释:如果 % 符号多于 arg 参数,则您必须使用占位符。占位符位于 % 符号之后,由数字和 "$" 组成。

    例子1(当占位符使用):

    例子2(%2表示占位符,$s表示格式化类型):

    在php格式化字符串中,%后的一个字符(除了%)会被当做字符类型,被吃掉,包括'  所以造成了单引号逃逸。

    %没有被吃掉

    这样可能遇到php 警告,可以提交%1$吃掉后面的斜杠。

    总结利用条件:

    1、执行语句使用sprintf或者vsprintf拼接

    2、执行语句进行了俩次拼接,第一次拼接的参数内容可控

    参考文章:https://paper.seebug.org/386/

    GitHub:https://github.com/Afant1
    不忘初心、方得始终
    Copyright@2021 Afant1
    [转载文章务必保留出处和署名,谢谢!]
  • 相关阅读:
    练习题
    练习题
    作业 —— day77
    解决:Django项目no such table django_session
    解决:A server error occurred. Please contact the administrator
    作业24
    元类
    类的内置方法
    反射
    考试错题
  • 原文地址:https://www.cnblogs.com/afanti/p/8033191.html
Copyright © 2011-2022 走看看