Shellcode注入

基础知识

  • Shellcode实际是一段代码,但却作为数据发送给受攻击服务器,将代码存储到对方的堆栈中,并将堆栈的返回地址利用缓冲区溢出,覆盖成为指向 shellcode的地址。Shellcode一般是作为数据发送给受攻击服务器的。 Shellcode是溢出程序和蠕虫病毒的核心,提到它自然就会和漏洞联想在一起,毕竟Shellcode只对没有打补丁的主机有用武之地。漏洞利用中最关键的是Shellcode的编写。

实践过程

  • 首先写一段shellcode,保存为20145310shellcode.c

  • 安装execstack

  

  • 将环境设置为:堆栈可执行、地址随机化关闭
  • execstack -s 5310pwn命令来将堆栈设为可执行状态
  • execstack -q 5310pwn命令来查看文件pwn20145333的堆栈是否是可执行状态
  • more /proc/sys/kernel/randomize_va_space命令来查看地址随机化的状态
  • echo "0" > /proc/sys/kernel/randomize_va_space命令来关闭地址随机化

     

  • 采取nop+shellcode+retaddr方式构造payload(\x4\x3\x2\x1将覆盖到堆栈上的返回地址的位置,需要将它改为shellcode的地址)

  • 注入攻击buf

  • 此时在第一个终端,用gdb来调试5310pwn进程,找到该进程的进程ID。

  • 启动gdb调试进程,用attach指令对该进程进行调试,设置断点,查看注入buf的内存地址

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

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

  • 执行5310pwn,成功

Return-to-libc攻击

  • 配置环境,输入指令创建32位C语言可编译的环境

  sudo apt-get update

  sudo apt-get install lib32z1 libc6-dev-i386

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

  • 关闭地址随机化

  sudo sysctl -w kernel.randomize_va_space=0

  • 为了不让/bin/bash的防护程序起作用(为了防止shell攻击,程序被调用时会自动弃权),使用另一个shell程序(zsh)代替/bin/bash,设置zsh程序

  • 在编译时手动设置栈不可执。在tmp文件夹下创建“retlib.c”文件,并编译设置SET-UID

  • 我们在编译代码时需要用 “–fno-stack-protector” 关闭GCC 编译器栈保护机制

  • 在tmp文件夹下准备读取环境变量的程序“getenvaddr.c”,并编译。

  • 把以下代码(攻击程序)保存为“exploit.c”文件,保存到 /tmp 目录下。

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

  • gdb获得systemexit地址,编译,获得 system 和 exit 地址

  • 修改 exploit.c 文件,填上内存地址

  • 删除刚才调试编译的exploit程序和badfile文件,重新编译修改后的exploit.c。
  • 先运行攻击程序 exploit,再运行漏洞程序 retlib,攻击成功,获得 root 权限。

20145310《网络对抗》注入shellcode及Return-to-libc的更多相关文章

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

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

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

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

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

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

  4. 20145215《网络对抗》shellcode注入&Return-to-libc攻击深入

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

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

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

  6. 20145317《网络对抗》shellcode注入&Return-to-libc攻击深入

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

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

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

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

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

  9. 20145301《网络对抗》shellcode注入&Return-to-libc攻击深入

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

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

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

随机推荐

  1. 【紫书】BigInteger 高精度类型 原书上有一个bug:A+B!=B+A

    存个代码 struct BigInterger { static const int BASE = 1e8; ; vector<int> s; BigInterger() { *this ...

  2. 初次安装hive-2.1.0启动报错问题解决方法

    首次安装hive-2.1.0,通过bin/hive登录hive shell命令行,报错如下: [hadoop@db03 hive-2.1.0]$ bin/hive which: no hbase in ...

  3. angularjs中的单选框绑定数据注意事项

    这里说的是angularjs 1.x 在实现单选框时,我们完全可以用html自带的<input type="radio"/>,但是配合angularjs 中的双向绑定, ...

  4. uboot 下更改NAND的分区 fdisk

    uboot 下更改NAND的分区 fdisk 分类: S5PXX(三星)2012-07-01 18:59 8946人阅读 评论(7) 收藏 举报 flash平台cacheandroid三星null 关 ...

  5. _cs, _ci, or _bin,

    High Performance MySQL, Third Edition by Baron Schwartz, Peter Zaitsev, and Vadim Tkachenko   http:/ ...

  6. 打造自己的 JavaScript 武器库

    原文 https://segmentfault.com/a/1190000011966867 github:https://github.com/proYang/outils 前言 作为战斗在业务一线 ...

  7. 前端 HTML文档 详解

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. Atom编辑器折腾记

    http://blog.csdn.net/bomess/article/category/3202419/2 Atom编辑器折腾记_(1)介绍下载安装 Atom编辑器折腾记_(2)基础了解使用 Ato ...

  9. 使用对象作为hashMap的键,需要覆盖hashcode和equals方法

    1:HashMap可以存放键值对,如果要以对象(自己创建的类等)作为键,实际上是以对象的散列值(以hashCode方法计算得到)作为键.hashCode计算的hash值默认是对象的地址值. 这样就会忽 ...

  10. Hat's Fibonacci

    http://acm.hdu.edu.cn/showproblem.php?pid=1250 大数斐波那契 %08d是什么东西,为什么我用flag交不上,唉,不刷大数了,没劲.暑假再讲. 就是交不上 ...