学习自BLE_CTF低功耗蓝牙CTF挑战 环境搭建 项目地址:ble_ctf · github 首先你需要淘宝购买一块ESP32的板子,随便买一块就行了 然后在kali虚拟机里输入如下命令(注意wsl不行,因为串口无法连接到wsl里面,还是虚拟机好一些) pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple pip install esptool 首先得安装 esptool 用来烧录 esp32 git …
reboot https://github.com/BYU-CSA/BYUCTF-2024 题目把flag放在一个随机目录下 然后题目的server存在一个命令拼接漏洞,直接第一次set hostname的时候,把hostname设置成;/bin/bash;第二次即可拿到shell 有shell了想要找到一个flag路径就不多说了 Sal https://github.com/BYU-CSA/BYUCTF-2024 external flash memory chip(外部存储芯片) 一般用来存…
学习文章来源于[RTOS] 基于VxWorks的TP-Link路由器固件的通用解压与修复思路 - 赤道企鹅的博客 | Eqqie Blog 固件来源 传送门:TL-WDR7660千兆版 V1.0升级软件20190830_2.0.30 固件下载链接:https://service.tp-link.com.cn/download/20207/TL-WDR7660%E5%8D%83%E5%85%86%E7%89%88%20V1.0%E5%8D%87%E7%BA%A7%E8%BD%AF%E4%BB%B6…
感觉最近好不想写博客了,这篇稍微水一点吧,主要是记录一下自己的做题笔记 这个题看题看的时间不长,大体逻辑很快就能看完,难点主要在他自己实现的一个格式的逆向,和软件安全赛encoder那道题感觉可以归为一类 题目分析 题目让我们输入的是他自己的一种指令格式,所以我们首先要把他的指令格式逆出来,进入vuln函数查看,这也是这个题的主要函数 根据字符串可知,题目有增删查,没有改,同时根据"\x00"," ",":"这三种字符作为分隔符,想要触发add分支,根据第9行if语句可知,要用分隔符做间隔,所以…
本文首发于先知社区:https://xz.aliyun.com/news/17415 赛后总结发现这是一个漏洞百出的题,有各种各样的打法,这里我的打法是基于patch的结果来写的,下面就详细说一下 题目分析 题目是2.31的libc,不是传统的增删改查,出题思路是一个文件上传后压缩解压的功能,但实际上就是增删查都齐全,没有传统意义上的改 upload对应的是增,release对应的是删,download对应的是查,encode,decode需要逆向分析一下 首先看upload 这里要输入一个in…
虽然是新生赛,但这个题个人觉得并不水,是一个挺有意思的httpd,感觉出题参考了西湖论剑里的一道题,原理也是base64解码溢出,题目的源码应该是改编自tinyhttpd这个开源项目,下面一起来逆向分析一下 首先创建一个端口,然后开启监听,每次接收到数据包就创建新的线程处理数据包,处理函数是accept_request函数。 进入accept_request函数,我们继续进行分析 前面就是在做一些检查,判断当前请求的类型,然后把请求路径拼接进去,并且判断了路径中是否存在"..",避免了路径穿越,…
什么是栈迁移 所谓栈迁移,一般而言,是在栈溢出量很小(一般只能溢出到返回地址处),无法打一个完整的ROP链的情况下,利用两次leave ret,将栈帧位置改变到我可控的地址上,在这个地址上我预先已经写好了一段payload,于是在栈迁移过后程序就会继续执行我预先在别处布置好的payload,那么接下来我们就好好地来解释一下栈迁移的原理是什么 栈迁移的原理 首先,我们编写一个demo函数,来展示一个程序栈帧的建立与消亡过成 void demo() { char buf[0x20]; ret…
如果发现虚拟机没有ens33网卡的话,可以手动配置一下 sudo ip link set ens33 up sudo dhclient ens33 用户级调试的话需要配一下网卡 sudo brctl addbr br0 sudo brctl addif br0 eth0 sudo ifconfig br0 172.21.198.73/24 up 首先创建一张网卡 sudo tunctl -t tap0 sudo ifconfig tap0 192.168.0.4/24 up 启用端口转发 ech…
何为系统调用 那些深奥的难懂的解释网上有一大堆,在这里我解释的通俗一些,最起码让你在CTF中够用即可 简单来说,系统调用(这是个名词哦)就是程序调用底层设备,比如显示屏等等的汇编命令,比如你所熟知的printf函数,最终要调用write这个系统调用,来把你想输出的东西打印到屏幕上,scanf函数,最重要调用read这个系统调用,把你输入的东西放到程序里,如果没有这些系统调用作为交互接口,你该如何和电脑做交互呢? 所以,所谓系统调用,就是调用系统设备的接口,他和函数很像,都需要传入参数,在x86中…
前面的思路和官方wp一样,后面我利用了一个magic gadget,省去了栈迁移的繁琐 from pwnplus import * context.arch = 'amd64' context.log_level = 'debug' p=mypwn('./pwn') elf=ELF('./pwn') libc=ELF('./libc-2.27.so') def choose(num): p.sla(b'> ',str(num)) offset1=0x002528 choose(1) p.sla(…