It's our wits that make us men.

2019/5/2 Web:Basic PHP

Posted on By LuLu

Web:Basic PHP

题目描述:

题目中给了一点提示:Basic PHP,以及两个网站http://web1.blue-whale.me:23331/feature/和http://123.207.149.64:23331/feature/

知识准备:

  • PHP的一些基本知识,附带大佬博客https://www.restran.net/2016/09/26/php-security-notes/

解题过程:

  • 打开题目给的两个网址,发现虽然网址不一样,但是打开之后的网址都变成了http://123.207.149.64:23331/feature/

  • 通过题目的代码,可以知道,要通过两关才能得到flag

    • 第一关:使得MD5加密后的test参数等于0

      • 介绍一批md5开头是0e的字符串,0e在比较的时候会将其视作为科学计数法,所以无论0e后面是什么,0的多少次方还是0md5(‘240610708’) == md5(‘QNKCDZO’)成功绕过!MD5值为0的常用数据:

        QNKCDZO=0e830400451993494058024219903391
        s878926199=0e545993274517709034328855841020
        s155964671a=0e342768416822451524974117254469
        s214587387a=0e848240448830537924465865611904
        s214587387a=0e848240448830537924465865611904
        s878926199a=0e545993274517709034328855841020
        s1091221200a=0e940624217856561557816327384675
        s1885207154a=0e509367213418206700842008763514
        
    • 第二关:$_GET[‘name’] == $_GET[‘password’]不满足,并且满足sha1($_GET[‘name’]) === sha1($_GET[‘password’])

      • == 是弱类型的比较,在进行比较的时候,会先将字符串类型转化成相同,再比较

      • === 在进行比较的时候,会先判断两种字符串的类型是否相等,再比较

        如果比较一个数字和字符串或者比较涉及到数字内容的字符串,则字符串会被转换成数值并且比较按照数值来进行
              
        
  • 得到flag:http://123.207.149.64:23331/feature/?name[]=1&password[]=2&test=240610708