安基网 首页 安全 攻防案例 查看内容

利用php中双等于和三等于的区别,无需密码拿到flag

2020-3-15 16:51| 投稿: |来自:


免责声明:本站系公益性非盈利IT技术普及网,本文由投稿者转载自互联网的公开文章,文末均已注明出处,其内容和图片版权归原网站或作者所有,文中所述不代表本站观点,若有无意侵权或转载不当之处请从网站右下角联系我们处理,谢谢合作!

摘要: 这是一道CTF中常见的题目,我们来看一下题目描述(其实ctf中题目描述很多都是没用的,甚至还会误导我们)题目描述先让我们找密码:打开这个页面,似乎并没用什么东西出现。根据经验我们要看一下源码有没有东西!右键查看源码:发现有个注释掉的index.txt我们来看一下index.txt,果真提示性代码出来了。i ...

这是一道CTF中常见的题目,我们来看一下题目描述(其实ctf中题目描述很多都是没用的,甚至还会误导我们)

题目描述先让我们找密码:


打开这个页面,似乎并没用什么东西出现。根据经验我们要看一下源码有没有东西!


右键查看源码:发现有个注释掉的index.txt


我们来看一下index。txt,果真提示性代码出来了。


isset($_GET['password'])//满足passwd不为null
strcmp($_GET['password'], $flag) == 0//password和flag相等

其实这么多就这两行有用(让我想到了开发最后就是再写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和==同时使用时的特点,避免留下漏洞被利用。



小编推荐:欲学习电脑技术、系统维护、网络管理、编程开发和安全攻防等高端IT技术,请 点击这里 注册账号,公开课频道价值万元IT培训教程免费学,让您少走弯路、事半功倍,好工作升职加薪!

本文出自:https://www.toutiao.com/a6779908584265220620/

免责声明:本站系公益性非盈利IT技术普及网,本文由投稿者转载自互联网的公开文章,文末均已注明出处,其内容和图片版权归原网站或作者所有,文中所述不代表本站观点,若有无意侵权或转载不当之处请从网站右下角联系我们处理,谢谢合作!

相关阅读

最新评论

 最新
返回顶部
极速赛车是国家开的吗 千禧彩票是真的吗 上海11选5走势 山东11选5开奖 智慧彩票投注 传奇彩票计划群 内蒙古快3计划 易富彩票计划群 520彩票计划群 8828彩票计划群