ret2csu
我认为这道题本身是没有什么实际意义的,但是它教会了我一种新的利用思路
这道题虽然明确指出利用函数__libc_csu_init来进行
但这个函数本身不是做为攻击者使用而设计的,它是设计出来初始化libc,只是恰好我们能够利用
因此,我认为这道题的主要目的是利用现有的汇编片段来实现攻击(与ret2por比较类似)
__libc_csu_init
在本题里,这个函数的汇编代码如下(可能与你看到的有点不同)
; void _libc_csu_init(void)
public __libc_csu_init
__libc_csu_init proc near
var_30= qword ptr -30h
var_28= qword ptr -28h
var_20= qword ptr -20h
var_18= qword ptr -18h
var_10= qword ptr -10h
var_8= qword ptr -8
; __unwind {
mov [rsp+var_28], rbp
mov [rsp+var_20], r12
lea rbp, cs:600E24h
lea r12, cs:600E24h
mov [rsp+var_18], r13
mov [rsp+var_10], r14
mov [rsp+var_8], r15
mov [rsp+var_30], rbx
sub rsp, 38h
sub rbp, r12
mov r13d, edi
mov r14, rsi
sar rbp, 3
mov r15, rdx
call _init_proc
test rbp, rbp
jz short loc_400606
xor ebx, ebx
nop dword ptr [rax+00h]
loc_4005F0:
mov rdx, r15
mov rsi, r14
mov edi, r13d
call qword ptr [r12+rbx*8]
add rbx, 1
cmp rbx, rbp
jnz short loc_4005F0
loc_400606:
mov rbx, [rsp+38h