pwn-day

  hkwany       2017-08-05 22:12:01 470  3

PWN入门(计算机底层知识,计算机组成原理,计算机系统)

0.      二进制基础知识

1.      ELF文件介绍

bss段,未初始化全局变量,因为可读可写,我们可以把shellcode存放在这里

data段,已初始化全局变量,可读不可写

rodatac字符串和#define定义的常量,可读不可写

txt段:存放程序执行代码的内存区域,该区域大小在程序运行前就已经确定,可读可执行不可写

IDAELF的分析 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的内容

输入格式:不能直接在命令行输入\x0cscanf会将\,X,0,c分别作为字符一个个读入

,应该使用pwntoolsp32,变换成栈里的变量形式

payload构造方法:%[overwrite offset]$n

overwrite got

原理:libc中函数都是通过GOT表来跳转的,没有开启RELRO保护前提下,每个libc函数对应的GOT表项是可以修改的,通过将printfGOT表项修改成System函数的地址,从而程序执行printf的时候就执行System

请先登录
+1 已点过赞
3
分享到:
登录后才能发贴或参与互动哦! 点击登录

全部评论 (0)