通用Gadgets

在x64下有一些万能的gadgets可以利用,例如__libc_csu_init()这个函数。一般来说,只要程序调用了libc.so,程序都会有这个函数用来对libc进行初始化操作。

1.执行gad1

.text:000000000040089A                 pop     rbx  必须为0

.text:000000000040089B                 pop     rbp  必须为1

.text:000000000040089C      pop     r12  call!!!!

.text:000000000040089E

pop     r13                                        arg3

.text:00000000004008A0

pop     r14                                        arg2

.text:00000000004008A2pop     r15  arg1

.text:00000000004008A4                 retn  ——> to gad2


2.再执行gad2

.text:0000000000400880                 mov     rdx, r13

.text:0000000000400883                 mov     rsi, r14

.text:0000000000400886                 mov     edi, r15d

.text:0000000000400889call    qword ptr [r12+rbx*8] call!!!  (got表地址!!)

.text:000000000040088D                 add     rbx, 1

.text:0000000000400891                 cmp     rbx, rbp

.text:0000000000400894                 jnz     short loc_400880

.text:0000000000400896                 add     rsp, 8

.text:000000000040089A                 pop     rbx

.text:000000000040089B                 pop     rbp

.text:000000000040089C                 pop     r12

.text:000000000040089E                 pop     r13

.text:00000000004008A0                 pop     r14

.text:00000000004008A2                 pop     r15

.text:00000000004008A4                 retn ——> 构造一些垫板(7*8=56byte)就返回了

你可能感兴趣的:(通用Gadgets)