一、弱类型比较问题 原则: 字符串和数字比较,字符串回被转换成数字。 "admin" ==0(true) admin被转换成数字,由于admin是字符串,转换失败,变成0 int(admin)=0,所以比较结果是ture 混合字符
字符串和数字比较,字符串回被转换成数字。
"admin" ==0(true)
admin被转换成数字,由于admin是字符串,转换失败,变成0
int(admin)=0,所以比较结果是ture
混合字符串转换成数字,看字符串的第一个
“1admin” == 1 ‘’2admin“ == 2
字符串开头以xex开头,x代表数字。会被转换成科学计数法
1e9 => 1x10^9
GIVE ME THE MONEY!!! PHP include "flag.php"; highlight_file(__FILE__); if (isset($_GET['money'])) { $money=$_GET['money']; if(strlen($money)<=4&&$money>time()&&!is_array($money)) { echo $flag; } else echo "Wrong Answer!"; } else echo "Wrong Answer!"; ?>
使用到第三个原则,输入参数为四个字节,含有字母e分隔的字符串,设置数值比较大,就可以大过time()时间戳
题目要求输入的两个参数a、b满足条件1:a!=b同时满足条件条件2:MD5(a)==MD5(b)
MD5加密的特点是,输入的明文不同,输出的结果必然不同
为了同时实现条件1和条件2,这种极端环境下就要用到弱类型比较问题的三个原则
分析MD5加密,它输出的格式是16进制格式的(输出的元素只有0-9和a-f)
在a-f范围内有个特殊的字符e存在 ,所以用到三原则中的第三个原则
等号比较的两边有xex格式的,都当作科学计数法形式来比较
输入两个0e开头不相同的字符串,就可以同时满足两个条件
传入参数为数组类型,函数返回结果为NULL
输入参数为三个不同的数组
md5($v1)==md5($v2) =>null==null
strcmp()函数比较两字符串是否相同,相同返回0,不相同返回1
v3强行输入数组形式,函数返回值为null,加!变为ture
通常出现strcmp()函数都使用数组绕过,还有就是针对字符串操作的函数
本题是在考验我们是否已经知道了服务器上的某个文件的内容,就是参数aurora值传已知文件的内容,$flag传文件名,就能得到flag
但是问题在于不知道某个文件的内容
解决办法是传空值绕过,传空值不是没传值isset()是可以满足的
aurora&flag
php底层的解析器是由C语言实现的,在c语言表达字符串的终结是'\0',在php中是‘%00’
某些函数不过没有对‘%00’进行特殊处理,就存在着可能绕过的空间
ereg就是这样的函数,当输入123%00到ereg函数中,遇到%00就认为字符串终结,不再判断直接符合条件,返回ture
由于电脑或vim编辑器非正常退出,会保留交换文件,后端源码就保存在交换文件中
例题:
题目提示说电脑会自动关机,电脑自动关机说明文本编辑器肯定会非正常退出,就会留下交换文件
在地址栏中后跟/.index.php.swp
就会自动下载交换文件
文件内的内容就包含后端源代码
来源地址:https://blog.csdn.net/weixin_68177269/article/details/132396862
--结束END--
本文标题: php 系列题目,包含查看后端源代码
本文链接: https://www.lsjlt.com/news/385701.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0