在PHP的代码基础上,PHP字符串offset取值特性,可以拿来利用,给PHP应用程序带来安全风险。

  在PHP中,可以像操作数组一样操作字符串,字符串中的字符可以用类似数组结构中的方括号包含对应的数字索引的形式来进行查找和修改,例如 $test[0]。当然 字符串中字符的排列也是从零开始的。如果需要操作的字符多余一个的话,就考虑使用函数 substr()和 substr_replace()吧。

代码示例一:

<?php
$test = "Hello World";
echo $test[0];    //输出H
echo "<br/>";
echo $test[1];    //输出e
?>

  Tips:$test[0] 方括号中的数字超出范围将会产生空白。 非整数类型被转换成整数,非法类型会产生一个 E_NOTICE级别错误, 负数在写入时会产生一个E_NOTICE,但读取的是空字符串。

代码示例二:

<?php
$test = "Hello World";
echo $test[0];    //输出H
echo "<br/>";
echo $test['id']; //输出H
?>

  可以看出,$test[0]等价于$test['id']

  代码片段可以看出,对于$test['id']这种形式的字符串,在offset取值时键值会被转换为整形,也就是等同于$test[0]这种形式。

漏洞场景:

  在某平台曾经遇到某道代码审计的题目,大致还原代码如下:

示例代码:

<?php
ini_set("display_errors", "On");
error_reporting(0);
foreach (array('_COOKIE','_POST','_GET') as $_request)
{foreach ($$_request as $_key=>$_value)  {$$_key=  $_value;}
}
//$userinfo=333333
$userinfo["username"] = $username; //==> $userinfo[0]=a 赋值以后 $userinfo=a33333
$userinfo["password"] = $password; //==> $userinfo[0]=1 赋值以后 $userinfo=133333
$_SESSION["userinfo"] = $userinfo;var_dump($_SESSION);
echo "<br/>";
$userinfo=$_SESSION["userinfo"];   //输出 array(1) { ["userinfo"]=> string(6) "133333" }
if($userinfo["id"] == 1) {echo "flag{xxx}";die();
}
?>

漏洞分析:

  只有当$userinfo["id"] == 1时,才能得到flag,$userinfo由$_SESSION["userinfo"]赋值而来,$_SESSION["userinfo"]又由$userinfo赋值,只要通过变量覆盖将$userinfo覆盖为值1xxxx即可,具体参数流程详见示例代码。原题还有其他条件,只能覆盖$_SESSION来解题。上面自己还原的代码还可以用变量覆盖直接解题。

<?php//?userinfo[id]=1
ini_set("display_errors", "On");
error_reporting(0);
foreach (array('_COOKIE','_POST','_GET') as $_request)
{foreach ($$_request as $_key=>$_value)  {$$_key=  $_value;}
}var_dump($_GET);  //array(1) { ["userinfo"]=> array(1) { ["id"]=> string(1) "1" } }
echo "<br/>";if($userinfo["id"] == 1) {echo "flag{xxx}";die();
}
?>

参考文档:

https://github.com/80vul/webzine/blob/master/webzine_0x06/PSTZine_0x06_0x03.txt

PHP字符串offset取值特性相关推荐

  1. 5G NR 决定CORESET0频域位置的offset取值由来

    在NR的下行同步过程中,UE要先盲检到SSB,然后根据SSB找到对应的CORESET0,然后在CORESET0内盲检PDCCH,进而可以得到DCI信息,从而找到承载SIB1的PDSCH. 那如何根据S ...

  2. Jackson第二篇【从JSON字符串中取值】

    来源:http://blog.csdn.net/songyongfeng/article/details/6932674 第一篇咱们主要学习了实体与json的相互转换的问题,但是咱们需要的是数据 你转 ...

  3. 自动化测试基础(一):字符串的取值、切割、替换、去除、拼接

    一.前言 字符串:在python中用成对的单引号.双引号.三引号括起来的都是字符串,它可以是中文.英文.特殊字符等几乎任何字符. 二.取值 字符串取值用索引,索引从0开始 s='hello!' #元素 ...

  4. Python @property装饰器的用法,判断函数参数整形、字符串、取值范围

    如果我们对所赋的值有一定的限制,比如要求名字必须是字符串,年龄必须是数字,否则会对方法的调用造成影响,这个时候单纯的赋值就不能满足这样的过滤效果了.既然是条件过滤,那么这几条代码就需要放在方法里,所以 ...

  5. string类型--字符串常用取值操作

    1.字符串常量 (1)不依赖于语言环境: string.ascii_letters ==>'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXY ...

  6. python 下划线转驼峰_json字符串中key值下划线命名转换为驼峰命名

    json字符串中key值下划线命名转换为驼峰命名: 例如: 原json串: String json= "{'user_name':'ok','user_sex':0,'object_info ...

  7. STL:string容器特性、定义、初始化、等号、取值、拼接、查找、替换、比较、字串、插入、删除

    一.string的特性 string和char*类型字符串的对比: char是一个指针,string是一个类,string封装了char,管理这个字符串,是一个char*型的容器. string封装了 ...

  8. 【参数】REMOTE_LOGIN_PASSWORDFILE参数三种取值及其行为特性分析

    在某些情况下可以使用REMOTE_LOGIN_PASSWORDFILE参数增强系统的安全性,所谓提高安全性就是禁止以SYSDBA或SYSOPER特权用户从客户端登陆到数据库系统中.这是一种牺牲管理便捷 ...

  9. Mysql 数据类型(整数、浮点数、定点数、字符串)【类型取值范围】

    整型 MySQL数据类型 含义(有符号) tinyint(m) 1个字节  范围(-128~127) smallint(m) 2个字节  范围(-32768~32767) mediumint(m) 3 ...

最新文章

  1. Moore状态机和Mealy状态机的区别
  2. java注解详解_Java注解详解
  3. tablayout支持改变选中文字大小,支持左右滑动,支持viewpager,支持三角可移动指示器...
  4. Spring基于 XML 的声明式事务控制(配置方式)
  5. Linux 查看磁盘或文件夹及文件大小
  6. 数据库课程设计结论_结论:
  7. SqlServer学习之存储过程
  8. nlog自定义文件名
  9. e5cc温控仪通讯参数设定_应用 | 如何实现S7300与S7200smart通讯?
  10. 尺度、空间异质性、干扰、景观多样性、景观连接度,对其概念的理解
  11. blog11 Sent2Vec和Doc2Vec预训练模型
  12. 前端 实现 直角三角形 边长、角度计算工具
  13. H5 +蓝牙打印机 CPCL和ESC
  14. 检查xml写的格式是否正确的方法
  15. 微软VS硬伤 - 未能起用约束集
  16. SpringBoot与SpringCloud的版本对应详细版
  17. ionic3小知识(持续更新...)
  18. 余热回收系统:ORC低温余热发电原理
  19. Tensorflow2中Kares自定义损失函数
  20. 挂载zookeeper到文件系统 (mount zookeeper)

热门文章

  1. 2009年广东省大学生程序设计竞赛 A
  2. 实测java 与php运行速度比较
  3. linux基础应用和常用技巧
  4. DataGridView里的Checkbox全选问题解决了!
  5. ie11java阻止_企业IT管理员IE11升级指南【10】—— 如何阻止IE11的安装
  6. httpsurlconnection 写不进去authorization值_23. 假设检验的时候为什么常写p lt; 0.05,而不写具体的p值?...
  7. c html转换成word,C#实现HTML转WORD及WORD转PDF的方法
  8. 湖北汽车工业学院c语言程序设计 汽车零部件采购管理程序,湖北汽车工业学院c语言课程设计实验报告(采购信息管理系统).docx...
  9. c语言设计通讯录管理程序,C语言程序的设计学生通讯录管理系统方案.docx
  10. 计算机基础简介、编程语言、翻译器、数据储存