Grey CTF 2023 - Write me a Book
5th place
Write me a Book
First blood ^ ^
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136#!/usr/bin/python2# -*- coding: UTF-8 -*-from pwn import *io = remote('34.124.157.94', 12346)context.binary = 'chall'elf = ELF('cha ...
春秋杯 2023 WP
AK了PWN,但其他方向基本爆0(
PWN
p2048
2048打完就通,随机数是固定的,所以每次出现的数字和位置都一样
1234from pwn import *io = remote('39.106.48.123', 32818)io.send('awddadwwdwdwdwwadwdwadwwdwdwwdwwwaddwdwdawdwwawdawdddddddwddwdadwwwwwdadwdwawdwdwadadwdddwawdwawdwdwdwddwdwadwdwwdwwdwdwwwddadwdawawdadwwdwdwddwwddwadwaddwawwddawdwwdwdwdwddwaddwadwdwdwwawwdwwdwawdwdwadwwwwwdwwdwwadwwawwdwwaddwdddadwdddwddwddwadaswdwdwwdawdwadwddwwdwwwawdwddwawdwdwdwdwddwwdawdwdwawdwawwdwdawdwddwdwadwdwawddawwdwwdwwddwddadwwwdwwwwwdwdadwdd ...
DASCTF X SU 2022 wedding
PWN
wedding
大体的思路参考 roderick 师傅的这篇博客
程序分析
洞有3个
第一个是 preapare 函数里的指定偏移位置写两个固定内容的字节,没有检查偏移大小。共有3次机会
第二个是 preapare 函数里表示 heap 数组和 size 数组下标的变量可能未初始化
第三个是 revise 函数里未检查数组下标大小
利用思路
申请大内存,让 malloc 使用 mmap 来分配内存,此时得到的chunk指针与libc的偏移是固定的。利用 preapare 函数里3次任意偏移写的机会,前两次用来修改 _IO_2_1_stdout_ 结构体的 _flags 和 _IO_write_base,泄露出 libc , heap , elf 和 stack 的地址;最后一次用来修改与 elf 基址偏移为 0x4014 的地方的值,这个地方的作用下面再解释
随便申请5个chunk,将 preapare 函数中检查的8个下标都填满,这样在下次申请时,表示下标的变量就不会在 preapare 函数中初始化
这个表示数组下标变量在 rbp-0xc 的位置,所以可以利用 my ...
广东省省赛 2023 记录贴
2022的省赛决赛被拖到了2023,还和网鼎杯撞了(
本来4人的队,有两个队友去网鼎杯了,然后只剩我一个pwn和一个crypto师兄去打
第二次打线下,第一次接触dawd这种赛制
比赛
赛前一直在摸鱼,开赛前一天才开始看手册上的赛制介绍,然后学着写shell脚本和用来修复程序的 ida patch
用来攻击的shell脚本,每次执行会自动运行当前目录下所有的名字以exp开头并以py结尾的文件
12345678#!/bin/bashfor file in *; do if [[ $file =~ ^exp.*\.py$ ]]; then echo "exec $file" python2 $file $1 $2 fidone
dawd_pwn_ttt
找到的洞有3个,栈溢出、格式化字符串和堆溢出,比赛时只打了格式化字符串和堆溢出
手快拿到了一血
exp
fmtstr
12345678910111213141516171819202122232425262728293031323334353637 ...
Midnight Sun CTF 2023 WP
PWN
上去看的时候队里的师傅都已经把PWN都打穿了,挑几题补了一下
SCAAS
没给附件,nc连上去之后第一个选项可以下载 base64 编码之后的附件
下载附件脚本
123456789101112131415161718192021#!/usr/bin/python2# -*- coding: UTF-8 -*-from pwn import *from base64 import b64decodefd = open('chall', 'wb')# context.log_level = 'debug'p = remote('scaas-1.play.hfsc.tf', 1337)p.sendlineafter(' > ', '1')p.recvuntil('Here is your SCAAS service: (\n')data = ''code = ''while True: dat ...
DASCTF NOV 2022 WP
PWN
一开始看 heapmaster 去了,看了半天没打出来,然后快没时间了就只写了个签到题
签个到
程序分析
程序功能有点类似于一个菜单堆,第一次处理输入的函数存在 off by one 漏洞
菜单提供了两个功能,分别是 add 和 get
add 函数中,输入 size 后可以在 malloc 出来的指针上输入 size 个字节,若指针上前4个字节无内容则会将其赋值为 0x886 。 size 的值不能超过 0x10,即正常情况下最多只能输入10个字节大小的 content 。然而,在输入 content 时调用的处理输入函数中,判断输入数据界限的条件为 <= size - 1 ,所以当 size == 0 ,即 (size - 1) == 0xffffffffffffffff ,可以绕过检查输入超出预期的内容导致堆溢出
get 函数中,会以输入的8个字节数据为key,遍历储存指针的数组。若当前下标对应指针上第5~13字节的数据等于输入的key,第1~9字节的数据等于 canary ,则会调用 backdoor 来 getshell
利用思路
利用一开始的 off ...
VNCTF 2023 WP
PWN
比赛那天有事没打,赛后补的题
Traveler
程序分析
主函数存在栈溢出,只能覆盖到rbp和返回地址,同时拥有一次往bss段上写入 0x28 个字节的可控内容的机会
利用思路
在bss段上布置好rop_chain,栈溢出劫持rbp为bss段以及劫持返回地址为 leave; ret ,将栈迁移至以及布置好的rop_chain上。这里有个坑,就是直接写入执行 system("/bin/sh") 的rop_chain会无法正常 getshell ,这是因为栈迁移后的栈地址太低了,在执行 system 函数时容易使栈指针rsp下降到不可写的位置而导致 Segmentation fault ,如下图……
所以需要先将栈抬至足够高再来打 system("/bin/sh") 的rop
这里我是利用 pop rsi; pop r15; ret; 的gadget配合 read 函数不断地抬高栈,每次 read 执行完会返回至该gadget出抬高栈帧地址同时更新rsi寄存器,即 read 的二参,这样在下一次 read 的时候就可以往高处写入覆盖至 r ...
Hello World
Intro
欢迎来看我博客的师傅们 O (∩_∩) O
以后会在这里放一些学习笔记/WP(这段时间可能会先把一部分以前写的WP搬过来),记录一些自己做过的题/打过的比赛
当然也会记录一下生活,写写日记什么的
看心情不定期更新
日常喜欢打游戏(玩的很杂),听电音(尤其是Trance),看动漫(最喜欢头文字D了)。希望可以和师傅们多多交流~