8月7日pwn学习

题目:hello_pwn

题目描述:pwn!,segment fault!菜鸡陷入了沉思

解题思路:老规矩按步骤办事

1.checksec文件

8月7日pwn学习_第1张图片

 

 

没有stack保护,也没有内存地址随机机制

 2.file查看文件信息

 

 

 3.尝试连接8月7日pwn学习_第2张图片

 

 4.ida逆编译文件

 8月7日pwn学习_第3张图片

 

 

 main伪代码

发现如果dword——60106c这个值为1853186401这个值,便可以得到flag

8月7日pwn学习_第4张图片

 

 

                                                               内存地址栈

发现unk_601068这个值可以溢出到doword上。

5.写exp

 8月7日pwn学习_第5张图片

 

 

 6.得到结果

8月7日pwn学习_第6张图片

 

题目:level2

题目描述:菜鸡请教大神如何获得flag,大神告诉他‘使用`面向返回的编程`(ROP)就可以了’

 题目分析:在ida的时候遇到了麻烦,因为32位版本的ida又没有编译器,所以只得重找资源,下好了再按常规步骤进行。除此之外还需要对函数栈进行一个学习。

函数栈

 学习博客为:https://blog.csdn.net/u012218309/article/details/81669227

8月7日pwn学习_第7张图片

 

 当进程被加载到内存时,会被分成很多段。

寄存器也是很重要的一个组成部分

EAX:累加(Accumlator)寄存器,常用于函数返回值

EBX:基址(Base)寄存器,以它为基址访问内存

ECX:计数器(Counter)寄存器,常用作字符和循环操作中的j计数器

EDX:数据(Date)寄存器,常用于乘除法和I/O指针

EXI:源变址寄存器

DSI:目的变址寄存器

ESP:堆栈(Stack)指针寄存器,指向堆栈顶部

EBP:基址指针寄存器,指向当前堆栈底部

EIP:指令寄存器,指向下一条指令的地址

1.checksec

 8月7日pwn学习_第8张图片

 

 

 没有栈保护们也没有地址随机机制

2.file查看文件 3.nc尝试连接文件

8月7日pwn学习_第9张图片

 

 

 4.ida反编译文件

8月7日pwn学习_第10张图片

 

 发现主函数的这个函数中,缓冲区0x88,但是可以读入0x100,明显的缓冲区溢出,那么这个时候我们就在溢出区中想办法构造一个高等级的函数

8月7日pwn学习_第11张图片

 

 

 而在右边恰好有一个system的plt地址,然后我们在尝试找一下是否有/bin/sh这个参数,来构造shell,输入alt+t查找字符串,发现是存在的

 

 

 5.构造exp

那么在实现exp的有个重点,那就是payload的构造,除了需要0x88长度的字符覆盖分配的缓冲区,还需要0x04的长度覆盖在调用另一个函数时保存的调用函数的基址指针ebp

8月7日pwn学习_第12张图片

 

 

 这个时候,后面就可以跟上我们想要调用的函数的函数地址,即system,而在构造函数栈时,函数结构为调用函数地址-》函数返回地址-》参数1-》参数2-》...-》参数n

所以后面还需要覆盖函数返回地址后再递入参数。

所以payload=‘a’*(0x88+0x04)+p32(sysadd)+p32(0)+p32(binshadd)

8月7日pwn学习_第13张图片

 

 

                                        exp

6.得到结果

8月7日pwn学习_第14张图片

 

你可能感兴趣的:(8月7日pwn学习)