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

时间:2023-01-14 22:16:47

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

实践目的

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

    知识点学习总结

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

    实践过程

    shellcode的注入

  • 编写一段sellcode,文件保存名20145308shellcode
    20145308 《网络对抗》  注入shellcode+Return-to-libc攻击  学习总结

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

  • 设置堆栈可执行,并查询堆栈是否可执行,以便shellcode在堆栈上可以执行
    20145308 《网络对抗》  注入shellcode+Return-to-libc攻击  学习总结

  • 关闭地址随机化,避免每次执行分配的内存地址不同
    20145308 《网络对抗》  注入shellcode+Return-to-libc攻击  学习总结

  • 采取nop+shellcode+retaddr方式构造payload\x4\x3\x2\x1将覆盖到堆栈上的返回地址的位置,需要将它改为shellcode的地址)
    20145308 《网络对抗》  注入shellcode+Return-to-libc攻击  学习总结

  • 确定\x4\x3\x2\x1处返回地址应该填什么
  • 注入攻击buf
    20145308 《网络对抗》  注入shellcode+Return-to-libc攻击  学习总结

  • 另开一个终端,用gdb调试5308pwn进程
  • 首先要找到5308pwn进程号,找到5308的进程号是2906
    20145308 《网络对抗》  注入shellcode+Return-to-libc攻击  学习总结

  • 启动gdb调试进程,设置断点,查看注入buf的内存地址
    20145308 《网络对抗》  注入shellcode+Return-to-libc攻击  学习总结

  • 设置断点后,在另一个终端按下回车,并寻找返回地址,看到01020304表示返回地址的位置是0xffffd33cshellcode就紧挨着这个地址,加四字节为0xffffd340
    20145308 《网络对抗》  注入shellcode+Return-to-libc攻击  学习总结

  • 退出gdb,按照anything+retaddr+nops+shellcode修改input_shellcode如下
    20145308 《网络对抗》  注入shellcode+Return-to-libc攻击  学习总结

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

Return-to-libc攻击

  • 输入命令安装一些用于编译32位C程序的东西
  • sudo apt-get update
    20145308 《网络对抗》  注入shellcode+Return-to-libc攻击  学习总结

  • sudo apt-get install lib32z1 libc6-dev-i386
    20145308 《网络对抗》  注入shellcode+Return-to-libc攻击  学习总结

  • sudo apt-get install lib32readline-gplv2-dev,安装未成功,参照同学博客,发现安装与否没有太大关系
    20145308 《网络对抗》  注入shellcode+Return-to-libc攻击  学习总结

  • 进入32位linux环境,并使用bash
    20145308 《网络对抗》  注入shellcode+Return-to-libc攻击  学习总结

  • 关闭地址空间随机化
    20145308 《网络对抗》  注入shellcode+Return-to-libc攻击  学习总结

  • 使用另一个shell程序(zsh)代替/bin/bash,设置zsh程序
    20145308 《网络对抗》  注入shellcode+Return-to-libc攻击  学习总结

  • 在编译时手动设置栈不可执
  • 编写retlib.c
    20145308 《网络对抗》  注入shellcode+Return-to-libc攻击  学习总结

  • 编译程序,并设置SET-UID
    20145308 《网络对抗》  注入shellcode+Return-to-libc攻击  学习总结

  • 上述程序有一个缓冲区溢出漏洞,它先从一个叫“badfile”的文件里把 40 字节的数据读取到 12 字节的 buffer,引起溢出。fread()函数不检查边界所以会发生溢出。由于此程序为 SET-ROOT-UID 程序,如果一个普通用户利用了此缓冲区溢出漏洞,他有可能获得 root shell。应该注意到此程序是从一个叫做“badfile”的文件获得输入的,这个文件受用户控制。现在我们的目标是为“badfile”创建内容,这样当这段漏洞程序将此内容复制进它的缓冲区,便产生了一个 root shell
  • 需要用到一个读取环境变量的程序:getenvaddr.c
    20145308 《网络对抗》  注入shellcode+Return-to-libc攻击  学习总结

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

  • 编写exploit.c
    20145308 《网络对抗》  注入shellcode+Return-to-libc攻击  学习总结

  • 用刚才的getenvaddr程序获得BIN_SH地址,0xffffdf43
    20145308 《网络对抗》  注入shellcode+Return-to-libc攻击  学习总结

  • gdb获得systemexit地址
  • 编译
    20145308 《网络对抗》  注入shellcode+Return-to-libc攻击  学习总结

  • gdb,得到system地址0xf7e2eb30exit地址0xf7e227e0
    20145308 《网络对抗》  注入shellcode+Return-to-libc攻击  学习总结

  • 修改exploit.c文件,填上刚才找到的内存地址
    20145308 《网络对抗》  注入shellcode+Return-to-libc攻击  学习总结

  • 删除刚才调试编译的exploit程序和badfile文件,重新编译修改后的exploit.c
    20145308 《网络对抗》  注入shellcode+Return-to-libc攻击  学习总结

  • 先运行攻击程序exploit,生成了badfile文件,再运行漏洞程序retlib,可见攻击成功,获得了root权限
    20145308 《网络对抗》  注入shellcode+Return-to-libc攻击  学习总结

    其他

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

20145308 《网络对抗》 注入shellcode+Return-to-libc攻击 学习总结的更多相关文章

  1. 20145307陈俊达《网络对抗》shellcode注入&return to libc

    20145307陈俊达<网络对抗>shellcode注入 Shellcode注入 基础知识 Shellcode实际是一段代码,但却作为数据发送给受攻击服务器,将代码存储到对方的堆栈中,并将 ...

  2. 20145215《网络对抗》shellcode注入&amp&semi;Return-to-libc攻击深入

    20145215<网络对抗>shellcode注入&Return-to-libc攻击深入 Shellcode注入 基础知识 Shellcode实际是一段代码,但却作为数据发送给受攻 ...

  3. 20145227鄢曼君《网络对抗》shellcode注入&amp&semi;Return-to-libc攻击深入

    20145227鄢曼君<网络对抗>shellcode注入&Return-to-libc攻击深入 shellcode注入实践 shellcode基础知识 Shellcode实际是一段 ...

  4. 20145317《网络对抗》shellcode注入&amp&semi;Return-to-libc攻击深入

    20145317<网络对抗>shellcode注入&Return-to-libc攻击深入 学习任务 shellcode注入:shellcode实际是一段代码,但却作为数据发送给受攻 ...

  5. 20145326蔡馨熠《网络对抗》shellcode注入&amp&semi;Return-to-libc攻击深入

    20145326蔡馨熠<网络对抗>shellcode注入&Return-to-libc攻击深入 准备一段shellcode 首先我们应该知道,到底什么是shellcode.经过上网 ...

  6. 20145301《网络对抗》shellcode注入&amp&semi;Return-to-libc攻击深入

    20145301<网络对抗>shellcode注入&Return-to-libc攻击深入 Shellcode注入 shellcode是什么? Shellcode是指能完成特殊任务的 ...

  7. 20145303 刘俊谦《网络对抗》shellcode注入&amp&semi;Return-to-libc攻击深入

    20145303 刘俊谦<网络对抗>shellcode注入&Return-to-libc攻击深入 Shellcode注入 shellcode实际是一段代码,但却作为数据发送给受攻击 ...

  8. 20145239杜文超《网络对抗》- shellcode注入&amp&semi;Return-to-libc攻击深入

    20145239杜文超<网络对抗>- shellcode注入&Return-to-libc攻击深入 shellcode基础知识 Shellcode是一段代码,作为数据发送给受攻击服 ...

  9. 20145210姚思羽《网络对抗》——shellcode注入&amp&semi; Return-to-libc攻击深入

    20145210姚思羽<网络对抗>shellcode注入&Return-to-libc攻击深入 shellcode基础知识 Shellcode是一段代码,作为数据发送给受攻击服务器 ...

  10. 20145208 蔡野《网络对抗》shellcode注入&amp&semi;Return-to-libc攻击深入

    20145208 蔡野<网络对抗>shellcode注入&Return-to-libc攻击深入 Shellcode注入 shellcode的获取代码 我使用了许心远同学博客中的代码 ...

随机推荐

  1. springmvc &commat;responsebody 406&sol;415问题解决

    提供几个解决思路 1.如果项目中用的spring jar包是4.x版本, 需要jackson-annotations-2.x/jackson-core-2.x/jackson-databind-2.x ...

  2. 【GoLang】GoLang 遍历 map、slice、array方法

    代码示例: map1 := make(map[string]string) map1["a"] = "AAA" map1["b"] = &q ...

  3. uGUI练习&lpar;四&rpar; Light UI

    练习目标 在我之前的文章 Unity 2D Sprite Lighting ,讲到在2D Sprite中可以使用灯光,非常高兴的是,在Unity的新UI系统中我们也可以使用灯光 步骤 1.创建一个Pa ...

  4. jquery json遍历和动态绑定事件

    <div id='tmpselectorList' style='border: 1px solid grey;max-height: 150px;position:absolute;text- ...

  5. oracle nvl&lpar;&rpar;函数在使用中出现的问题

    看一条sql select q.*, r.goods_name from (select nvl(t.goods_code, s.goods_code) goods_code, t.buy_open_ ...

  6. ZOJ 3607贪心算法

    http://blog.csdn.net/ffq5050139/article/details/7832991 http://blog.watashi.ws/1944/the-8th-zjpcpc/ ...

  7. lsblk请参阅块设备

    lsblk可以查看分区和挂载的磁盘使用情况 lsblk全部的參数 -a, --all            显示全部设备  -b, --bytes          以bytes方式显示设备大小  - ...

  8. map和unordered&lowbar;map的差别和使用

    map和unordered_map的差别还不知道或者搞不清unordered_map和map是什么的,请见:http://blog.csdn.net/billcyj/article/details/7 ...

  9. Python中防止sql注入的方法详解

    SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编程时的疏忽,通过SQL语句,实现无帐号登录,甚至篡改数据库.下面这篇文章主要给大家介绍了关于Python中 ...

  10. Viterbi algorithm

    HMM(隐马尔可夫模型)是用来描述隐含未知参数的统计模型,是一个关于时序的概率模型,它描述了一个由隐藏的马尔可夫链生成状态序列,再由状态序列生成观测序列的过程.其中,状态之间的转换以及观测序列和状态序 ...