web140笔记(弱比较参考)

<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-10-13 11:25:09
# @Last Modified by:   h1xa
# @Last Modified time: 2020-10-17 12:39:25

*/

error_reporting(0);
highlight_file(__FILE__);
if(isset($_POST['f1']) && isset($_POST['f2'])){
    $f1 = (String)$_POST['f1'];
    $f2 = (String)$_POST['f2'];
    if(preg_match('/^[a-z0-9]+$/', $f1)){
        if(preg_match('/^[a-z0-9]+$/', $f2)){
            $code = eval("return $f1($f2());");
            if(intval($code) == 'ctfshow'){
                echo file_get_contents("flag.php");
            }
        }
    }
}

最后if判断弱比较等于“ctfshow”的时候输出flag,看一下弱比较参考表

 可以看到0和字符串进行弱比较的时候返回的是true,因为==在进行比较的时候,会先将字符串类型转化成相同,再比较,而ctfshow是一个字符串,和0相比较的时候要转换成数字,ctfshow转换成数字的时候是0,所以相等返回true         

f1和f2是[a-z0-9],intval获取变量整数值
注意到整数0在和"php"字符串做⽐较的时候返回的是0,所以构造出0即可

而intval()函数会将非数字或非数字字符串转换为0,也就是我们传入的f1和f2互相构造即可,我们可以构造一个md5,这样intval就会返回0
所以payload为

post:
f1=md5&f2=md5

 函数的利用 payload: f1=usleep&f2=usleep

posted @ 2025-03-29 13:50  justdoIT*  阅读(13)  评论(0)    收藏  举报