美文网首页我爱编程
【CTF-PHP】PHP弱类型

【CTF-PHP】PHP弱类型

作者: Kirin_say | 来源:发表于2017-11-13 10:53 被阅读666次

    以一道CTF题目引入对php弱类型的说明:

    题目Writeup:

    打开题目,提示输入密码

    先看看网页源码:view-source:http://120.24.215.80:10001/

    网页源码

    发现“PHP-The best language for programming”

    想起题目PHP-WEAK-TYPE

    根据提示,应该是php弱类型绕过

    先查看是不是存在php源码泄露

    在http://120.24.215.80:10001/index.php~中发现存在php源码

    打开网页源码:view-source:http://120.24.215.80:10001/index.php~

    看到了PHP源码:

    PHP源码

    需要提交md5值与QNKCDZO的md5值相等且不是QNKCDZO的字符

    考虑php弱类型,QNKCDZO的md5值开始为0e,比较时化为科学记数法为0

    md5为0e开始的字符还有:

    240610708

    s878926199a

    s155964671a

    s214587387a

    s214587387a

    s878926199a

    s1091221200a

    s1885207154a

    输入其中一个,得到flag:

    Flag

    PS1.0:关于PHP源码泄露:

    在URL上常见的几种PHP泄露类型.php~\.index.php.swp\.index.php.bak\.index.php.swo\.index.php.svn\.index.php.zip\.index.php.rar\.index.php.txt\.index.php.old

    PS2.0:关于PHP弱类型

    弱类型语言允许将字符看做多种类型,php就是一种弱类型语言

    在php语言的==和===比较中

    ==:先把字符串类型变成相同,再进行比较

    ===:先判断字符串类型是否相同,再进行比较

    (当字符串被当作一个数值来处理时,如果该字符串没有包含'.','e','E'并且其数值在整形的范围之内,该字符串作为int来取值,其他所有情况下都被作为float来取值,并且字符串开始部分决定它的取值,开始部分为数字,则其值就是开始的数字,否则,其值为0)

    在上题中当QNKCDZO的md5值当作数值,其开始部分为0e,会被视作科学计数法,0的所有次方都是0,故,只需找到另一个md5值开始为0e的即可,0与0恒等,所以成功绕过,得到Flag。

    相关文章

      网友评论

        本文标题:【CTF-PHP】PHP弱类型

        本文链接:https://www.haomeiwen.com/subject/gqnamxtx.html