0x200-从头开始写操作系统-进入32-Bit Protected Mode

目录 回顾 今日目标 BIOS 读取硬盘数据 硬盘 读取硬盘数据的参数 硬盘参数小结 调用中断读取硬盘数据 32-Bit Protected Mode 关于 32-Bit Protected Mode 什么是 32-bit Protected Mode? 为什么我们需要 32-bit Protected Mode? 32-bit Protected Mode vs 16-bit Real Mode 32 位模式下的字符打印 告别 BIOS 32 位模式下的显示设备调用 Memory-Mapped Device(Memory-Mapped I/O) VGA 模式(Video Graphics Array) VGA 模式内存 32-bit Protected Mode 输出字符 全局描述符 什么是 GDT 及 GDT…

代码向导

Hi, everyone. Happy learning and hacking. Code List OS-From-Scratch: 1. Simple Boot Sector 2. Boot Sector Print 3. Boot Sector Function 4. Boot Sector Memory 5. Boot Sector CMP 6. Boot Sector Stack 7. Boot Sector Segmentation 8.Boot Sector Disk Read 9. 32Bit Protected Mode Print 10. 32Bit Protected Mode Switch 11. C to ASM…

0x03-逆向-BoF基础的基础

目录 今日目标 深入 BoF BoF 的前世今生 BoF 的种类 BoF 的应对策略 为什么程序会有栈? 为什么 EBP 和 EIP 会在 BoF 中被覆盖? 栈帧(Stack Frame)以及方法调用 NOP 总结 参考链接 今日目标 今天细看了一下 narnia2(不知道这是什么的小伙伴看我前篇),是个栈溢出的练习。所以,Buffer Overflow,BoF,是今天的主题。这篇文章的标题是基础的基础,我们会把基于栈的溢出深入再深入地探讨一下。网上由很多关于栈溢出地基础例子和文章,想必大家也看过很多了。 带着下面几个问题,我们开始这篇 BoF 基础的基础。无论大家能不能回答这几个问题,看下去,总有一些新的收获。 BoF 的前世今生大家了解多少?BoF 有多少种类型? 都说栈溢出,首先,为什么你的程序会有栈? 漏洞叫做栈溢出,EBP,EIP,或者 BP,IP 是寄存器,一个在内存,一个在 CPU,为什么那些文章总说 EBP 和 EIP 会被覆盖,难道栈溢出还能溢出到 CPU ? 那些文章都提到 nop (\x90),nop 到底是什么?为什么要用 nop? 深入 BoF 我们先了解一下 BoF 的一小段历史,BoF 的种类,以及计算机科学家在与…

0x01-XSS基础实战-XSSGame 6集全

目录 这是什么? 今日目标 Level 1 Level 2 innerHTML innerHTML的安全问题 Event Level 3 location.hash Level 4 Level 5 Level 6 Protocol-relative URLs DataURLs 总结 参考链接 这是什么? XSS 系列开篇。WebApp 渗透测试是一个大话题,之前的 SQL 系列之后还会继续深入。本篇的 XSS 系列也一样,在后续的工作学习中,不断记录。 我不再讲 XSS 的基本原理,网上有太多的教程。 最权威的学习资料,列举在下面: OWASP XSS Attacks Rapid7 Cross Site Scripting Portswigger Cross Site Scripting OWASP,Rapid7,Protswigger(Burp Suite)三大家。 另外,W3School 是必备的学习资料。 如果对于 XSS 的基本概念不太熟悉,建议先阅读这三篇文章,再继续下面的内容。 今日目标…

0x120-从头开始写操作系统-启动扇区与内存的关系及内存寻址的应用

目录 回顾 今日目标 Boot Sector 与内存的关系 打印任意内存位置上的内容(以 16 进制输出) 物理寻址的应用 找到 Boot Sector 在内存中的前两个字节的位置 寄存器 寄存器的种类 通用寄存器 段寄存器 指针寄存器 索引寄存器 控制寄存器 段和段寄存器小结 完成任务 程序拆解及必要汇编指令 org 指令 jmp 指令 times 指令 pusha popa 指令 条件控制指令 其他必要的汇编指令 总结 参考链接 回顾 上一篇,我们讲到了以下内容: 16-bit Real Mode 是 x86 系列 CPU 的一种工作模式,所有 x86 系列 CPU 启动时,都处于 16-bit Real Mode 16…

0x120-从头开始写操作系统-启动扇区与内存以及读取磁盘数据

目录 回顾 今日目标 Boot Sector 与内存的关系 打印任意内存位置上的内容(以 16 进制输出) 物理寻址的应用 段寄存器(Segment Register)和索引寄存器(Index Register) 找到 Boot Sector 在内存中的第一个字节的位置 什么是内存分段 16-bit Real Mode 物理内存地址的计算 第一个引导扇区程序 中断 中断的作用 中断,Interrupt Vector 和 ISR 常见中断 Hello World 总结 参考链接 回顾 上一篇,我们讲到了以下内容,在回顾一下。 16-bit Real Mode 是 x86 系列 CPU 的一种工作模式,所有 x86 系列 CPU 启动时,都处于 16-bit Real Mode 16 bit 系统中,只有 64…

0x110-从头开始写操作系统-CPU模拟器

目录 回顾 CPU模拟器 引导扇区编程(16-bit Real Mode) 什么是 16-bit Real Mode? 16-bit 系统中的 16 是什么意思? 8086 架构的内存寻址总量 8086 架构的内存管理 什么是内存分段 16-bit Real Mode 物理内存地址的计算 第一个引导扇区程序 中断 中断的作用 中断,Interrupt Vector 和 ISR 常见中断 Hello World 总结 参考链接 回顾 系列开篇讲了计算机启动时的情况。计算机启动时,BIOS 做硬件检查,然后按顺序读取存储介质上 512 字节长的 boot sector。如果读到某个存储介质的 boot sector 最后 2 个字节是 0xaa55,就加载该介质上的操作系统,将控制权交给该操作系统。 CPU 模拟器 上篇中我们有了一个 512 字节的 boot sector:…

0x02-逆向-执行环境变量

目录 今日目标 可以学到什么? 什么是 Shellcode? Shellcode 是怎么编写出来的? Shellcode 测试 “\x” 转义序列 “\x” 的作用 “\x” 转义的 16 进制作为字符串的处理 Bash 设置环境变量 “ $() 如何利用这个漏洞? 参考链接 今日目标 继续 narnia 系列。今天的目标是 narnia1。 首先,这个挑战本身很简单,但是可以细想一下背后的原理,还是有一些地方值得挖掘和理解。 这是 narnia1 的源码。 #include <stdio.h> int main(){ int (*ret)(); if(getenv("EGG")==NULL){ printf("Give me something to execute at the env-variable EGG\n"); exit(1); } printf("Trying to execute EGG!\n"); ret…

0x100-OSFromScratch-Boot

目录 本系列介绍 开篇 —— 计算机的启动(Boot) 启动扇区的 16 进制展示 总结 本系列介绍 这个系列,基于 Nick Blundell 2010 年的文献 Writing a Simple Operating System — from Scratch,记录一下学习操作系统底层的过程。 有能力阅读英文的同学,直接到 这里 阅读英文原版。没有信息丢失。 这份文献并没有完结,出于各种原因最后几个章节那么多年也没有再补全。但是已有的内容,已经足够我们看清全局,作为进一步深入学习的敲门砖。 在看本系列文章的时候,配合 cfenollosa 的 Github Repo。Nick Blundell 没有完结的几个章节,cfenollosa 的 Repo 中都有代码,可以自行配合 Google 理解。 就像作者所说,Writing a Simple Operating System — from Scratch 不是教我们如何写一个功能健全的操作系统,而是将操作系统底层通用的逻辑展示出来,希望在整个工程结束之后,能为各位今后无论在计算机技术任何一方面的发展,做一块垫脚石。 开篇 —— 计算机的启动(Boot) 不要和操作系统启动混淆,这里讲的是计算的启动,远在操作系统之前。 计算机启动的时候,任何我们熟知的与操作系统相关的内容,如文件系统,读写设备,都不存在。这个时候能工作的,只有 BIOS,Basic Input/Ouput…

HackingTheArtOfExploitation

Programming Objdump Examine compiled binary. reader@hacking:~/booksrc $ objdump -D a.out | grep -A20 main.: 08048374 <main>: 8048374: 55 push %ebp 8048375: 89 e5 mov %esp,%ebp 8048377: 83 ec 08 sub $0x8,%esp 804837a: 83 e4 f0 and $0xfffffff0,%esp 804837d: b8 00 00 00 00 mov $0x0,%eax 8048382: 29 c4 sub %eax,%esp 8048384: c7 45 fc 00…