首页 > 其他分享 >buu 代码审计

buu 代码审计

时间:2024-06-08 15:25:26浏览次数:22  
标签:审计 代码 buu flag exit file php page echo

代码审计

[HCTF 2018] WarmUp

查看源码

image-20240428212058776

访问 source.php

<?php
    highlight_file(__FILE__);
    class emmm
    {
        public static function checkFile(&$page)
        {
            $whitelist = ["source"=>"source.php","hint"=>"hint.php"];
            if (! isset($page) || !is_string($page)) {
                echo "you can't see it";
                return false;
            }

            if (in_array($page, $whitelist)) {
                return true;
            }

            $_page = mb_substr(
                $page,
                0,
                mb_strpos($page . '?', '?')
            );
            if (in_array($_page, $whitelist)) {
                return true;
            }

            $_page = urldecode($page);
            $_page = mb_substr(
                $_page,
                0,
                mb_strpos($_page . '?', '?')
            );
            if (in_array($_page, $whitelist)) {
                return true;
            }
            echo "you can't see it";
            return false;
        }
    }

    if (! empty($_REQUEST['file'])
        && is_string($_REQUEST['file'])
        && emmm::checkFile($_REQUEST['file'])
    ) {
        include $_REQUEST['file'];
        exit;
    } else {
        echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";
    }  

看到hint.php

image-20240428213216746

利用indlue函数 文件包含漏洞

image-20240428214402363

../返回上一级目录

image-20240428213547852

[BJDCTF2020]Mark loves cat

dirsearch扫描发现是git泄露

image-20240429193547983

image-20240429193632206

githack.py下载得到源文件 index.php

<?php
include 'flag.php';

$yds = "dog";
$is = "cat";
$handsome = 'yds';

foreach($_POST as $x => $y){
    $$x = $y;
}

foreach($_GET as $x => $y){
    $$x = $$y;
}

foreach($_GET as $x => $y){
    if($_GET['flag'] === $x && $x !== 'flag'){
        exit($handsome);
    }
}index.php

if(!isset($_GET['flag']) && !isset($_POST['flag'])){
    exit($yds);
}

if($_POST['flag'] === 'flag'  || $_GET['flag'] === 'flag'){
    exit($is);
}

echo "the flag is: ".$flag;

flag.php

<?php

$flag = file_get_contents('/flag');

foreach循环导致变量覆盖

foreach是用于数组和对象的循环语句

  • <?PHP
       $authors = array( "Java", "PHP", "CSS", "HTML" ); 
    
       foreach ( $authors as $val ) { 
           echo $val . "\n"; 
       }   
    ?>
    

    image-20240429212241852

  • <?php //from   ww w  .  ja  va2s .  c o m
    $myBook = array( "title" =>  "Learn PHP from www.w3cschool.cn", 
                    "author" =>  "www.w3cschool.cn", 
                    "pubYear" =>  2000 ); 
    
    foreach ( $myBook as $key =>  $value ) { 
       echo "$key  \n"; 
       echo "$value \n"; 
    } 
    
    ?>
    

    image-20240429212323294

  • <?PHP
    /*www .j a  va  2  s. c  o  m*/
    $authors = array( "Java", "PHP", "CSS", "HTML" );
    
    // Displays "Java PHP Javascript HTML";
    foreach ( $authors as $val ) {
        if ( $val == "CSS" ) $val = "Javascript";
        echo $val . " ";
    }
    
    print_r ( $authors );
    ?>
    

    image-20240429212711380

image-20240429221208586

可变变量

如果一个变量的值刚好是另一个变量的名字 就可以通过访问一个变量来得到另一个变量

方法; 在此变量 之前加一个 $

例如 $$x相当于 $($x)

image-20240429221508887

1.构造payoad

yds=flag

image-20240429213622672

exit()也是输出的一种

yds=flag被处理为 $yds=$flag

image-20240429213958386

因为没有传入 $_GET和$_POST所以直接输出exit()

$handsome = 'yds'; 使 yds=flag输出handsome为flag{}

image-20240429222059798

2.构造payload

image-20240429220439267

经处理 $is=$flag输出$flag 构造 flag=flag是为了exit(is)

image-20240429222140913

image-20240429222303813

image-20240429222323030

[HCTF 2018]admin

打开页面什么也没有

image-20240430083833599

查看源码 发现登录注册

image-20240430084218011

注册 admin-admin 显示改账号已被注册过

随便组测一个登录

image-20240430084034758

image-20240430084458289

change 界面看到

访问

ok 404 nice!

image-20240521211344235

看wp 参考链接BUUCTF [HCTF 2018]admin 1

代码审计到flag{}

是session=admin就能得到flag

利用工具

image-20240521212651578

[ZJCTF 2019]NiZhuanSiWe

源码

<?php
$text = $_GET["text"];
$file = $_GET["file"];
$password = $_GET["password"];
if(isset($text)&&(file_get_contents($text,'r')==="welcome to the zjctf")){
    echo "<br><h1>".file_get_contents($text,'r')."</h1></br>";
    if(preg_match("/flag/",$file)){
        echo "Not now!";
        exit();
    }else{
        include($file);  //useless.php
        $password = unserialize($password);
        echo $password;
    }
}
else{
    highlight_file(__FILE__);
}
?>

file_get_contents把文件读到一个字符串中

利用伪协议php://input绕过file_get_contents函数

image-20240608112716383

读取文件里的字符串,要和 welcome to the zjctf相等

构造paylaod

image-20240608112629953

image-20240608112830390

flag被匹配掉了

尝试读取useless.php源码,用php://filter

image-20240608113025264

base64解码

看到__toString方法

image-20240608113356950

构造payload读取flag.php,将N替换为flag.php

image-20240608113906495

访问源码

image-20240608113929739

标签:审计,代码,buu,flag,exit,file,php,page,echo
From: https://www.cnblogs.com/Yolololo/p/18238625

相关文章

  • 维护一个对象只能通过new来创建,且要实现对象能够自动销毁的单例代码实现及扩展。
    结论:析构函数设为私有且在单例类的内部维护一个Chelper类。(如果是单例,还要将构造函数设为私有,如果是可以在全局有多个实例但是希望只能提供new创建,则构造必须公有且必须提供成员函数来调用deletethis来调用该对象的析构函数)。具体细节可看代码解释部分。代码实现:test.hcla......
  • Java毕业设计-基于springboot开发的善筹网(众筹)前后台实现设计-毕业论文(附毕设源代码)
    文章目录前言一、毕设成果演示(源代码在文末)二、毕设摘要展示1、开发说明2、需求/流程分析3、系统功能结构三、系统实现展示1、管理员功能实现1.1众筹管理1.2商品信息管理1.3商品类型管理四、毕设内容和源代码获取总结Java毕业设计-基于springboot开发的善筹网(众......
  • 【YOLOv8改进】CPCA(Channel prior convolutional attention)中的通道注意力,增强特征
    YOLO目标检测创新改进与实战案例专栏专栏目录:YOLO有效改进系列及项目实战目录包含卷积,主干注意力,检测头等创新机制以及各种目标检测分割项目实战案例专栏链接:YOLO基础解析+创新改进+实战案例摘要医学图像通常展示出低对比度和显著的器官形状变化等特征。现有注意......
  • 掌握Python 这10个OOP技术,代码想写不好都难!
    目录1、面向对象设计原则......
  • BUUCTF 32~36 wp
    32多线程开了两个线程,其中一个是没有内容的,只会减少循环次数,所有字符串只在奇数或偶数发生变化一直跟踪对字符串的操作这里的二维数组,行是一个指针组,列是指针里面的内容,因为这个地址里面只存了一个地址,所有都以[0]开头,然后在这个地址一一检索字符串,区分大小写-38或-96写出......
  • 工程数学上机实验四:共轭梯度法程序设计代码
    function[k,x,val]=frcg(fun,gfun,x0,epsilon,N)%共轭梯度法求解无约束问题%fun,gfun分别为目标函数及其梯度,x0是初始点%epsilon是容许误差,N是最大的迭代次数ifnargin<5,N=10000;endifnargin<4,epsilon=1e-6;endbeta=0.6;sigma=0.4;n=length(x0);k=0;while(k<......
  • BUUCTF-WEB(66-70)
    [MRCTF2020]套娃参考:MRCTF2020套娃-Rabbittt-博客园(cnblogs.com)upfine的博客(cnblogs.com)查看源码然后我这里查一下$_SERVER的这个用法然后这边的意思就是里面不能用_和%5f(URL编码过的下划线)然后传入b_u_p_t里面这个参数有下划线,我们想办法绕过substr_coun......
  • Java毕业设计-基于springboot开发的入校申报审批系统设计与实现-毕业论文(附毕设源代码
    文章目录前言一、毕设成果演示(源代码在文末)二、毕设摘要展示1、开发说明2、需求/流程分析3、系统功能结构三、系统实现展示1、用户信息管理2、入校申请管理3、公告类型管理4、公告信息管理四、毕设内容和源代码获取总结Java毕业设计-基于springboot开发的入校申报审......
  • 从VS Code源码看清晰代码之美
    VSCode的产品做的很优秀,其源码也质量颇高,清晰、整洁、富有美感。下面是 src\vs\workbench\common\notifications.ts 文件中的两段代码,大家感受一下:getsticky():boolean{if(this._sticky){returntrue;//explicitlysticky}consthasAct......
  • Pyramid Vision Transformer, PVT(ICCV 2021)原理与代码解读
    paper:PyramidVisionTransformer:AVersatileBackboneforDensePredictionwithoutConvolutionsofficialimplementation:GitHub-whai362/PVT:OfficialimplementationofPVTseries存在的问题现有的VisionTransformer(ViT)主要设计用于图像分类任务,难以直接用......