zoukankan      html  css  js  c++  java
  • BUUCTF-web Easyweb

    从这道题学到了挺多

    一打开题目就是登陆页面,遂扫描文件检测是否存在文件泄露

     用dirsearch扫出了robots.txt,.DS_Store和其他php。DS_Store没有可用信息(buuoj的题扫描一定不能太快。。。。429警告)

    打开robots.txt,要素察觉,有备份文件。

    逐个尝试,发现了image.php.bak文件,分析一波源码

    <?php
    include "config.php";
    
    $id=isset($_GET["id"])?$_GET["id"]:"1";
    $path=isset($_GET["path"])?$_GET["path"]:"";
    
    $id=addslashes($id);
    $path=addslashes($path);
    
    $id=str_replace(array("\0","%00","\'","'"),"",$id);
    $path=str_replace(array("\0","%00","\'","'"),"",$path);
    
    $result=mysqli_query($con,"select * from images where id='{$id}' or path='{$path}'");
    $row=mysqli_fetch_array($result,MYSQLI_ASSOC);
    
    $path="./" . $row["path"];
    header("Content-Type: image/jpeg");
    readfile($path);
    
    
    addslashes函数会在预定字符前加,如果我们在id参数传入,经过addslashes函数处理就会变为\0,然而后面的str_replace把置换为空,那
    么我们插入的\0就会变成,把id参数后的'转义。此时我们的sql语句如下
    select * from images where id='or path=''

    可以在path参数进行注入,注释掉后面的单引号并用and 1=1构造注入

    select * from images where id='or path='and 1=1--+'

    也可以利用path重新构造id进行注入

    select * from images where id='or path=' or id=1--+'

    脚本如下

     注入这里搞了半天,密码比较长。把n的范围设到20才爆出完整密码

    因为手工太慢了所以尝试了sqlmap

    sqlmap牛逼!!不过这里有个坑。。。。前要加转义让失去转义功能,可以用v参数查看注入的payload来调整语句

    查到用户名和密码登录之后发现上传点

    随便传个文件,返回结果里显示有上传路径

    打开之后发现是日志文件,用来记录上传的文件名

    接下来思路就很清晰了,这是个php文件,并且会记录文件名。我们只需要把文件名改成一句话。上传之后就会被解析成php。一般的一句话会被拦截,因为出现了"php"。我们可以采用短标签<?=  ?>代替<?php  ?>

    蚁剑连接,flag在根目录

  • 相关阅读:
    领域驱动设计概念(Domain-driven Design), Flower(响应式微服务框架)
    主流RPC框架通讯协议实现原理与源码解析
    响应式微服务框架Flower——快速上手
    netty源码-server端绑定端口流程
    ubuntu 20.04版本更新软件源为国内源(清华、网易、阿里云等等)
    ubuntu20.04源码安装nginx
    docker环境下Java获取cpu核心数不准确,实际上是宿主机的cpu核心数
    利用docker快速搭建创建开发环境
    mac配置python环境
    Apache Maven-创建项目
  • 原文地址:https://www.cnblogs.com/remon535/p/13039552.html
Copyright © 2011-2022 走看看