kernel知识点记录
学kernel的悲伤的事情,就是有时间学的时候发现之前学的都忘记了:(
由于发现kernel的知识点还是比较多,所以还是记录一下方便我忘记后速看,混杂很多自我理解和废话和大量的原文,长期更新
保护SMEPSMEP(Supervisor Mode Execution Protection),是内核的保护措施,当用户在ring0模式时,执行用户空间的代码会触发页错误。在Arm中叫PXN。
一般可以看qemu的启动脚本的参数确定有没有开SMEP保护,SMAP同样是这个方法。
系统会根据CR4寄存器的值判断是否开启SMEP保护,如果CR4寄存器第20位是1,保护开启,否则关闭。
一般用mov cr4, 0x6f0关掉SMEP
SMAP让ring0模式的用户无法读写用户代码,SMEP是执行这个是读写,其他的差不多
CR4寄存器
20位是SMEP,21位是SMAP
内核镜像相关vmlinux编译出来的原始内核文件。里面有符号表,不能直接用来加载,但是可以用来kernel-debug
bzImage压缩后的内核文件。bz表示”big zImage”。内核比较大最好用这个,有更好的压缩率
zImage ...
UEFI SMM题目训练
专门记录SMM相关题目。能找到的题目+有wp的题目都会陆续复现。
UIUCTF 2022-smm_cowsay_1题目描述One of our engineers thought it would be a good idea to write Cowsay inside SMM. Then someone outside read out the trade secret (a.k.a. flag) stored at physical address 0x44440000, and since it could only be read from SMM, that can only mean one thing: it… was a horrible idea.
题目文件结构123456789101112131415161718192021222324252627282930313233343536├── chal_build│ ├── Dockerfile│ ├── handout-readme│ ├── handout_run.sh│ ├── patches│ ...
UEFI固件漏洞学习
工作需要,进行一波学习
前置知识UEFIUEFI是描述开发固件(特别是BIOS)标准接口集的规范。该固件是启动期间在CPU上执行的第一批内容,负责初始化硬件并进行设置,从而让操作系统可以启动。该固件存储在计算机SPI Flash中。攻击者如果成功攻击这个硬件,就可以在硬盘以外的其他位置实现持久性。
SMM系统管理模式(System Management mode)(以下简称SMM)是Intel在80386SL之后引入x86体系结构的一种CPU的执行模式。系统管理模式只能通过系统管理中断(System Management Interrupt, SMI)进入,并只能通过执行RSM指令退出。SMM模式对操作系统透明,换句话说,操作系统根本不知道系统何时进入SMM模式,也无法感知SMM模式曾经执行过。为了实现SMM,Intel在其CPU上新增了一个引脚SMI# Pin,当这个引脚上为高电平的时候,CPU会进入该模式。在SMM模式下一切被都屏蔽,包括所有的中断。SMM模式下的执行的程序被称作SMM处理程序,所有的SMM处理程序只能在称作系统管理内存(System Management RAM, ...
内核pwn刷题笔记
刷题记录,可能会非常乱,因为我主要是服务于自己,写的时候大概会主要写自己想要巩固的部分。(我这个人,什么事都只想着自己呢)
qwb2018 core(rop)内核pwn初体验,非常好玩儿,主要是看着这个复现https://arttnba3.cn/2021/03/03/PWN-0X00-LINUX-KERNEL-PWN-PART-I/#0x06-Kernel-Heap-Heap-Spraying
首先拿到内核文件系统
毕竟是第一次做,解释一下每个文件
https://zhuanlan.zhihu.com/p/466591309
bzimage
bzImage是最终生成的内核映像文件,可以理解为压缩后的vmlinux。可以用extract-vmlinux提取vmlinux
vmlinux
vmlinux 是静态编译,未经过压缩的 kernel 文件
内核源码根目录下比较大的vmlinux就是第一次编译链接生成的ELF文件,如果内核开启了调试选项,那么crash工具加载的就是这个vmlinux来获取符号信息等,debug-info包里的就是这个vmlinux
总而言之里面大概是有符 ...
miasm学习【3】--动态shellcode分析
本文又又又是基于官方blog进行复现,由于第二部分动态符号执行遇到了点问题,先学shellcode分析得了。
https://miasm.re/blog/2016/02/12/dynamic_shellcode_analysis.html
虽然是8年前的东西了,但是我真没找到其他的适合的有样本有代码有复现的文章了。那就学
车联网入门第一题--D3ctf-d3car
周末和烧卖激情的打了D3ctf,逆向没啥特别想记录的,主要是这次是本人第一次接触车机类的题目,主要时间在和师傅们一起做这个,感觉非常有意思,学到很多,但是最后还是只日出来一个flag,后面俩没日出来。不过日的时候疯狂搜索各种相关知识,也算小小的入了一点点门了?之后再找点相关
发现环境已经寄了,只能靠回忆来复现了
分三部分,相关知识介绍,自己做的部分和复现的部分
相关知识mqtt简述MQTT 是一种基于标准的消息传递协议或规则集,用于机器对机器的通信。智能传感器、可穿戴设备和其他物联网(IoT)设备通常必须通过带宽有限的资源受限网络传输和接收数据。这些物联网设备使用 MQTT 进行数据传输,因为它易于实施,并且可以有效地传输物联网数据。MQTT 支持设备到云端和云端到设备之间的消息传递。
原理mqtt是基于发布/订阅模型工作的协议,和普通的网络通信协议不一样,一般的网络通信协议是服务端和客户端相互通信,但是mqtt是引入了一个代理,每个客户端(用mqtt通信的设备都可以叫mqtt客户端)都可以是发布者和订阅者。如果是订阅消息,就是客户端向代理发送SUBSCRIBE,后接一个表示 ...
miasm学习【2】--动态符号执行
试试miasm的符号执行。虽然感觉miasm比较老学了不知道有没有用,不过先学几天玩玩也不是不行
仍然是看的官方blog
https://miasm.re/blog/2017/10/05/playing_with_dynamic_symbolic_execution.html
这次环境纯Ubuntu22+miasm0.1.3+vscode remote,不想再被0.1.5折磨了,遂更换。
动态符号执行动态符号执行(Dynamic Symbolic Execution)是一种软件测试和分析技术,用于自动化地探索程序的执行路径和输入空间。与传统的静态分析或基于覆盖率的测试方法相比,动态符号执行具有更高的覆盖率和更好的路径探索能力。
模拟用tigress的一个程序来测试miasm的动态符号执行
https://github.com/JonathanSalwan/Tigress_protection/blob/master/tigress-challenges/tigress-0-challenge-0
1234567891011121314from miasm.analysis.sandbo ...
miasm学习【1】--分析并去除smc
由于大神推荐加上无聊,准备开坑学习一下miasm。网上相关资料并不算很多,而且很多脚本和api都是python2的,我用的python3没法直接跑那些脚本,有点难绷,所以开个博客记录一下各种问题,顺便留个档。miasm版本windows是0.1.5,Ubuntu是0.1.3.操作系统环境是windows和Ubuntu,ide是pycharm和vscode+remote。
初探由于是初学,翻了一下官方的网站找到一个博客
https://miasm.re/blog/2016/01/27/re150.html
跟着学一学
首先用ida打开示例的程序
发现其start处的汇编代码是一个非常明显的smc。我们这里用miasm进行分析,不直接调试了。
注意,因为需要用到jit,而windows似乎用不了,所以此处转Ubuntu。
1234567891011121314import osfrom miasm.analysis.sandbox import Sandbox_Linux_x86_64# Insert here user defined methods# Parse arguments ...
Ubuntu git无法push的解决办法
因为想把linux的实验传到github上但是git push一直失败遂进行了一波尝试,最终成功push。
最开始报错如下
在网上查询了一波发现似乎是apt库上的git的ssl库不行,说是要换一个库,比较麻烦
最后采用的这个方法
先跑第一行
1git config --global url."git@github.com:".insteadOf "https://github.com/"
然后直接在虚拟机里生成ssh密钥
1ssh-keygen -t ed25519 -C "your_email@example.com"
保存一下生成的pub文件里的内容,然后在git的ssh密钥里添加
然后就可以成功push上去了。这里是因为重复push了啥也没改所以报的错,实际上是可以ssh上了
可能方法比较蠢,记录一下
binary ninja vscode远程调试bn脚本
折腾一天的binary脚本远程调试,决定记下来以免下次接着犯错
感谢s0rry的博客给的启示!
错误记录python配置成本地的python3.11的版本之后,按照官方文档的流程,首先安装了python311的debugpy,然后打开vscode远程调试并正常配置。但是在binaryninja测运行connect_vscode_debugger(port=5678)后显示time out,且vscode远程调试点击后显示访问refuse
解决方法用bn原生的python,用ctrl + p打开搜索栏并选择install python3 module
输入debugpy进行安装,安装的log在这里看,失败的话自己康康原因,我这里是直接成功的
by the way我的脚本需要keystone,安装keystone的时候报错了,解决办法是直接在已经装好keystone的python311的site-package目录下复制keystone文件夹并复制到bn的python的package目录下。我的目录是C:\Users\{yourname}\AppData\Roaming\Bi ...









