![](https://img-blog.csdnimg.cn/d9dc8eb7c774491eb20db4115821b731.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
pwn
文章平均质量分 76
从0开始学习pwn, 希望能学会解决ctf中pwn相关的大部分题.
biu801!
男人至死是少年
展开
-
gdb使用个pwndbg安装
cyclc 50 //生成50个用来溢出的字符,如:aaaabaaacaaadaaaeaaafaaagaaahaaaiaaajaaakaaalaaama。heapinfo、heapinfoall //显示堆得信息,和bins的挺像的,没bins好用。set *(0x123456)=0x10 //0x123456地址的值变为0x10,注意带星号。tcachebins //同上,单独查看tcachebins的链表情况。largebins //同上,单独查看largebins的链表情况。原创 2024-06-24 11:53:03 · 816 阅读 · 0 评论 -
堆的结构初步了解
堆是下图中绿色的部分,而它上面的橙色部分则是堆管理器.是虚拟地址空间的一块连续的线性区域提供动态分配的内存,允许程序申请大小未知的内存在用户与操作系统之间,作为动态内存管理的中间人响应用户的申请内存请求,然后将其返回给用户程序管理用户所释放的内存,适时归还给操作系统堆是由低内存向高内存扩展的(栈与它相反堆管理器的作用,充当一个中间人的作用。管理从操作系统中申请来的物理内存,如果有用户需要,就提供给他。ptmalloc2-glibc (linux系统使用的libc)本文重点学习。原创 2024-06-16 14:29:07 · 1116 阅读 · 0 评论 -
ROPgadget
这里再推荐一篇pwn的工具集合文章。他是一个常用的pwn工具.这个时候已经差不多了。原创 2024-06-14 23:46:36 · 329 阅读 · 0 评论 -
pwn的常用脚本
他是pwndbg的一个工具, 用来计算栈的大小。把输出的东西在gdb中输入进去,得到报错的地址。然后输入: cyclic -l -0x2349。调用gets来构造bin/sh。我么输入: cyclic 200。原创 2024-06-14 23:40:09 · 492 阅读 · 0 评论 -
函数调用约定
在Microsoft C++系列的C/C++编译器中,常常用PASCAL宏来声明这个调用约定,类似的宏还有WINAPI和CALLBACK。函数的第一个和第二个DWORD参数(或者尺寸更小的)通过ecx和edx传递,其他参数通过从右向左的顺序压栈。函数名修改规则同stdcall:函数名自动加前导的下划线,后面紧跟一个@符号,其后紧跟着参数的尺寸。函数名自动加前导的下划线,后面紧跟一个@符号,其后紧跟着参数的尺寸。C调用约定允许函数的参数的个数是不固定的,这也是C语言的一大特色。原创 2024-06-12 23:25:35 · 522 阅读 · 0 评论 -
windows安装nc
我们可能用nc时都要打开虚拟机,但为了方便,我们可以在本机上面安装nc,更加便捷。原创 2024-06-10 20:18:05 · 406 阅读 · 1 评论 -
pwn中常见的保护
checksec 可以查看程序开启了哪些保护。原创 2024-06-09 23:45:34 · 484 阅读 · 0 评论 -
TLS讲解
特别的, dtv 数组的第一个成员是一个计数器,每当程序使用 dlopen 函数或者 dlfree 函数加载或者卸载一个具备 TLS 变量的模块,该计数器的值都会加一,从而保证程序内版本的一致性。_dl_allocate_tls_init 函数会遍历 dl_tls_dtv_slotinfo_list 中的 link_map ,初始化 dtv。_dl_allocate_tls 函数依次调用 allocate_dtv 和 _dl_allocate_tls_init 分配和初始化 dtv。原创 2024-06-09 00:14:38 · 570 阅读 · 0 评论 -
动态链接中的问题解疑答惑
Linux 动态链接的过程涉及编译和链接阶段、加载阶段、动态链接器的工作、延迟绑定以及程序结束和清理。每个阶段都有特定的任务和机制,确保程序可以正确加载和执行,并有效地共享系统资源。未解析的符号(unresolved symbols)是在编译和链接过程中遇到但尚未找到其定义的符号。符号可以是变量、函数、对象等,它们需要在某个地方有明确的定义。编写代码时,可能会引用尚未定义的函数或变量。如果在链接阶段没有提供相应的定义,就会产生未解析符号错误。静态链接。原创 2024-06-08 00:03:16 · 1031 阅读 · 0 评论 -
动态链接介绍
模块间的访问比模块内部稍微麻烦一点,因为模块间的数据访问目标地址要等到装载时才决定,我们前面提到要使得代码地址无关,基本的思想就是把跟地址相关的部分放到数据段里面,很明显,这些其他模块的全局变量的地址是跟模块装载地址有关的。如此循环直到所有依赖的共享对象都被装载进来为止,当然链接器可以有不同的装载顺序,如果我们把依赖关系看作一个图的话,那么这个装载过程就是一个图的遍历过程,链接器可能会使用深度优先或者广度优先或者其他的顺序来遍历整个图,这取决于链接器,比较常见的算法一般都是广度优先的。原创 2024-06-07 20:40:54 · 834 阅读 · 1 评论 -
IDA和readelf和objdump
交互式反汇编器专业版readelf用于查看elf格式文件的相关信息,ojbdump可以显示一些二进制文件信息。原创 2024-06-06 15:32:14 · 116 阅读 · 0 评论 -
共享库介绍
每个共享库都有一个对应的SO-NAME ,这个 SO-NAME 即共享库的文件名去掉次版本号和发布版本号,保留主版本号。比如一个共享库叫做 libfoo.so.2.6.1 ,那么它的 SO-NAME 即 libfoo.so.2。很明显,SO-NAME 规定了共享库的接口,SO-NAME 的两个相同共享库,次版本号大的兼容次版本号小的。在 Linux 系统中,统会为每个共享库在它所在的目录创建一个跟 SO-NAME 相同的并且指向它的软链接(SymbolLink)。原创 2024-06-06 12:47:21 · 583 阅读 · 1 评论 -
ELF文件格式
ELF(Executable and Linkable Format)是一种常见的可执行文件和可链接文件格式,主要用于Linux和类Unix系统。ELF 文件结构及相关常数被定义在 /usr/include/elf.h 里,因为 ELF 文件在各种平台下都通用,ELF文件有 32 位版本和 64 位版本。32 位版本与 64 位版本的 ELF 文件的格式基本是一样的(部分结构体为了优化对齐后大小调整了成员的顺序),只不过有些成员的大小不一样。原创 2024-06-06 11:25:36 · 841 阅读 · 0 评论 -
程序的编译,链接,装载
首先在用户层面,bash 进程会调用 fork() 系统调用创建一个新的进程,然后新的进程调用execve() 系统调用执行指定的 ELF 文件,原先的 bash 进程继续返回等待刚才启动的新进程结束,然后继续等待用户输入命令。对于每个要被重定位的 ELF 段都有一个对应的重定位表,而一个重定位表往往就是 ELF 文件中的一个段,所以其实重定位表也可以叫重定位段。静态链接是在编译过程的最后阶段将多个目标文件(如 .o 文件)以及所需的库文件合并在一起,生成最终的可执行文件或共享库的过程。原创 2024-06-05 23:07:13 · 648 阅读 · 0 评论 -
PWN环境配置
用于搜索 libc 中能够实现 execve("/bin/sh", (char *[2]) {"/bin/sh", NULL}, NULL);是 /home/<username>/.gdbinit 而管理员权限读取的是 /root/.gdbinit。注意,以普通用权限和管理员权限启动 gdb 时读取的 .gdbinit 文件的路径是不同的,普通权限读取的。gdb 在启动的时候会读取当前用户的主目录的.gdbinit文件进行 gdb 插件的初始化,这里提供一个。原创 2024-06-05 21:27:35 · 880 阅读 · 1 评论