PWN Flashcards
PEB是什么
进程环境块
PEB是存放着进程信息的结构体
怎样才能找到PEB
线程TEB结构体中,偏移0x30(fs:[0x30])所指就是PEB
如何用Windbg查看PEB结构
nt!_PEB
TEB是什么
线程环境块,
每一个线程都有自己的TEB,
每个TEB都有自己的TIB(Thread Information Block),即线程信息块
TEB结构有什么特点
- 一个进程中可能同时存在多个线程
- 每个线程都有一个线程环境块
- 第一个TEB开始于地址0x7FFDE000(WIN10看寄存器窗口EFLAGS的S标志位后面的FS:[0]地址如:2ff000,去OD中dd 2ff000)
- 之后新建线程的TEB将紧随前边的TEB,之间相隔0x1000字节,并相内存低地址方向增长
- 当线程退出时,对应TEB也被销毁,腾出的TEB空间可被新建的线程重复使用
说说TIB结构都有什么
TTEB的0x0-0x18这段指针都是TIB FS:[000] 指向SEH链指针 FS:[004] 线程堆栈顶部 FS:[008] 线程堆栈底部 FS:[00C] SubSystemTib FS:[010] FiberData FS:[014] ArbitraryUserPointer FS:[018] 指向TEB自身
Inter与AT&T汇编区别举例:
操作方向相反
Intel:mov 目标 源
mov eax, 51h
AT&T:mov 源 目标
movl $51h, %eax
Inter与AT&T汇编区别举例:
指令前缀
Intel:没有这方面的要求
mov eax, 51h
AT&T:寄存器前边要加上%,立即数前要加上$
movl $51h, %eax
Inter与AT&T汇编区别举例:
内存单元操作数
Intel:基地址使用[]
mov eax,[ebx]
AT&T: 基地址使用()
movl (%ebx),%eax
Inter与AT&T汇编区别举例:
操作码后缀
Intel在[ ]时需要在操作数前面加dword ptr, word ptr, byte ptr的格式
Intel:mov al,bl
AT&T中操作码后面有一个后缀字母:“l” 32位,“w” 16位,“b” 8位
AT&T:movb %bl %al
Inter与AT&T汇编区别举例:
跳转后缀(f,b)
AT&T中跳转指令标号后的后缀 表示跳转方向
“f”表示向前,“b”表示向后
Inter与AT&T汇编区别举例:
注释符号不同
AT&T: #
Inter: ;
jmp esp机器码是多少
ff e4
retn机器码是多少
c3
retn 8后,eip和esp分别怎么变化
EIP=esp,esp=esp+4+8
从网上找到的shellcode怎样试验能不能用?
方法1:
采用注入的思想:
使用temp\教程\在学\小工具\代码注入器
把汇编代码写在里面,随便找一个进程双击,然后点注入远程代码
方法2:
直接od随便找个程序,把上面代码贴到里面,第一条shellcode指令右键,“设为eip”
然后运行。
简述栈溢出覆盖返回地址流程
0、崩溃重现(搞一特别长串字符使其崩溃) 1、找个jmp esp(!mona find -s 0xe4ff) 2、生成pattern串(!mona pc 30000) 3、找EIP偏移(!mona findmsp)并替换成jmp esp地址 4、msf生成shellcode 5、填充字符(大小24)+jmp esp的地址(大小4,注意小端)+ 20个0x90 +shellcode
什么是软件DEP
软件DEP就是SafeSEH,在调用异常处理函数之前,对调用的异常处理函数进行校验,如果发现异常处理函数不可靠(被覆盖,被篡改),则立即终止异常处理函数的调用
什么是硬件DEP
会把需要保护的页面设置成不可执行页(把堆栈设置为不可执行属性),防止shellcode在堆栈中执行。
windows中怎样通过rop绕过DEP
1、使用!mona pc 30000溢出,记下EIP的偏移 2、找小配件(!mona rop -m *.dll -cp nonull ) 3、去rop_chains找一个rop链 构造: "A"*26081 + ROP + shellcode
windows中利用SEH原理是什么
[填充字符] [nextSEH] [Handler] [Nop-Shellcode]
nextSEH = 跳转到Shellcode的指令码 Handler = pop,pop,ret指针
windows中利用SEH流程是什么
1、触发异常(!mona pattern_create 20000) 2、搜索pop pop ret指针(!mona seh ) 3、运行程序,程序崩溃会断下 !mona findmsp查看SEH链,发现handler位于612偏移处, SEH前面就是next SEH指针,因此填充字符长度为612-4=608
构造
[608个填充字符] [\xEB\x06\x90\x90 ] [pop,pop,ret指针] [Nop+Shellcode]
windows中GS保护机制是什么
当编译的时候,如果开启GS选项,则会在函数的开头和结尾添加代码来阻止典型栈溢出(字符串缓冲区)的利用。
当程序启动后时,会随机一个4字节的cookie保存在.data节中,在函数开始时cookie被拷贝到EBP和返回地址的正前方。
windows中ALSR是什么
每次重启会发现模块的基地址都是变化的,就是ASLR造成的。