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