一道小CTF

本来不想更的,因为懒。

其实是手头的项目有点积压!T T

后来今天看到了一题CTF,和同事研究了下,觉得不错。分享给了团队的学弟妹们。只不过懒,没有时间写write up,就让达写了。

-------------------------------------------

Vaf大兄弟搞了一个CTF题,题目是这样的(大牛可以略过):

最终目的就是要通过重重的ifelse难关获取到这里面的东西。

废话不多说,拿源码自己本地搭建下。

搭完后开搞。

首先第一步:从源码得知,只要4个key不为空的get传输,就可以进去第一个if

很好,成功报错,我们突破了第一个门槛的if。

接着看源码

Intval()的意思是对括号的值取整(去掉小数部分)。

我们如果要进入到if($key1 == 1) 里面,既要让intval($key)<1又要让$key1=1…...这尼玛。。。。

不过这还是很容易过去的。(实际上在0~1之间徘徊了一小会)

介绍两种方法:

1、$key1=0.99999999999999999999(输入一大串9,不行继续输)

2、$key1=0x1(16进制表示,intval(0x1)后得到为0)

得到:

结果改变,这样就成功的进去了我们要进的if块。

然后继续,我们需要改变$key2的值进入到如下红框部分,即$key2>=1 and intval($key2+$key1)<=1

这个边工作边搞定的,搞了很久。试了下$key2=0.99999999999999999999999999999、$key2=0x1无果。

最后直接$key2=99999999999999999999或者0xffffffffffffff(16进制)或者077777777777777777(八进制)

数据溢出绕过。

分析下原因,这里是为整数类型的,学过C语言的都知道(long long int最大值9223372036854775807,int最大值2147438647)

当超过这个最大值时就会发生数据溢出,因此只要$key2直接大于这个最大值(我选long long int),数据溢出后变成负数就绕过了。

我们终于走到这里了。离最后的flag只差一步之遥了。

只要$key3和$key4都是整数,并且$key3和$key4又不全是整数,就可以拿到flag了。

看到这里,是不是感觉有点不可能。哈哈。

实际上这里都是is_numeric这个函数在作怪。

这个算是php的一个黑魔法,因为当有两个is_numeric进行判断并且用and连接时,and后面的is_numeric无论判断的是不是数字皆可以绕过。

也就是说

$check = is_numeric(123) and is_numeric(123),//$check=1;

$check = is_numeric(123) and is_numeric(‘abc’),//$check=1;

看到这里,知道该怎么做了吧。

成功get。

感谢vaf大表哥平台。

提醒:可以试着将每个key的值输出,以及他们intval的值,以便观察。

后面说下,为什么要给达打码呢?因为他是色达!

原文发布于微信公众号 - 晨星先生(MoXuanIT)

原文发表时间:2017-04-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏姬小光

正则表达式是个啥

前些天有运营 MM 问小鸡君,正则表达式是个啥啊?懂技术的同学可能会想,你个运营管啥是正则表达式干啥?

812
来自专栏Phoenix的Android之旅

什么是策略模式

策略模式应该是Java设计模式中最简单的一种模式, 它的核心思想是,一个类的行为可以在运行时动态改变,有不同的实现逻辑。

913
来自专栏CDA数据分析师

震惊小伙伴的Python单行代码

几年前,函数式编程的复兴正值巅峰,一篇介绍 Scala 中 10 个单行函数式代码的博文在网上走红。很快地,一系列使用其他语言实现这些单行代码的文章也随之出现,...

2187
来自专栏数说工作室

撕数据! |【SAS Says·扩展篇】

【SAS Says·扩展篇】撕数据! | 4. call PRXPOSN() 0. 前集回顾 1. 新的问题 2. 初识 PRXPOSN() 3. 问题解决 -...

3467
来自专栏take time, save time

你所能用到的数据结构(六)

八、数据结构不一定很枯燥   正如我现在实习的公司的一个同事说的那样,数据结构是一本催眠的书,我想对于大多数人应该是这样的,当然对我也是,看着一大堆的算法,结...

3345
来自专栏我的博客

街灯说javascript学习笔记一

这是我学习javascript这门语言的第二周,下面是心得。 我这两周都是在看教程,然后做实例,但是实例都是一个html文件,不停地预览覆盖,所以没有保存,从下...

2785
来自专栏阿杜的世界

《重构》阅读笔记-代码的坏味道

开发者必须通过实践培养自己的经验和直觉,培养出自己的判断力:学会判断一个类内有多少个实例变量算是太大、学会判断一个函数内有多少行代码才算太长。

732
来自专栏北京马哥教育

Python进阶必读汇总

前言 昨天翻到了一本在github开源的书: Intermediate Python. 就有了此文, 梳理了一下一些之前翻到的对python语言细节点的答案, ...

3225
来自专栏java工会

深度思考编程的艺术

1758
来自专栏AzMark

Python字符串、循环及练习

1894

扫码关注云+社区

领取腾讯云代金券