| 关键词: password 题目 flag 字符串 strcmp false 一下 内容 注释 函数 |
这是一道CTF中常见的题目,我们来看一下题目描述(其实ctf中题目描述很多都是没用的,甚至还会误导我们) 题目描述先让我们找密码: ![]() 打开这个页面,似乎并没用什么东西出现。根据经验我们要看一下源码有没有东西! ![]() 右键查看源码:发现有个注释掉的index.txt ![]() 我们来看一下index.txt,果真提示性代码出来了。 ![]() 其实这么多就这两行有用(让我想到了开发最后就是再写if/else),看到上面我注释好的passwd满足的条件了把,password不为null且password和flag字符串相同? 第一个不为null很好满足,那第二个条件呢?看似strcmp函数对比两个字符串相同则返回0否侧返回正数或者负数,但是很明显我们要是知道flag我们还做它干啥,这里一定要看清和0对比是用的==而不是===,这就是php的魅力,===是要类型,内容相等,而==只要内容相等即可。 什么是内容相等呢,false和0是相等的,那这里我们想strcmp函数中什么时候会返回false呢,只有当对比的两个对象不是同一类型时会返回false。 这里我们就想flag肯定是字符串,那我们让password为数组的情况下肯定返回为false了。 构造如下: flag就出来了! 虽然这是一个CTF题目,但是php开发的小伙伴一定要注意再strcmp和==同时使用时的特点,避免留下漏洞被利用。 |
| 本文出处: https://www.toutiao.com/a6779908584265220620/ |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|