当前位置: 代码迷 >> 综合 >> [GXYCTF2019]禁止套娃(.git泄露,php代码审计)
  详细解决方案

[GXYCTF2019]禁止套娃(.git泄露,php代码审计)

热度:72   发布时间:2024-02-24 01:16:59.0

1 .git泄露.直接到github中下载对应的工具.
跑一下.
e在这里插入图片描述
得到index.php源代码.

<?php
include "flag.php";
echo "flag在哪里呢?<br>";
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__);
?>

开始审计.
第一个if过滤了一些协议.
第二个if要求我们有一个’;‘并且我们不能够输入参数,否则就不符合条件了(不能被Null替换掉).
第三个if过滤了一些敏感词.
如果我们知道flag.php的路径,那么就可以通过highlight_file打印出来了.
可是在无参的条件下我们如何找路径呢?
这里有一个scandir函数可以输出目录.
但是scandir函数要有一个参数呀,这里就有一个localeconv函数了.
具体用法如下.
在这里插入图片描述
我们可以通过current函数输出他的第一个元素.
这里我们先打印一下localeconv的输出是什么.
在这里插入图片描述
可以发现第一个元素是’.’
这样就可以通过scandir(’.’)得到当前路径下的文件了.
我们尝试打印一下.
在这里插入图片描述
会发现当前目录下的flag.php排在倒数第二个位置.
这里我们有个next函数可以输出数组中内置指针加’1’指向的位置.可是我们无法通过3个next函数得到flag.php因为next函数它的返回类型并不是一个数组.所以换个思路,先将数组倒转过来,然后再通过next函数得到flag.php.接着在对应进行打印输出.
这样就可以得到完整的exp了.
exp=highlight_file(next(array_reverse(scandir(current(localeconv())))));
在这里插入图片描述