![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
pwn
文章平均质量分 79
flurry_rain
这个作者很懒,什么都没留下…
展开
-
Linux PWN技巧之栈迁移
简介栈迁移简单将就是控制EBP/RBP、ESP/RSP寄存器,让栈帧指向一段我们可以控制的内存,从而实现控制栈上执行内容、控制程序执行流程的目的。栈迁移一般会将栈帧指向bss段(其他可读写内存段也可以),这种技巧是为了解决栈上空间太小,不够写入完整payload的情况。比如有个程序存在栈溢出的漏洞,但溢出的长度不够,只够覆盖到返回地址,不能读入完整的rop链,这种情况就可能要用到栈迁移的技巧了利用介绍以32位程序为例,描述一下栈迁移的核心思想。首先要理解leave和ret汇编指令的作用:lea原创 2022-02-16 18:52:20 · 1775 阅读 · 0 评论 -
结合延迟绑定分析ELF中的.plt .plt.got .got以及.got.plt
在逆向分析ELF文件的时候,常常会看到.plt .plt.got .got以及.got.plt这几个长得很像的节区,如下:readelf -S test如果ELF文件中还使用了静态或者动态链接文件中的符号,还会包含一个.rel.plt节关于这些节各自的作用,可以参考如下链接:https://www.codeleading.com/article/37234101170/https://stackoverflow.com/questions/58076539/plt-plt-got-what-i原创 2022-02-15 19:11:44 · 1274 阅读 · 0 评论 -
pwntools使用第五弹——ret2dlresolve以及延迟绑定
简介关于ret2dlresolve利用的原理,可以参考如下博文:https://www.freebuf.com/articles/system/170661.htmlret2dlsolve的核心原理就是利用了延迟绑定技术,linux在加载ELF可执行文件的时候,包含的动态链接文件里的符号,并不会直接把这些符号的实际地址加载到内存中,而是会使用PLT + GOT 表来实现延迟绑定,简单说就是在第一次用到动态链接文件里的符号的时候才会去寻找符号的实际位置然后保存下来,下次使用的时候就可以直接访问了,关于延原创 2022-02-11 18:52:52 · 3502 阅读 · 0 评论 -
pwntools使用gdb attach卡在waiting the debugger的解决
环境ubuntu 21.04gdb 10.1.90python 3.9.5pwntools 4.7.0问题现象exp脚本中使用gdb.attach()命令调试,脚本会在waiting the debuger卡住:解决方法这是pwntools的bug,查看github的issue发现有人遇到了一样的问题:https://github.com/Gallopsled/pwntools/issues/1984解决方法是更新pwntools版本至已经修复的版本,不过目前只有测试版已经修复了,因此原创 2022-01-25 11:39:52 · 1689 阅读 · 0 评论 -
linux C解析获取ko文件的模块名
前言在使用ko文件的时候,有时候可能会出现模块名与ko文件名不一致的情况,比如下面的例子,插入了一个 test.ko 的文件,但实际上文件使用的模块名不是 test 而是 hello:因此不能简单的直接把ko文件名当作模块名来使用,否则在卸载模块的时候可能会出现模块无法找到的问题解决方案ko文件的模块名会保存在 THIS_MODULE 模块对象(类型为 struct module )中,该对象作为 .gnu.linkonce.this_module 节存储在内核模块文件中。使用如下命令可获取该节原创 2022-01-22 18:41:20 · 1705 阅读 · 0 评论 -
linux编译ko文件
示例文件源码随便在网上找了一个demo:#include <linux/init.h> #include <linux/kernel.h> #include <linux/module.h> static int funcIn(void) { printk("in module"); return 0; } static void funcOut(void) { printk("out module");原创 2022-01-21 15:31:05 · 5640 阅读 · 1 评论 -
pwntools使用实践第三弹——ret2libc
题目2015-Defcon Qualifier R0pbaby一个比较基础的rop链构造题目,题目链接如下:https://github.com/ctfs/write-ups-2015/tree/master/defcon-qualifier-ctf-2015/babys-first/r0pbaby题目分析详细的分析可以参考这个博客:DEFCON-2015-r0pbaby大体步骤如下:首先checksec检查程序开启了哪些防护:objdump检查是否有可以直接使用的函数(system、原创 2021-09-14 20:36:51 · 416 阅读 · 0 评论 -
Linux下的内存安全机制随笔——ASLR
linux中开启/关闭ASLR机制可以通过修改**/proc/sys/kernel/randomize_va_space**文件来实现,文件为不同数值表示不同的ASLR状态:0:关闭ASLR1:部分开启ASLR,只对 mmap()分配的内存地址、共享库、栈以及VSDO进行地址随机化2:完全开启ASLR,除了1状态下随机化的地址外,增加对brk()分配的内存地址的随机化注意:ASLR不会对程序的代码段和数据段(data、bss段)进行随机化,Linux下代码段和数据段的随机化是通过PIE机制实现的原创 2021-09-01 10:44:08 · 432 阅读 · 0 评论 -
linux手写x64的shellcode
编写汇编代码下面的代码实现的是执行 execve("/bin/sh") 命令,rax寄存器存放execve的系统调用编号,rdi存放的是execve的参数:section .textglobal _start_start:push raxxor rdx, rdxxor rsi, rsimov rbx,'/bin//sh'push rbxpush rsppop rdimov al, 59syscall关于x64的系统调用表可参考如下博文:https://blog.csdn.ne原创 2021-08-25 11:22:56 · 1167 阅读 · 2 评论 -
pwntools使用第二弹——简单ROP实践
环境准备系统环境:Ubuntu 21.04内核版本:Linux 5.11.0cpu架构:x86_64gcc:7.5.0gdb:9.2python:3.8.5pwndbg:2020.07.23ROP概念介绍ROP是用来绕过NX保护的,开启 NX 保护的话栈、堆的内存空间就没有执行权限了,直接向栈或者堆上直接注入代码的攻击方式就无效了。ROP的主要思想是在栈缓冲区溢出的基础上,利用程序中已有的小片段 (gadgets) 来改变某些寄存器或者变量的值,从而控制程序的执行流程。所谓 gadg原创 2021-08-24 10:36:15 · 830 阅读 · 0 评论 -
Linux下的内存保护机制
0. 查看二进制文件开启的保护机制使用 checsec 命令查看,按照pwntools的话就会装上checksec:1. RELRO有关RELRO的技术细节 https://hardenedlinux.github.io/2016/11/25/RelRO.html有关GOT攻击的技术原理参考 http://blog.csdn.net/smalosnail/article/details/53247502RELOR开启/关闭gcc -o test test.c原创 2021-08-12 17:39:34 · 1476 阅读 · 0 评论 -
pwntools使用初探——简单栈溢出的利用
注意的坑:buf长度要足够长,至少要大于shellcode的长度pwntools生成shellcode的时候要在shellcract语句前面加上context原创 2021-06-03 16:49:39 · 1457 阅读 · 0 评论 -
liunx下pwn环境搭建
0. 环境准备Ubuntu 20.04x86_64(cpu架构如果不)python3.8.*原创 2021-06-02 13:32:10 · 657 阅读 · 0 评论