zoukankan      html  css  js  c++  java
  • 20145318《网络对抗》注入shellcode及Return-to-libc

    20145318《网络对抗》注入shellcode及Return-to-libc

    注入shellcode

    知识点

    • 注入shellcodeShellcode实际是一段代码(也可以是填充数据),是用来发送到服务器利用特定漏洞的代码,一般可以获取权限。另外,Shellcode一般是作为数据发送给受攻击服务器的。 Shellcode是溢出程序和蠕虫病毒的核心,提到它自然就会和漏洞联想在一起,毕竟Shellcode只对没有打补丁的主机有用武之地。漏洞利用中最关键的是Shellcode的编写。

    实践过程

    •  写一段shellcode,保存为20145318shellcode.c
    •  

    •  安装execstack

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

    • 关闭地址随机化

    •  用more /proc/sys/kernel/randomize_va_space来查询地址随机化是开启状态还是关闭状态,`2`表示开启,`0`表示关闭。
    •  采取nop+shellcode+retaddr方式构造payload(x4x3x2x1将覆盖到堆栈上的返回地址的位置,需要将它改为shellcode的地址)

    • 注入攻击buf

    • 再打开一个终端,用GDB调试5318pwn进程,找到进程号2906

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

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

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

    • 成功

    Return-to-libc攻击

    • sudo apt-get update

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

     

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

    • 关闭地址空间随机化

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

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

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

    • 需要用到一个读取环境变量的程序:getenvaddr.c

    • 编译

    • 编写exploit.c

    • 用刚才的getenvaddr程序获得BIN_SH地址

    • gdb获得systemexit地址
    • 编译

    • gdb,得到system和exit的地址

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

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

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

  • 相关阅读:
    web前端开发,一种立杆见影的编程乐趣
    SqlServer按照指定顺序对字段进行排序
    快速排序
    Jetty 的工作原理以及与 Tomcat 的比较
    windows Mysql备份脚本
    PHP 扩增mysql
    MySQL Master/Slave Master/Master 机制
    读取static 中读取SRC目录下的配置文件
    [高可用性] 负载均衡,会话保持,session同步
    Spring AOP配置选项
  • 原文地址:https://www.cnblogs.com/zy1111/p/6545528.html
Copyright © 2011-2022 走看看