前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >BUU-第五章

BUU-第五章

作者头像
Baige
发布2022-03-22 15:17:50
2030
发布2022-03-22 15:17:50
举报
文章被收录于专栏:世荣的博客世荣的博客

21.[极客大挑战 2019]BuyFlag

一个简单的页面,看了下源码,发现了index.php和pay.php,发现在pay.php源码里有一段注释掉的源码:

要求用post方法传参money和password,这里要求password等于404,并且password不能为数字,这里可以使用弱类型 令 password=404a 这里参考一篇我自己整理的关于php弱类型的总结文章: 然后通过HackBar提交参数:money=100000000&password=0,但是并没有任何我想看到的回显,这里再看看页面,发现自己漏掉了一句话:You must be a student from CUIT!!! 但是我没有找到相关的修改参数可能,于是直接用Burp抓包看下

发现有一个关键参数来自cookie:user=0,思考片刻,如果0代表False,那么1就是True,改一下参数试试看:

这次说我是Cuiter并且密码也对了,但是又说我数字长度太长了,那就只剩下money这一个参数值了,再改改看。 说数字太长了,那我们我们就可以用科学计数法:1e10,测试得到了flag:

但是这里只是一个脑洞,其实还有一个比较靠谱的办法。

对字符处理的函数在PHP漏洞中非常常见,使用数组进行传参发现即可跳过判断。 money[]=1

知识点: PHP中的strcmp漏洞 说明:

代码语言:javascript
复制
int strcmp ( string $str1 , string $str2 )

参数 str1第一个字符串。str2第二个字符串。如果 str1 小于 str2 返回 < 0; 如果 str1 大于 str2 返回 > 0;如果两者相等,返回 0。 可知,传入的期望类型是字符串类型的数据,但是如果我们传入非字符串类型的数据的时候,这个函数将会有怎么样的行为呢?实际上,当这个函数接受到了不符合的类型,这个函数将发生错误,但是在5.3之前的php中,显示了报错的警告信息后,将return 0

也就是说虽然报了错,但却判定其相等 PHP中的is_numeric()漏洞:

is_numeric函数对于空字符%00,无论是%00放在前后都可以判断为非数值,而%20空格字符只能放在数值后。所以,查看函数发现该函数对对于第一个空格字符会跳过空格字符判断,接着后面的判断!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022 年 02 月,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 21.[极客大挑战 2019]BuyFlag
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档