自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(54)
  • 收藏
  • 关注

原创 35c3 krautflare

由于Math.expm1经过patch以后的返回值不可能是-0,但是patch的地方是在typer优化中,所以实际上如果没有优化的话是可以返回-0的,这就意味着如果我们先不停地Math.expm1正常执行不返回-0,触发优化,就会导致turbofan认为Math.expm1不可能返回-0,就可以控制一个布尔型变量始终为false,如果再利用这个布尔型变量乘n作为一个数组的下标,最终就会导致checkbounds检查被去除,此时再传入-0让其返回-0,就造成oobarray。

2023-12-24 17:32:53 529

原创 34c3 v9

然后先把o.d改成arraybuffer的地址,此时原本的2.2被替换成了arraybuffer的地址,然后再把o.d替换成一个object,就叫他target吧,此时原本2.2的位置刚好就是target的properties字段,注意这里的替换不是正经替换,必须是无感的通过此漏洞直接将o.d的位置写成target的地址,其他任何数据都不扰动。手法大概就是,首先有一个object和一个ArrayBuffer,然后object里放上一个键值对,方便的形式如下。

2023-12-24 13:46:23 461

原创 2022xctf-final hole

所以当我们能够在-1的位置写一个entry,并且bucket的数量为2的时候,意味着我们可以把这个entry的key写到bucket count字段上去,修改了bucket count就意味着这个map对象的entry偏移变了,原本存储entry的地址被认为成了是bucket,所以再次进行set的时候会把entry放到更远的位置,造成越界写,如果越界写恰好改变了某个array的length,则造成了大范围的自由OOB,后续的思路就比较常规了。elements里则是存储了每个具体的entry。

2023-12-22 19:14:20 997

原创 2019QWB growpjs

第一次知道原来各种map也是申请的一段连续的内存空间来存储,所以必要的时候可以通过固定偏移来从一种map获取到另一种map。但是要注意这里的获取的时候要保证对象不被释放。这也是做的第一道涉及优化器的题目,收货很多。

2023-12-20 23:01:08 474

原创 PlaidCTF roll-a-d8

第一次尝试最后不采用wasm写shellcode来getshell。

2023-12-20 11:25:28 405

原创 2020-XNUCA babyv8

做的第一道存在指针压缩机制的V8题,通过小越界写修改length构造大越界读写,然后利用arraybuffer的backing store构造任意地址写,利用wasm rwx段地址的特点以及堆空间的分布,搜索到rwx段的具体地址,然后利用任意地址写将shellcode写到rwx段上去即可。

2023-12-18 03:01:50 429

原创 数字经济大赛决赛-Browser

【代码】数字经济大赛决赛-Browser。

2023-12-14 10:17:36 380

原创 CTF V8 pwn入门(一)

仍然是因为某些原因,需要学学浏览器pwn。

2023-12-12 16:09:11 1124

原创 CTF特训日记day2

day2打了一个叫NBCTF的比赛做了四个题,剩下五道arm的题不会做了,关注一下wp,也许可以靠这个比赛提升一波异架构能力。

2023-12-06 21:35:02 534

原创 CTF特训日记day3

接下来就要思考如何获取shell,由于got表可改,且程序本身就自带system表项,如果选择改got表是比较方便的一种做法,但是由于题目本身不出网,所以必须复用此udp端口,导致无法通过执行命令下载木马或者反弹shell,虽然能够执行的命令比较长,可以使用echo的方式强行写入一个二进制程序去执行,但是由于涉及到端口复用,会可能会出现奇奇怪怪的错误。原本的六个0xff变成了mac地址,然后data[6]+1需要等于0x8e,然后v7记得改成2,别的就不用动了,主要看函数里面。

2023-12-06 21:34:20 1050

原创 CTF特训日记day(4-6)

分析到这里整体漏洞成因已经彻底清楚了,如果我们能控制一个不受任何限制的header_size,将其控制为0x80000000,即一个最小负数,从而绕过header_size不能大于总的输入长度的限制,然后read_so_far作为一个随意的小数,相减以后发生负溢出,header_size将变成一个非常巨大的远超8192的正数,从而导致堆溢出发生。即实际执行的是trans_tcp_recv,追溯到最后就是原生的recv函数,而其缓冲区则是self->in_s,通过init_stream函数分配空间。

2023-12-06 21:34:00 966

原创 CTF特训日记day7

对于控制程序执行流,首先需要构造任意地址写原语,到这里就不得不祭出之前在move中找到的漏洞了,现在似乎必须弄清楚为什么会double free了,明明我们逆向出的它是个UAF,通过调试发现,原来是程序结束的时候会将用到的内存都释放掉,但是之前这里是个UAF,并且程序还直接结束了没有进行后续的处理,所以最后显示出来的是个double free,也是有点无语哈哈哈哈。程序首先获取两个参数,分别为dst和src,其本意为free掉dst本来指向的内存,然后将src的内存指针给dst处,最后将src指针归零。

2023-12-06 21:33:34 792

原创 AFLNET lightftp项目报错解决方法

AFLNET中的一种报错解决方式

2023-02-16 15:20:55 1271 4

原创 2022 蓝帽杯 初赛wp

蓝帽杯部分wp

2022-07-11 10:29:40 526

原创 CVE-2021-3156 漏洞复现笔记

CVE-2021-3156复现笔记

2022-07-01 09:20:08 10616 4

原创 2022 CISCN 初赛pwn完整wp

2022 CISCN 初赛pwn的完整wp

2022-06-09 11:16:21 2181 2

原创 2022 CISCN初赛 Satool

2022年国赛初赛的一道高分pwn题,之前没有接触过LLVM PASS类的pwn题,正好入个门

2022-06-09 01:36:50 553

原创 LLVM PASS类pwn题入门

国赛上遇到了LLVM PASS的pwn不会做,于是趁此机会来入个门

2022-06-01 23:34:09 919 7

原创 2022 CISCN 初赛 newest_note

国赛的pwn3,不是很难,简单记录一下上来就怼了个整型溢出,直接让hepa_num为0x40040000,就可以让这个存堆指针的堆申请到libc上面,并且后面free和show的时候相当于都没有了index限制所以直接用show打印main_arena上的libc内指针即可泄露libc,然后申请9个chunk,释放一个泄露堆地址,再释放六个填满tcache,然后再利用fastbin做一个double free(因为free之后没有清空指针,所以还存在一个UAF),但是说实话就算没有这个UAF,因为可以

2022-05-31 00:14:51 813 8

原创 BROP入门之 KCTF 2022 废土末世

定义来自CTF wiki:BROP 是没有对应应用程序的源代码或者二进制文件下,对程序进行攻击,劫持程序的执行流攻击条件源程序必须存在栈溢出漏洞,以便于攻击者可以控制程序流程。服务器端的进程在崩溃之后会重新启动,并且重新启动的进程的地址与先前的地址一样(这也就是说即使程序有 ASLR 保护,但是其只是在程序最初启动的时候有效果)。目前 nginx, MySQL, Apache, OpenSSH 等服务器应用都是符合这种特性的基本思路暴力枚举获取栈溢出长度,逐字符比较泄露返回地址,获取gad

2022-05-25 00:20:10 1197

原创 Angr 从入门到放弃(三)

之前我们已经学习了angr的基础操作,比如怎样建立约束模拟器,怎样添加避免执行地址,怎样把创建符号化变量,怎样读取或指定寄存器的值,怎样设置程序符号执行的目标地址,怎样hook一个地址或者直接重写某一个函数,怎样添加寄存器约束条件的,本篇文章将继续学习一些angr的基础操作。通过标准输出来指定目标地址试想如果一个程序会打印good或者bad,但是有很多个地方都打印了good,也有很多个地方都打印了bad,这就无法通过指定某一个地址来让模拟器跑,至于avoid,虽然也可以手动的将所有打印bad的地址都加进

2022-05-12 11:57:49 265

原创 Angr 从入门到放弃(二)

本篇直接以一个例子来进一步学习angr在CTF比赛中的实战2021年SCTF上的checkin(虽然叫checkin但是并不是很checkin就是了)这是一个auto pwn,每次连上去先进行一个sha256的验证,然后会给出一大段base64加密后的数据,接收下来然后解密并保存成二进制文件,是一个ELF格式的可执行程序,拖进ida里面会发现,程序逻辑很简单但是量很大,通过不断的读入字符串和数字,然后对数据进行异或,异或之后再和一些固定数据比较,根据比较结果进行跳转。并且每次连上去拿到的程序不一样,要求

2022-05-11 12:27:34 523

原创 Angr 从入门到放弃(一)

libfuzzer那个系列先放一放吧,学了学感觉也没有比AFL好用很多,所以重复性较高的东西先不着急学了吧,这里开个新坑,为了做同学出的一道auto pwn,来学学angr基础知识首先了解一下什么是符号执行:传统符号执行传统的符号执行一般是静态的,即将具体的输入值抽象成符号,执行完之后再根据符号结果解方程,举个例子就会好懂很多a=input()b=3+ac=2*bif(c*2+4==9): win()else: lose()对于上述代码,正常的程序执行是给a赋一个实际值,然后经

2022-05-11 01:02:50 1322

原创 2022 春秋杯 ichunqiuIOT

把通信协议逆一下就行,后面UAF随便打from pwn import *from ctypes import *#context.log_level = 'debug'#io = process('./pwn')io = remote('47.93.2.254',34737)libc = ELF('./libc-2.33.so')rl = lambda a=False : io.recvline(a)ru = lambda a,b=True : io.recvunt

2022-05-10 19:41:53 310 1

原创 *ctf 2022 babyarm

2022年的一场分站赛的题,当时只有5个解,但是赛后评价似乎不是特别难,这里来复现一下Ayaka yyds!一道arm架构的内核题,先来看看启动脚本:#! /bin/sh## run.sh# Copyright (C) 2022 hal <hal@server20>## Distributed under terms of the MIT license.#timeout --foreground 60 qemu-system-aarch64 \ -m 128M

2022-05-02 22:28:43 568

原创 libfuzzer从入门到放弃(一)

什么是libfuzzerlibFuzzer 是一个in-process,coverage-guided,evolutionary 的 fuzz 引擎,是 LLVM 项目的一部分。libFuzzer 和 要被测试的库 链接在一起,通过一个入口点将测试用例喂进待测库中,然后会根据代码覆盖率对输入语料进行变异传统的fuzz是通过不断生成随机的测试用例,喂给函数或程序执行,然后检测是否出现crash,是一种纯随机的过程,而libcfuzzer是coverage-guided(覆盖率引导)的,即通过llvm插桩

2022-04-27 09:05:27 4203 2

原创 2022 MRCTF pwn ezbash

昨天打的mrctf上的一道题,大概数了一下有十几个解吧,算是签到题题目给出了一个程序,运行起来之后是一个bash环境,但是里面的文件都是堆上的内存。拿到题目之后首先分析一下文件结构体:这里写的稍微有点问题,其实标志位是前四位,然后file_name的offset为4到20,20到24是这四个字节没有用,是空的,不过懒得改了,凑活着看吧其中标志位标识当前chunk是一个文件还是一个文件夹其他函数具体怎么逆向过程就不说了,好麻烦如果在逆向上卡住的可以给我发私信,我把逆完的i64发你然后看下洞在哪:

2022-04-25 08:24:22 536 1

原创 starctf 2019 hackme

学kernel的第四天解包之后发现init是空的,好怪哦接下来分析ko文件,可以看到只实现了一个ioctl比较有用首先是与用户态交互,交互方式是每次32字节,可以看做一个结构体struct io{ dword idx dword padding qword buf qword len qword offset}然后实现了增删读写四个功能在读写的时候进行了怎样的操作我们来观察一下:首先会根据传入的结构体中的idx来确定对哪个chunk进行操作,然后根据offset来确定要读写

2022-04-19 23:18:11 2567

原创 2020 hxpctf kernel-rop

学kernel的第四天,还是挺不好学的···通过这道题我们来学习一下通过覆盖modprobe_path的内核漏洞利用姿势拿到题目后先解包,分析下启动脚本#!/bin/shqemu-system-x86_64 \ -m 128M \ -cpu kvm64,+smep,+smap \ -kernel vmlinuz \ -initrd initramfs.cpio.gz \ -hdb flag.txt \ -snapshot \ -nographi

2022-04-18 22:41:22 2824

原创 基于modprobe_path的内核提权方法

什么是modprobe?这玩意就是用于在Linux内核中添加一个可加载的内核模块,或者从内核中移除一个可加载的内核模块,它是我们在Linux内核中安装或卸载新模块时都要执行的一个程序。该程序的路径是一个内核全局变量,默认为/sbin/modprobe,我们可以通过运行以下命令来查看该路径:cat /proc/sys/kernel/modprobe这个路径是可写的,普通用户也是可以更改它的而当内核运行一个错误格式的文件(或未知文件类型的文件)的时候,也会调用这个 modprobe_path所指向

2022-04-18 20:15:37 725

原创 *CTF 2022 pwn examination

题目主要实现了两个角色,每个角色四五个功能,漏洞点主要有以下几点:当学生的question_number为1,并且pray过一次,老师在给分的时候就会扣十分,由于question_number为1,所以分数会模10,即小于10,减10之后发生负溢出,变成个很大的数。从而可以进入这里的功能:这里可以泄露堆地址,并且可以让一个已知地址指向的值加一然后是这里:这里可以修改一个堆地址的低1字节,从而修改堆块结构,将下一个chunk的size改大,释放后将libc内地址踩进可控堆块,泄露libc。然

2022-04-17 20:33:14 482

原创 2018 0CTF Finals Baby Kernel

学kernel的第三天,仍然很不想学拿到题目先看看启动项#!/bin/shmount -t proc none /procmount -t sysfs none /sysmount -t devtmpfs devtmpfs /devecho "flag{this_is_a_sample_flag}" > flagchown root:root flagchmod 400 flagexec 0</dev/consoleexec 1>/dev/consoleexec 2

2022-04-14 15:13:56 307

原创 CISCN 2017 babydriver ROP做法

具体题目分析请看CISCN 2017 babydriver uaf做法UAF这种做法在新版内核中已经不生效了,因为新进程的cred结构体会有一个单独的区域进行申请。这里介绍另一种ROP的做法首先要知道一些前置的知识当用open打开/dev/ptmx的时候,会创建一个tty_struct长这样: struct tty_struct { int magic; struct kref kref; struct device *dev;

2022-04-14 10:34:22 317 2

原创 强网杯 2018 core ret2user做法

关于题目的具体分析移步强网杯 2018 core ROP做法这里就只介绍ret2user这种做法,不再对题目进行具体分析。这个题没有smep,所以可以直接在内核态执行用户态的代码,所以我们可以自己写一个执行commit_creds(prepare_kernel_cred(0))的函数,然后修改返回地址到那个函数,之后再进入用户态执行system(/bin/sh\x00)来起shell,省去了找gadget编写rop的过程exp:#include <stdio.h>#include &

2022-04-13 20:44:21 1451

原创 强网杯 2018 core ROP做法

学kernel的第二天,仍然很不想学·····拿到题目看下init先:#!/bin/shmount -t proc proc /procmount -t sysfs sysfs /sysmount -t devtmpfs none /dev/sbin/mdev -smkdir -p /dev/ptsmount -vt devpts -o gid=4,mode=620 none /dev/ptschmod 666 /dev/ptmxcat /proc/kallsyms > /tmp/

2022-04-13 20:03:53 514 1

原创 CISCN 2017 babydriver uaf做法

本来是在学IOT和fuzz,但是比赛中经常出现kernel题,我们又没人会做,没有办法只好我来学了·····(一万个抗拒)这可能是大部分人的第一道kernel题吧hhhhh虽然在新的内核版本中此文的UAF做法已经失效,但是对于初学者来说,此题非常适合理解kernel题目的攻击流程拿到题目先解压,提取文件系统:mkdir rootfsmv rootfs.cpio ./rootfs/rootfs.cpio.gzcd rootfsgunzip rootfs.cpio.gzcpio -idmv &l

2022-04-12 20:10:35 1564

原创 格式化字符串类盲pwn的dump方法

有一类题目,不会给任何文件,只给一个ip和端口,这种称为blind pwn(盲pwn),如果这类pwn存在格式化字符串漏洞的话,可以通过一些手法拿到整个二进制程序,这对我们的逆向分析和解题是十分重要的,举个例子:在2022年的Insomni’hack teaser比赛上,有一道题CovidLe$s,就是一道盲pwn,输入什么就回显什么,但是存在格式化字符串漏洞,并且应该是栈上的,通过不断的尝试是可以大致猜测出栈结构的:从偏移12开始是栈上的缓冲区,29那里是canary,31是返回地址,根据后三位可以

2022-04-11 19:40:38 596

原创 2022 VNCTF easyROPtocol

一道协议逆向+orwROP的题,基本上难度在于给出符合要求的协议头和校验和拿到题目:在打印的信息中我们可以获取到,这个程序是TCP protocol的C语言实现于是先把TCP的头部结构拿过来:首先进add函数里看看:可以看到能够申请最多4个chunk,每个chunk最多0x1000生成之后要通过check_head函数和check_sum的检测首先看check_head:从这里可以得到确定一些头部信息,如源端口和目的端口,还有urgent_ptr必须为0,等,还有一些属性只能缩小范围,

2022-04-09 21:28:32 1796

原创 2021 N1CTF mmmmmmmap

这个题很有意思,考查到了不是很常用的chunk低三位里的M位,当M位为1的时候,表示chunk是由mmap申请出来的题目结构是常见的菜单堆题,在异或的部分有一个小溢出然后在exit中给了一个格式化字符串,但是有一个条件:即必须要write(1,buf,0xa)失败,而buf是程序一开始申请的一个chunk,即便我们把它free掉或者做什么处理,至少不会让write失败,能让它返回-1的唯一条件是buf变成指向一块无法访问的内存,那么什么样的内存无法访问,被munmap收回的内存无法访问,所以做法是通

2022-04-07 21:04:50 245

原创 2021 湖湘杯 tiny_httpd

这个题目给出了源码,就不逆向了程序实现了一个小型的web服务器,漏洞点如下:在进行路径过滤的时候不是很严格,将··替换成·,但是如果输入···,则仍然有··的效果,所以可以做一个路径穿越然后关注一下cgi这个变量:当cgi为0的时候是访问文件,为1的时候则是命令执行只有传参传的是GET或者POST时,cgi才会为1,首先想的是能不能利用路径穿越直接读取根目录下的flag于是跟进serve_file函数但是发现文件名filename是写死进去的,所以这个思路走不通,另一条路是利用路径穿越执

2022-04-07 15:26:32 2895

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除