专栏首页小白帽学习之路小生归一(七)sprintf字符串格式化漏洞

小生归一(七)sprintf字符串格式化漏洞

此文章为原创连载文章,关注公众号,持续更新。

吞掉引号

这两种单引号被吞掉的情况都有可能会引起漏洞。

Sprintf()函数中%1$'[需要填充的字符]10s:

在需要填充的字符前面都要加上一个单引号,’10’代表的字符串总长度为10。

单引号逃逸

<?php
$sql=sprintf("select * from t where a='%\'",'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";
echosprintf( $sql, $args ) ;
//result:select * from user where username = '' and 1=1#'
?>

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

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

%c利用

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

<?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注入。

本文分享自微信公众号 - 程序员阿甘(gh_a2e36d69d566),作者:小生归一

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-05-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Kali Linux Web渗透测试手册(第二版) - 6.5 - 确认并利用SQL盲注漏洞

    我们已经学会了如何找到并利用sql注入漏洞,下面我们将介绍一个同类型的另外一个漏洞,名为sql盲注。它不会有任何回显信息,完全利用两次不同的回显页面造成数据库猜...

    7089bAt@PowerLi
  • 浅谈蜜罐机制

    众所周知,网络安全的势态逐步提上日程,对于安全防御这块完全就是万金油。(那里不对修那里)。

    7089bAt@PowerLi
  • 记一次对补天公益的渗透测试

    可以看到密码也是回显出来了了,利用这个验证码无效,配合我们上面的用户名枚举,可进行批量尝试。

    7089bAt@PowerLi
  • Oracle AWR 阙值影响历史执行计划

          最近有网友提到为什么在dba_hist_sql_plan中无法查看到sql语句的历史执行计划,对于这个问题是由于缺省情况下,Oracle 设定的阙值...

    Leshami
  • pl sql 查看历史执行过的sql记录

    现在越来越多人用plsql 查询和执行sql,因为该工具很方便,不仅可以执行sql、以及命令窗口,但是呢,有时候我们执行完sql,可能忘记保存或者当时觉得可能不...

    小小鱼儿小小林
  • JDBC系列:(3)使用Prepared

    py3study
  • sql格式化工具

    该工具支持oracle、mysql、sql server等关系型数据库,能让你看到sql美化后的清晰的结构,可运用于对复杂SQL语句的分析或者是程序代码优化上,...

    ixiaoyang8
  • 教你如何写出高性能的Mybatis分页插件

    最近做的一个需求需要写复杂的SQL,且需要分页,我是非常懒的人,因为项目中使用了mybatis-plus,因此分页想着使用mybatis-plus的分页插件自动...

    wujiuye
  • JDBC的基本使用流程

    JDBC的基本使用流程: 1 导入jar包: 导入ojdbc6.jar,在项目上右键 builder path–>add to builder path. ...

    葆宁
  • MyBatis系列第1篇:MyBatis未出世之前我们那些痛苦的经历

    MyBatis系列目标:从入门开始开始掌握一个高级开发所需要的MyBatis技能。

    路人甲Java

扫码关注云+社区

领取腾讯云代金券