gdb常用命令
gdb
基础调试命令
s step,si步入
n 执行下一条指令 ni步入
b 在某处下断点,可以用
b * adrress
b function_name
info b 查看断点信息
delete 删除所有断点
c 继续
r 执行
disas addr 查看addr处前后的反汇编代码
disas functions 参看fucntion函数的反汇编代码
显示内存数据
p 系列
p system/main 显示某个函数地址
p $esp 显示寄存器
p/x p/a p/b p/s。。。
p 0xff - 0xea 计算器
print &VarName 查看变量地址
p * 0xffff
very_overflow writeup
防护机制:
[*] '/home/zs0zrc/pwn/Scoreboard/very_overflow/very_overflow'
Arch: i386-32-little
RELRO: Partial RELRO
Stack: No canary found
NX: NX enabled
PIE: No PIE (0x8048000)
只开启了NX,并且程序是32位的。简单的运行了下,发现程序有4个功能。题目提供了源码就不用ida看了。这个程序模拟一个node的分配系统,但是没有用到堆,而
2018-09-20
hackme.inndy_writeup
writeup
用来泄露libc的一些工具
libc_database
./add 用来添加libc库
./add /usr/lib/libc-2.21.so
./find 用来查找libc版本
$ ./find printf 260
archive-glibc (id libc6_2.19-10ubuntu2_i386)
./dump 用来输出libc中的一些函数的偏移
$ ./dump libc6_2.19-0ubuntu6.6_i386
offset___libc_start_main_ret = 0x19a83
offset_system = 0x00040190
offset_dup2 = 0x000db590
o
house_of_orange
今天学习了下house_of_orange,总算是把house_of_orange给搞懂了
house_of_orange原理其实很简单,就是利用unsorted bin attack 和_IO_FILE利用的结合
这里涉及到的知识点有点多,是堆利用和IO_FILE利用的结合,所以要对两者都有一定的了解
直接拿house_of_orange这道经典的题来说吧
防护机制:
基本程序逻辑:一共有三个功能
build 创建一个house 输入housename的长度、内容、price、color的一些信息,并且它的将house更新为最新分配的house,所以我们只能对刚分配的house进行操作
house_of_roman
记录一下,防止以后忘了
house_of_roman:该技术用于 bypass ALSR,利用12-bit 的爆破来达到获取shell的目的。且仅仅只需要一个 UAF 漏洞以及能创建任意大小的 chunk 的情况下就能完成利用
house_of_roman的作者提供了一个demo作为展示利用大概分三个步骤:
将 FD 指向 malloc_hook
修正 0x71 的 Freelist
往 malloc_hook 写入 one gadget
先分析下程序:程序开启了PIE和NX,一共有3个功能
程序存在UAF漏洞和堆溢出漏洞
堆溢出:
UAF:
程序的大致情况了解了后,分析作者的利用过
pwn环境
记录一下我的pwn环境,为以后虚拟机玩坏了要重装做准备先装一手虚拟机,下好ubuntu16.0.4版本的镜像装好镜像地址:https://pan.baidu.com/s/1mhCxGKg 密码:skyf
虚拟机装好后就开始装下面这些东西
32位依赖库
gdb的插件 peda
用来调试堆的插件Pwndbg
ROPgadget 做题的工具,用来找gadget的
pwntools 是一个ctf框架和漏洞利用开发库,用python开发的
LibcSearcher用来泄露libc库中函数的偏移的库
one_gadget用来寻找libc库中的execve(‘/bin/sh’, NULL, NULL)可
top_chunk的玩法
house_of_force是一种通过修改topchunk 的size字段来控制malloc返回包含想要控制地址的chunk的手法,从而达到修改任意地址内容的目的
原理:
假设有一个溢出漏洞,可以改写 top chunk 的size字段,然后将其改为一个非常大的值,
以确保所有的 malloc 将使用 top chunk 分配,而不会调用 mmap。这时如果攻击者
malloc 一个很大的数目(负有符号整数),top chunk 的位置加上这个大数,造成整
数溢出,结果是 top chunk 能够被转移到堆之前的内存地址(如程序的 .bss
段、.data 段、GOT 表等),下次再执行