首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

CVE-2018-8897:POP SS 指令异常

函数定义:int sigsetjmp(sigjmp_buf env, int savesigs) 函数说明:sigsetjmp()会保存目前堆栈环境,然后将目前的地址作一个记号, 而在程序其他地方调用...返回:若直接调用则为0,若从siglongjmp调用返回则为非0 RF 恢复(第16 位)。控制处理器对指令断点的响应。置1 则暂时禁用指令断点产生调试异常(#DE),但是其它异常情况仍可以产生异常。...调试异常不会因为开启EFLAGS.IF标志位而被停止 如果MOV SS 或 POP SS指令后面跟类似SYSCALL, SYSENTER, INT 3等指令,则控制权限将转移到CPL < 3,此时调试异常则会在...address where stack is, e.g. 0x401000. call​ SetThreadContext ; Lets imagine that 0x401000 contains a valid...SS; INT 1 Got SIGSEGV with RIP=400ed1 [RUN] MOV SS; SYSCALL [RUN] MOV SS; breakpointed NOP Got SIGTRAP

58210
您找到你想要的搜索结果了吗?
是的
没有找到

手把手教你如何进行 Golang 单元测试

reflect.DeepEqual(got, tt.want) {    t.Errorf("GetPersonDetail() got = %v, want %v", got, tt.want)  ...Username: "steven", Email: "12345678@qq.com"}, wantErr: false}, } // 为函数打桩序列 // 使用 gomonkey 打函数桩序列 // 第一个例不会调用...查看单测报告 单元测试编写完毕之后,我们可以调用相关的指令来查看覆盖范围,帮助我们查看单元测试是否已经完全覆盖逻辑代码,以便我们及时调整单测逻辑和例。...())    err := syscall.Mprotect(page, syscall.PROT_READ|syscall.PROT_WRITE|syscall.PROT_EXEC)    if err...之后通过 modifyBinary 函数,先通过 entryAddress 方法获取到原函数所在的内存地址,之后通过 syscall.Mprotect 方法打开内存保护,将函数跳转指令以 bytes 数组的形式调用

1.4K31

Golang信号处理和如何实现进程的优雅退出

也可以是kill -l来快速查看 列表中,编号为1 ~ 31的信号为传统UNIX支持的信号,是不可靠信号(非实时的),编号为32 ~ 63的信号是后来扩充的,称做可靠信号(实时信号)。...列为信号名; 第2列为对应的信号值,需要注意的是,有些信号名对应着3个信号值,这是因为这些信号值与平台相关,将man手册中对3个信号值的说明摘出如下,the first one is usually valid..., syscall.SIGTERM, syscall.SIGHUP, syscall.SIGQUIT: fmt.Println("got signal and try to exit: ", s...for { i++ fmt.Println("times: ", i) time.Sleep(1 * time.Second) } // <- done fmt.Println("got...-USR1 pid usr1 user defined signal 1 kill -USR2 pid usr2 user defined signal 2 kill -QUIT pid got

2.5K40

深入Android源码系列(二) HOOK技术大作战

本文讲解内容有 hook技术原理探究 hook本进程方法 hook跨进程的系统调用,方法 so注入 GOT完成so方法hook ELF文件头信息 00 简单描述下原理...追踪直到发生了系统调用 intercept_syscall 实现修改syscall 这里具体为: get_syscall_number 从寄存器里面拿到syscall num 具体是 ptrace...我们使用dlopen 打开so,dlsym找到方法的地址,找到的地址,减去加载的起始地址,便是偏移地址,这里便是0xcf8 这里我们看下 char inject_code[] = "\x02\x20\...相比较本进程的hook,跨进程主要解决的是我们每个方法的调用,都是需要找到远程进程的具体方法的地址,主要麻烦点就在这里,同时GOT是为了解决so里面的地址修正,对于导入的外部符号,系统默认是未赋值的,我们要做的就是找到未赋值的对应方法的加载位置在这里塞入我们的...通过定位,最终找到代码查找GOT的方案,的是dlopen的返回值,而android4.4之后,将dlopen的返回值,改成了handle,于是没法强转成soinfo,也就没法通过这个途径打开符号表了。

1.3K50

固件题 qwbhttpd 解题思路

leak × 这个思路尝试调用程序中返回http请求错误信息或者返回解码结果的函数(同样只需要控制a0),来泄露got表保存的地址。...rewrite got & shellcode √ 之前查到好多例子都是以调用shellcode结尾,但是在checksec的时候发现开了NX保护就没想这方面。...那么问题来了,如何找到能写完got表之后就能调用被修改表项的指针,而且不报错的位置?如果rop分别进行修改和调用那么又会面临leak思路中遇到的问题。...0xFAB,也就是4000+11,MIPS架构的Linux系统有如下宏: 在linux-xxx/arch/mips/include/uapi/syscall.h可以看到 #ifndef __NR_syscall.../mips/kernel/syscalls/syscall_o32.tbl可以看到execve调用号为11 最后的系统调用号是__NR_syscall+11构成,也就是0xFAB Full exp from

1.2K30

ROP的基本原理和实战教学,看这一篇就够了!

含义 顾名思义,ret to syscall,就是调用系统函数达到目的 从例子中解析ret2syscall的方法 那么这里我们来深入了解一下什么是ret2syscall?...细说系统调用在ret2syscall的作用 我们这里要说一说系统调用在其中充当了什么角色,这样才能更好地理解为什么要ret2syscall。...,&system_call),设置中断向量号0x80的中断描述符,也就是说实现了系统调用 (处理过程system_call)和 int 0x80中断的对应,进而通过此中断号EAX实现不同子系统的调用...可以发现,GOT表的第三项调用_dl_runtimw_resolve将真正的函数地址,也就是glibc运行库中的函数的地址,回写到代码段,就是gotn(n>=3)中。...也就是说在函数第一次调用的时,才通过连接器动态解析并加载到.got.plt中,而这个过程称之为延时加载或者惰性加载。

1.9K30

学习PWN一个月后能做什么?

ctf-challenges/tree/master/pwn/stackoverflow/ret2syscall/bamboofox-ret2syscall。...获取 libc 的加载基址的方法:从程序 got 表中获取到函数的实时地址,减去相应版本的 libc 中函数在文件中的偏移,即可知道libc的基址(这里涉及PLT表和GOT表的相关知识,可以查看https...利用思路:利用read函数的栈溢出漏洞,调用到puts函数将read函数的 got 地址泄露出来。接着将程序重新导回到main函数重新执行,制造二次溢出。...表地址,相当于调用 puts(elf.got['read']),然后输出出来,并重新启动程序 payload = 'A' * 72 + p64(addr_pop_rdi) + p64(elf.got[...\x00' + p32(0x0804A048) p.sendline(payload) p.interactive() 整数溢出漏洞 原理 整数溢出是指:在计算机编程中,当算术运算试图创建一个超出可以给定位数表示的范围

71620

linux的so注入与热更新原理

接着找到dynsym(动态链接符号表),即导出给外部的函数信息,跟着dynstr定位这些符号的名字,这一步就能定位有没有想找的函数了,比如在libc里找到dlopen(实际上是__libc_dlopen_mode...第一行jmpq通过got的值跳转,在初始时got的值直接为下一行,即0x586,于是开始执行第二行。...第二行和第三行传参调用libc完成了绑定puts的过程,并且更新got。 后续再调用第一行,就直接跳转到了目标函数了。 为什么plt里不直接存放地址,要搞个got?...系统调用号填9。都准备好,让目标进程执行一个syscall指令就开始调用了。 剩下的问题就是rip怎么处理?以及如何拿到返回值? 函数执行 我们期望函数能够跑某段机器码,即设置一个rip。...在数组里写入一个syscall指令 [0x0f, 0x05] 函数返回值 当目标进程执行完syscall后,如何断住,能让本进程拿到返回值,比较简单,直接在前面的code空间里,写入int3断点指令,再填满无用指令

10.8K50

Linux kernel中常见的宏整理

在一些并发的场景中对变量进行优化有可能导致错误,需要时刻得到变量的最新值,所以volatile强制访问一次进行更新。...msleep是休眠函数,它不涉及忙等待.msleep(200)的时候实际上延迟的时间,大部分时候是要多于200ms,是个不定的时间值。...linux 内核中最常见的宏使用之一,系统调用: #define SYSCALL_DEFINE1(name, ...)...SYSCALL_DEFINEx(6, _##name, __VA_ARGS__) /*…:省略号代表可变的部分,__VA_AEGS__ 代表省略的变长部分*/ #define SYSCALL_DEFINE_MAXARGS...6 /*系统调用最多可以带6个参数*/ 以open系统调用为例: SYSCALL_DEFINE 后面跟系统调用所带的参数个数n,第一个参数为系统调用的名字,然后接2*n个参数,每一对指明系统调用的参数类型及名字

1.6K20

SSDT-hook,IDT-hook原理

各种 Win32、OS/2 和 POSIX 的 APIs 都是以 DLL 的形式提供的。这些dll中的 APIs 转过来调用了 NT executive 提供的服务。...例如,要用Win32 API 打开一个文件,应用程序会调用 CreateFile(),而要用 POSIX API,则应用程序调用 open() 函数。...至此已完成了我们的主要两步,先突破了SSDT的保护,接着宏更改了目标函数,下来就剩下具体的过滤任务了 HOOK_SYSCALL( ZwQuerySystemInformation, NewZwQuerySystemInformation...比如,出现页错误,调用IDT中的0x0E。或用户进程请求系统服务(SSDT)时,调用IDT中的0x2E。而系统服务的调用是经常的,这个中断就能触发。...为了方便把这两个半地址合在一起,我们可以一个宏。

1.8K20

Linux kernel中常见的宏整理

在一些并发的场景中对变量进行优化有可能导致错误,需要时刻得到变量的最新值,所以volatile强制访问一次进行更新。...msleep是休眠函数,它不涉及忙等待.msleep(200)的时候实际上延迟的时间,大部分时候是要多于200ms,是个不定的时间值。...linux 内核中最常见的宏使用之一,系统调用 #define SYSCALL_DEFINE1(name, ...)...SYSCALL_DEFINEx(6, _##name, __VA_ARGS__)/*…:省略号代表可变的部分,__VA_AEGS__ 代表省略的变长部分*/#define SYSCALL_DEFINE_MAXARGS...6 /*系统调用最多可以带6个参数*/ 以open系统调用为例: SYSCALL_DEFINE 后面跟系统调用所带的参数个数n,第一个参数为系统调用的名字,然后接2*n个参数,每一对指明系统调用的参数类型及名字

1.9K50

linux的so注入与热更新原理 | 直播回顾

接着找到dynsym(动态链接符号表),即导出给外部的函数信息,跟着dynstr定位这些符号的名字,这一步就能定位有没有想找的函数了,比如在libc里找到dlopen(实际上是__libc_dlopen_mode...    第一行jmpq通过got的值跳转,在初始时got的值直接为下一行,即0x586,于是开始执行第二行。...第二行和      第三行传参调用libc完成了绑定puts的过程,并且更新got。      后续再调用第一行,就直接跳转到了目标函数了。        ...系统调用号填9。都准备好,让目标进程执行一个syscall指令就开始调用了。 剩下的问题就是rip怎么处理?以及如何拿到返回值? 函数执行 我们期望函数能够跑某段机器码,即设置一个rip。...在数组里写入一个syscall指令 [0x0f, 0x05] 函数返回值 当目标进程执行完syscall后,如何断住,能让本进程拿到返回值,比较简单,直接在前面的code空间里,写入int3断点指令,再填满无用指令

1.4K10

500行代码代码手写docker-将rootfs设置为只读镜像

联合文件系统可以把其他文件系统的文件和目录挂载到同一个挂载点下,形成统一的文件系统,在挂载点下形成统一的文件视图在linux内核里,自带了一种叫做overlay类型的文件系统类型,它是一种联合文件系统,类似的还有aufs,不过本文还是overlay...contailber-layer 后续会作为容器的读写层,image-layer会作为镜像层,mnt作为overlay联合文件系统的挂载目录,而work后续会作为overlay联合文件系统的工作目录,这个目录是overlay自己的...fmt.Println("exec proc fail ", err)return}fmt.Println("forever exec it ")returndefault:fmt.Println("not valid...cmd")}}可以看到,在以新命名空间启动一个子进程后,在workspace.SetMntNamespace 里将会进行相关目录的挂载,然后在执行cmd.Run 的父进程中,等待子进程结束后,调用了workspace.DelMntNamespace...overlay类型的文件系统挂载到mntLayer(containerName)的路径下,然后mntLayer(containerName)路径下文件将作为容器的根文件系统,后续会对其进行pivot root调用

76110
领券