1、[SWPUCTF 2021 新生賽]easyrce
<?php
error_reporting(0);
highlight_file(__FILE__);
if(isset($_GET['url']))
{
eval($_GET['url']);
}
?>
?if(isset($_GET['url'])) isset函數用來檢測url變量是否存在;$_GET函數獲取變量數據
?eval($_GET['url']); eval函數用來執行參數數據,并返回結果,其中字符串當作PHP代碼來執行。
利用eval函數進行命令執行嘗試
/?url=system('ls /');
得到了根目錄內容
看到一個與flag有關的文件,用cat命令查看。
得到flag
.system函數
該函數會將執行的結果輸出并將輸出結果的最后一行作為字符串返回,如果執行失敗則返回fale。這個函數也是經常被使用到的。
<?php highlight_file(__FILE__); system('pwd'); ?>
2.1.2.exec函數
該函數不會輸出結果,但是會返回執行結果的最后一行,可以結合output進行結果的輸出。
<?php highlight_file(__FILE__); exec('pwd',$b); var_dump($b); ?>
2.1.3.passthru函數
該函數只調用命令,并將運行的結果原封不動的輸出,沒有相應的返回值。
<?php highlight_file(__FILE__); passthru('ls'); ?>
2.1.4.shell_exec函數
該函數不會輸出結果,返回執行結果 使用反引號(``)時調用的就是此函數。
<?php highlight_file(__FILE__); var_dump(shell_exec('ls')); ?>
2、[SWPUCTF 2021 新生賽]babyrce
<?php
error_reporting(0);
header("Content-Type:text/html;charset=utf-8");
highlight_file(__FILE__);
if($_COOKIE['admin']==1)
{include "../next.php";
}
elseecho "小餅干最好吃啦!";
?> 小餅干最好吃啦!
?用if語句判斷cookie的值是否等于 admin=1,如果相等則輸出包含的文件../next.php,嘗試cookie注入。
得到了一個php文件,打開看看,是一段新的代碼。
<?php
error_reporting(0);
highlight_file(__FILE__);
error_reporting(0);
if (isset($_GET['url'])) {$ip=$_GET['url'];if(preg_match("/ /", $ip)){die('nonono');}$a = shell_exec($ip);echo $a;
}
?>
正則匹配“/ /”,因此要得到flag需要繞過空格
空格繞過:
> < <> 重定向符
%20(space)
%09(tab)
$IFS$9
${IFS}(最好用這個)
$IFS ?
%0a? 換行符
{cat,flag.txt} 在大括號中逗號可起分隔作用
所以用${IFS}繞過空格,查看根目錄內容。
發現有一個flllllaaaaaaggggggg,flag應該就在里面,用cat命令查看。
得到flag
3、[羊城杯 2020]easycon
打開頁面后沒有提示和信息,嘗試查看源碼
看到了一個地址,嘗試查看,發現了一個index.php,打開后發現又回到了剛才的頁面。
換一個思路,嘗試目錄掃描,
掃描出了兩個文件,嘗試打開看一下。
打開后得到一個彈窗頁面,eval post cmd想到一句話木馬或者命令執行。
嘗試蟻劍鏈接,發現數據為空應該不是一句話木馬。
嘗試命令執行,通過post傳入參數
嘗試打開txt文件查看內容,命令執行cat
查看到一串字符串,猜測可能需要轉成jpg格式
是一個base64轉圖片,得到flag。