pwn |
您所在的位置:网站首页 › libc函数 › pwn |
PWN入门(计算机底层知识,计算机组成原理,计算机系统) 0. 二进制基础知识 1. ELF文件介绍 bss段,未初始化全局变量,因为可读可写,我们可以把shellcode存放在这里 data段,已初始化全局变量,可读不可写 rodata,c字符串和#define定义的常量,可读不可写 txt段:存放程序执行代码的内存区域,该区域大小在程序运行前就已经确定,可读可执行不可写 IDA对ELF的分析 Program Segmentation (shift+F7) PLT表和GOT表,动态链接机制 2. Shellcode是一段发送给服务器的核心数据,其中payload是真正的危害数据 1. 获取shell型(自己用汇编写一个shell获取shell) 1. 开放端口等待正向连接,获得shell 2. 反向连接,获得shell 3. 寄存器 EAX:累加寄存器,常用于函数返回值 EBX:基址寄存器,以它为基址访问内存 gdb vmmap可以看到程序结构 4. 栈 1.函数参数 2.call指令下一条指令地址 3.保存前函数栈帧,并减少ESP提供空间给新函数 GOT表复写 函数指针(!) 5. Linux系统保护机制 NX(DEP) 数据执行保护 Canary(FS)栈溢出保护 RELRO(ASLR)(地址随机化)所有需要堆栈精确地址的攻击都会受到打击,要提前泄露地址,利用延迟绑定,打印出libc真正地址 PIE(代码不相关,代码段地址随机化) 命令checksec
6. GDB常用命令 下午 Format String格式化字符串漏洞: printf家族函数的问题 %9$n打印到第9个参数里%n %5$n=%x%x%x%x%x%n 利用GOT表得到libc函数地址,进而获取libc,进而获取其他libc函数地址 盲打,dump整个程序,获取有用信息 查看 格式化字符串打印栈内存内容的时候,栈中第一个单元存放的是格式化字符串的地址,之后才是1,2,3…个参数 如果是动态链接,真正地址是指向动态链接的,如果没有给动态链接库,开始nx,所以基本上就是需要你泄露libc地址 libcdb.com(根据两个地址泄露libc地址的在线工具) addr%k$s获取指定地址addr的内容 输入格式:不能直接在命令行输入\x0c,scanf会将\,X,0,c分别作为字符一个个读入 ,应该使用pwntools的p32,变换成栈里的变量形式 payload构造方法:%[overwrite offset]$n overwrite got
原理:libc中函数都是通过GOT表来跳转的,没有开启RELRO保护前提下,每个libc函数对应的GOT表项是可以修改的,通过将printf的GOT表项修改成System函数的地址,从而程序执行printf的时候就执行System |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |