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…

0x05-OWASPJuiceShop-Injection-EphemeralAccountant

目录 今日目标 可以学到什么? 好用的 SQL 在线模拟器 SQLite ALIAS 表达式 表名映射 列名映射 SQLite 如何构造临时数据? MySQL 如何构造临时数据? PostgreSQL 如何构造临时数据? 如何利用这个漏洞? 参考链接 今日目标 Ephemeral Accountant. 要求是,登陆一个不存在的用户账户,这个账户名称是 acc0unt4nt@juice-sh.op,职务是 accouting。通过注册的方式无法完成挑战,只能通过 SQL 注入的方式,在运行时登陆到这个用户的账户,也就是说,这个用户的数据并不在数据库中,是临时生成的。 先看一下这个挑战可以让我们学到哪些东西。 可以学到什么? 首先,做 SQL 注入到高级的时候会十分的复杂,单纯依靠头脑和纸笔,无法完成这样的任务。自己搭建一个 SQL 后台又太麻烦。因此,下面就会给大家推荐两个很好的在线 SQL 模拟器。支持 SQLite,MariaDB,PostgreSQL 等,测试 SQLite 和 MySQL 都没有问题,同时可以自定义数据表,十分灵活,为测试提供了很大的便利。 另外,最最大的收获将会是学习到如何构造临时(实际不存在的)数据。 好用的 SQL 在线模拟器 推荐两个,一个是 https://paiza.io/en/languages/mysql,后端是 MySQL。 另一个是 https://sqliteonline.com/,有更多的数据库支持。 因为 JuiceShop 后台使用的 SQLite,在讲完…

0x11-HackTheBox-Beep

目录 历史命令 目标 能学到什么? 什么是 LFI(Local File Inclusion)? LFI 的原理 如何利用 LFI 漏洞? ShellShock Elastix FreePBX 远程代码执行漏洞 如何利用目标机器的漏洞? References 历史命令 masscan nmap searchsploit nc Burp Suite python sudo -l sudo nmap –interactive -> !sh 目标 目标 Beep 在 10.10.10.7。 能学到什么? 什么是 LFI(Local File Inclusion)? LFI (Local File Inclusion)是代码中的一种漏洞表现形式。不是语言本身的问题,而是程序员在开发的过程中,对于语言的特性理解不够,给攻击者留下了可趁之机。 可以说是“臭名昭著”的两个 PHP 方法,include 和 require,使用不当的情况下,就会造成 LFI 的存在。…

0x04-OWASPJuiceShop-Injection-XmasSpecial

目录 今日目标 可以学到什么? SQL 盲注 什么是 SQL 盲注? 如何询问数据库? 基于返回内容 基于返回时间 如何利用这个漏洞? 参考链接 今日目标 Christmas Special. 正式进入 4 星俱乐部 😀 可以学到什么? SQL 盲注 本篇的主题,是 SQL 盲注。先了解一下 SQL 盲注是什么,再学习如何进行模糊测试,最后获取到想要的数据。 什么是 SQL 盲注? 这个系列的前几篇,如果大家还记得的话,在我们构造 SQL 表达式去试探服务端的时候,服务端会直接将 SQL 数据库的错误返回给我们。我们可以清楚地看到后端使用的是什么数据库,我们构造的 SQL 语句哪里有问题,是语法有误?还是 UNION 的时候列数不对。 SQL 盲注,相反的就是服务端的错误处理是统一的页面,诸如最简单的,只给我们返回一个 500 Internal Server Error,无从知道后端数据库的任何信息。这样的情况下,做 SQL 注入仍然是可行的,只是困难一些。我们必须要构造一些 true or false 的问题去问数据库,根据数据库的返回结果,进一步判断下一步操作。 只要目标是可以被注入的,那么只要加以一定的耐心,仔细观察返回结果,以及一点点的运气,就可以完成盲注。 如何询问数据库? 基于返回内容…

TheHackerPlaybook II

Disclaimer BECAUSE OF THE RELEASE DATE OF THE BOOK, EVERYTHING HERE NEEDS FURTHER TEST. DON’T TAKE ANYTHING AND EXPECT IT TO WORK OFF THE BAT. Scanning the Network Passive Discovery Checklist Recon-NG (API key needed for http://ipinfodb.com/register.php) Discovery Spiderfoot (http://www.spiderfoot.net/) Creating Password Lists Tools Checklist Wordhound (https://bitbucket.org/mattinfosec/wordhound.git) Brutescrape(https://github.com/cheetz/brutescrape) Compromised Lists like Adobe users.tar.gz https://github.com/cheetz/adobe_password_checker/blob/master/foundpw.csv https://github.com/cheetz/adobe_password_checker…