20145308 《网络对抗》 注入shellcode+Return-to-libc攻击 学习总结

20145308 《网络对抗》 逆向及BOF进阶实践 注入shellcode+Return-to-libc攻击 学习总结

实践目的

  • 注入shellcode
  • 实现Return-to-libc攻击linux

    知识点学习总结

  • Shellcode实际是一段代码(也能够是填充数据),是用来发送到服务器利用特定漏洞的代码,通常能够获取权限。另外,Shellcode通常是做为数据发送给受攻击服务器的。 Shellcode是溢出程序和蠕虫病毒的核心,提到它天然就会和漏洞联想在一块儿
  • Linux中两种基本构造攻击buf的方法:retaddr+nop+shellcode,nop+shellcode+retaddr,缓冲区小就就把shellcode放后边,否则就放前边
  • Return-to-libc是缓冲区溢出的变体攻击,这种攻击不须要一个栈能够执行,甚至不须要一个shelcode,取而代之的是咱们让漏洞程序调转到现存的代码(好比已经载入内存的lib库中的system()函数等)来实现咱们的攻击shell

    实践过程

    shellcode的注入

  • 编写一段sellcode,文件保存名20145308shellcode
    bash

  • 安装execstack
    服务器

  • 设置堆栈可执行,并查询堆栈是否可执行,以便shellcode在堆栈上能够执行
    网络

  • 关闭地址随机化,避免每次执行分配的内存地址不一样
    函数

  • 采起nop+shellcode+retaddr方式构造payload\x4\x3\x2\x1将覆盖到堆栈上的返回地址的位置,须要将它改成shellcode的地址)
    学习

  • 肯定\x4\x3\x2\x1处返回地址应该填什么
  • 注入攻击buf
    操作系统

  • 另开一个终端,用gdb调试5308pwn进程
  • 首先要找到5308pwn进程号,找到5308的进程号是2906
    3d

  • 启动gdb调试进程,设置断点,查看注入buf的内存地址
    调试

  • 设置断点后,在另外一个终端按下回车,并寻找返回地址,看到01020304表示返回地址的位置是0xffffd33cshellcode就紧挨着这个地址,加四字节为0xffffd340

  • 退出gdb,按照anything+retaddr+nops+shellcode修改input_shellcode以下

  • 成功

Return-to-libc攻击

  • 输入命令安装一些用于编译32位C程序的东西
  • sudo apt-get update

  • sudo apt-get install lib32z1 libc6-dev-i386

  • sudo apt-get install lib32readline-gplv2-dev,安装未成功,参照同窗博客,发现安装与否没有太大关系

  • 进入32位linux环境,并使用bash

  • 关闭地址空间随机化

  • 使用另外一个shell程序(zsh)代替/bin/bash,设置zsh程序

  • 在编译时手动设置栈不可执
  • 编写retlib.c

  • 编译程序,并设置SET-UID

  • 上述程序有一个缓冲区溢出漏洞,它先从一个叫“badfile”的文件里把 40 字节的数据读取到 12 字节的 buffer,引发溢出。fread()函数不检查边界因此会发生溢出。因为此程序为 SET-ROOT-UID 程序,若是一个普通用户利用了此缓冲区溢出漏洞,他有可能得到 root shell。应该注意到此程序是从一个叫作“badfile”的文件得到输入的,这个文件受用户控制。如今咱们的目标是为“badfile”建立内容,这样当这段漏洞程序将此内容复制进它的缓冲区,便产生了一个 root shell
  • 须要用到一个读取环境变量的程序:getenvaddr.c

  • 编译

  • 编写exploit.c

  • 用刚才的getenvaddr程序得到BIN_SH地址,0xffffdf43

  • gdb得到systemexit地址
  • 编译

  • gdb,获得system地址0xf7e2eb30exit地址0xf7e227e0

  • 修改exploit.c文件,填上刚才找到的内存地址

  • 删除刚才调试编译的exploit程序和badfile文件,从新编译修改后的exploit.c

  • 先运行攻击程序exploit,生成了badfile文件,再运行漏洞程序retlib,可见攻击成功,得到了root权限

    其余

  • 刚开始的时候,感受进阶实验很难,不敢动手,通过老师上课讲解以后,决定尝试一次,最后成功作出了实验,也经过实验对shellcode注入部分的知识有必定的了解
  • 可是实验是在关闭地址随机化和设置堆栈可执行等前提下进行的,在现实里基本没有类似的状况,操做系统都会实施措施保护计算机,因此还须要进阶学习
  • 进阶学习,选择了Return-to-libc的实验,实现了在栈不可执行的状况下,让漏洞程序调转到现存的代码
  • 开始编译exploit程序出错,运行结果是攻击程序和漏洞程序都是运行错误,后来发现本身写代码的时候把fopen写成了open致使错误

相关文章
相关标签/搜索