zoukankan      html  css  js  c++  java
  • 网信杯writeup-web部分

    第一题:

    玩游戏就OK了,好像我记得吾爱破解也有这样的游戏。

    第二题:

    源码内有个js文件

    bp解码 

    第三题

    <?php
    $is_upload = false;
    define("UPLOAD_PATH", "./upload");
    header("Content-type:text/html;charset=utf-8");  
    
    if(isset($_FILES)){
        $ext_arr = array('jpg','png','gif');
        $file_name = $_FILES['upload_file']['name'];
        $temp_file = $_FILES['upload_file']['tmp_name'];
        $file_ext = substr($file_name,strrpos($file_name,".")+1);
        $upload_file = UPLOAD_PATH . '/' . $file_name;
    
        if(move_uploaded_file($temp_file, $upload_file)){
            if(in_array($file_ext,$ext_arr)){
                 $img_path = UPLOAD_PATH . '/'. rand(10, 99).@date("YmdHis").".".$file_ext;
                 rename($upload_file, $img_path);
                 $is_upload = true;
            }else{
                $msg = "只允许上传.jpg|.png|.gif类型文件!";
                unlink($upload_file);
            }
        }else{
            $msg = '上传出错!';
        }
    }
    ?>
    <div id="upload_panel">
        <ol>
            <li>
                <form enctype="multipart/form-data" method="post">
                    <input class="input_file" type="file" name="upload_file"/>
                    <input class="button" type="submit" name="submit" value="上传"/>
                </form>
                <div id="img">
                <?php
                if(@$is_upload){
                    echo '<img src="'.$img_path.'" width="250px" />';
                }else{
                    show_source(__FILE__);
                }  
                ?>
                </div>
            </li>
        </ol>
    </div> 

     很明显,竞争上传。

    第四题:

    看样子是,要读取的文件用bin2hex(base64_encode(gzdeflate($file)))处理一下。

    然后直接本地搭建了一个,生成!key!.php的加密值

    发现

    哦吼,读取不出来。然后转而读取index.php

    成功读取。

    <?php
    error_reporting(0);
    if (!function_exists('hex2bin')) {
    	function hex2bin($hexdata){
    	  $bindata = '';
    	  for ($i=0; $i<strlen($hexdata); $i+=2){
    	      $bindata .= chr(hexdec(substr($hexdata,$i,2)));
    	  }
    	  return $bindata;
    	}
    }
    
    if(!function_exists('bin2hex')) { 
    	function bin2hex($str) { 
    	    $strl = strlen($str); 
    	    $fin = ''; 
    	    for($i =0; $i < $strl; $i++) { 
    	        $fin .= dechex(ord($str[$i])); 
    	    } 
    	    return $fin; 
    	}
    } 
    
    
    @header('Hint: !key!.php && bin2hex(base64_encode(gzdeflate($file)))');
    // if(!isset($_GET['jpg']))
    //     header('Refresh:0;url=./index.php?jpg=5338744a544e664c4b6b674841413d3d');
    $file = gzinflate(base64_decode(hex2bin($_GET['jpg'])));
    echo '<title>web</title>';
    echo '<center><h3>'.$_GET['jpg'].'</h3>';
    $file = preg_replace("/[^a-zA-Z0-9.]+/","", $file);
    $file = str_replace("config","!", $file);
    $txt = base64_encode(file_get_contents($file));
    echo '$file is :'.$file;
    echo "<br/>this is text:".$txt.'。';
    echo "<img src='data:image/gif;base64,".$txt."'></img></center>";
    
    ?>'
    

      

    32行很显然,将config替换为!,这....确实是故意的 

    $file = preg_replace("/[^a-zA-Z0-9.]+/","", $file);把感叹号过滤了,然后又多了个config替换为感叹号。

    很显然通过脚本生成加密文件

    最终读取!key!.php文件

    内容

    第五题:

    注入题,吃完饭回来,哦吼~比赛结束了。

    最初fuzz了一下,是过滤了空格、substring。/**/、substr就OK。

    .....

    又是一篇划水文。

  • 相关阅读:
    【转】 VC MFC 钩子 实现 自绘 窗体 标题栏 非客户区
    Scintilla开源库使用指南(二)
    Scintilla开源库使用指南(一)
    【转】MFC 多文档
    多视图识别
    获得MFC窗口其它类指针的方法
    sql2005 查看数据库或表大小的系统存储过程 sp_spaceused
    哪里是乐土?关于团队良性循环 (转)
    项目管理反思——前言
    项目经理思考——团队
  • 原文地址:https://www.cnblogs.com/nul1/p/13470169.html
Copyright © 2011-2022 走看看