复现题目中探究的一些杂记

记录一点自己的疑难点,越学真的是越发感觉自己的菜。

杂记1

例如

1
2
3
4
5
6
7
8
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
int main(){
init();
unsigned long * ptr1 = malloc(0x88);
target = ptr1;
ptr1[0+0x10] = 0x66;

此处的ptr1[0+0x10]是对下标索引的操作(就是指针)。[]里移动0x01在64位里就是8字节光标的移动

杂记2

静态编译中hook的找法

杂记3

mprotect(add,len,prot)rdi = add ; rsi = len ;rdx = prot;

prot=7 是可读可写可执行

scanf

在linux 16版本中,scanf输入的数据过大超过linux栈空间的最大值(8m),就会自动调用堆块来储存数据。

在64位系统下,small bin <0x400

在32位系统下,small bin <0x200

所以你输入0x400字节数据,就会触发malloc_consolidate,使得fasted bin里的堆块合并到unsorted bin里面。

直接利用ROPgadget在libc里找gadget偏移

在获取到了libc基址后,就可以直接利用ROPgadget在libc里寻找偏移了。

指令如下:

先创建一个libc.gadget文件,储存libc里的gadget

1
ROPgadget --binary libc-2.23.so>libc.gadget

image-20191202235533413

再利用grpe寻找需要的gadget

1
grep "pop rdi ; ret" libc.gadget

image-20191202235612002

当然!你也可以用另一种方法。

知道libc_base后,要获取pop rdi;ret这种,直接

1
pop_rdx_ret = libc + lib.search(asm("pop rdx\nret")).next()

本文标题:复现题目中探究的一些杂记

文章作者:zhz

发布时间:2019年10月29日 - 23:10

最后更新:2019年12月04日 - 18:12

原始链接:http://yoursite.com/2019/10/29/”复现题目中探究的一些杂记“/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。