2019年11月7日

摘要: GDB remote serial protocol——GDB的标准远程通信协议可以实现远程调试GDB remote serial protocol是一种简单的、通过串口线、网络等至少支持半双工通信的媒介进行ASCII消息传输协议RSP包以$符号开始,后面跟一个或者多个用于组成要发送信息的ASCII 阅读全文

posted @ 2019-11-07 19:35 Volcano3511 阅读(160) 评论(0) 推荐(0) 编辑

摘要: 2.1 利用跳板覆盖返回地址2.1.1 使用范围当系统打开ASLR(基本都打开了)时,使用硬编码地址的话,就无法成功利用漏洞.在这种情况下就可以使用这种技术.程序必须关闭NX2.1.2 原理当函数执行完,弹出了返回地址,rsp往往指向(返回地址+8),我们将shellcode放在此处就可以让程序执行 阅读全文

posted @ 2019-11-07 19:35 Volcano3511 阅读(1500) 评论(0) 推荐(0) 编辑

摘要: [TOC]## 模块简介一般使用的话可以直接用from pwn import *将所有的模块导入到当前namespace,这条语句还会帮你把os,sys等常用的系统库导入。** 常用的模块**有下面几个:>asm : 汇编与反汇编,支持x86/x64/arm/mips/powerpc等基本上所有的主 阅读全文

posted @ 2019-11-07 19:34 Volcano3511 阅读(308) 评论(0) 推荐(0) 编辑

摘要: 格式化字符串漏洞是一个很古老的漏洞了,现在几乎已经见不到这类漏洞的身影,但是作为漏洞分析的初学者来说,还是很有必要研究一下的(A)基础知识——栈栈 其实是一种数据结构,栈中的数据是先进后出(First In Last Out),常见的操作有两种:压栈(PUSH)和弹栈(POP),用于标识栈属性的也有 阅读全文

posted @ 2019-11-07 19:34 Volcano3511 阅读(926) 评论(0) 推荐(0) 编辑

摘要: 有比较的时候——有符号比较和无符号比较 如果我们获取到了write_got的值(write函数加载到内存中的地址), 因为我们有libc库, 所以可以很容易去计算system函数和write函数的差值, 用write_got地址减去这个差值, 也就是system函数加载到内存中的地址了 回车换行 0 阅读全文

posted @ 2019-11-07 19:33 Volcano3511 阅读(152) 评论(0) 推荐(0) 编辑

摘要: 查看栈信息 backtrace <n> bt <n> n是一个正整数,表示只打印栈顶上n层的栈信息。 backtrace <-n> bt <-n> -n表一个负整数,表示只打印栈底下n层的栈信息。 如果你要查看某一层的信息,你需要在切换当前的栈,一般来说,程序停止时,最顶层的栈就是当前栈,如果你要查 阅读全文

posted @ 2019-11-07 19:32 Volcano3511 阅读(131) 评论(0) 推荐(0) 编辑

摘要: 堆溢出 堆栈区别 堆:顺序随意 栈:后进先出(Last-In/First-Out) 在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。 栈,就是那些由[编译器]需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参数等。 堆,就是 阅读全文

posted @ 2019-11-07 19:31 Volcano3511 阅读(1028) 评论(0) 推荐(0) 编辑

摘要: dlsym dlsym根据动态链接库操作句柄与符号,返回符号对应的地址。使用这个函数不但可以获取函数地址,也可以获取变量地址。 #include<dlfcn.h> void*dlsym(void*handle,constchar*symbol) //handle:由[dlopen]打开动态链接库后返 阅读全文

posted @ 2019-11-07 19:30 Volcano3511 阅读(163) 评论(0) 推荐(0) 编辑

摘要: 这个图很重要 (A)基础知识——栈 栈 其实是一种数据结构,栈中的数据是先进后出(First In Last Out),常见的操作有两种:压栈(PUSH)和弹栈(POP),用于标识栈属性的也有两个:栈顶(TOP)和栈底(BASE)。PUSH:为栈增加一个元素。POP:从栈中取出一个元素。TOP:标识 阅读全文

posted @ 2019-11-07 19:29 Volcano3511 阅读(156) 评论(0) 推荐(0) 编辑

摘要: # ELF学习[TOC]### 背景应用软件的编程不可能是所有的代码都自己写的,程序员不可避免地都会使用一些现成的程序库。从编译/连接和运行的角度看,**应用程序和库程序的连接有两种方法**。1. 一种是**固定的、静态**的连接,**库函数的目标(二进制)代码从程序库中抽取出来,连接进应用软件的目 阅读全文

posted @ 2019-11-07 19:29 Volcano3511 阅读(155) 评论(0) 推荐(0) 编辑