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

posted @ 2025-03-14 23:22  justdoIT*  阅读(20)  评论(0)    收藏  举报