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在根目录

  • 相关阅读:
    Java中的Stream流
    JDK1.8之后的新特性和新接口
    IOS6和IOS7的屏幕适配问题
    OC特有语法-分类(category)
    UIApplication的作用
    IO中手机旋转事件的传递
    代码,显示IPhone剩余磁盘空间
    iOS程序的加载过程
    TableView数据源方法的执行顺序
    多线程之线程死锁
  • 原文地址:https://www.cnblogs.com/remon535/p/13039552.html
Copyright © 2011-2022 走看看