20145223 杨梦云 《网络对抗》shellcode实验+return-to-libc实验

shellcode注入实践

Shellcode基础知识

·Shellcode实际是一段代码(也可以是填充数据),是用来发送到服务器利用特定漏洞的代码,一般可以获取权限

·Shellcode一般是作为数据发送给受攻击服务器的。 Shellcode是溢出程序和蠕虫病毒的核心,一般会和系统里的漏洞相关,因此shellcode只对没有打补丁的主机有用武之地。

·漏洞利用中最关键的是Shellcode的编写。由于漏洞发现者在漏洞发现之初并不会给出完整Shellcode,因此掌握Shellcode编写技术就显得尤为重要。

实践过程:

(一)实践中的shellcode代码如下:

(二)设置环境

为了防止注入,程序在编译时,编译器在每次函数调用前后都会加入一定的代码,用来设置和检测堆栈上设置的特定数字,以确认是否有bof攻击发生。同时GCC中的编译器有堆栈保护技术也会适使得注入到堆栈上的shellcode无法执行而达到保护的目的。因此要想实验成功进行,须对环境进行手工设置。(x32环境)

apt-cache search execstack
apt-get install execstack

execstack --help

/proc/sys/kernel/randomize_va_space=0  //关闭地址随机化
execstack -s pwn1 //设置堆栈可执行
execstack -q pwn1 //查询文件的堆栈是否可执行

(三)输入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(最后一个字符不能是\x0a,因为相当于回车,这样接下来的实验就做不了)

(四)重新打开一个新的终端窗口注入这段攻击buf(但是输入指令回车后先不要回车,之前因为手贱不小心点了回车以至于做了好几次才成功= =。)

(cat input_shellcode;cat) | ./5223pwn1

(五)再打开第一个终端,查找进程5223pwn1的id号:

可以看见进程ID是3937,打开gdb进行调试,foo反汇编:

(六)在ret函数这里设置断点,查看注入buf的内存地址,分析之前猜测的返回地址位置是否正确以及shellcode的地址

最后可以看到应该将地址修改为0xffffd310

(七)将返回地址修改为重新注入,失败了,重复之前的步骤,查看进程id,进行gdb调试:

(八)重新注入,成功:

Retuen-to-libc实践

基础知识:

·缓冲区溢出攻击的原理使得我们在实施时通常首先要将恶意代码注入目标漏洞程序中,通常攻击者需要将此攻击代码置于堆栈中。于是为了阻止此种类型的攻击,缓冲区溢出防御机制采用了非执行堆栈技术,这种技术使得堆栈上的恶意代码不可执行。

·为了避开非执行堆栈技术,出现了 return-into-libc 攻击,这种攻击是缓冲区溢出的变体,它的实施不需要栈就可以执行,甚至不需要注入新的代码,取而代之的是重用漏洞程序中已有的函数完成攻击,让漏洞程序跳转到已有的代码序列。实施攻击时攻击者仍然可以用恶意代码的地址来覆盖程序函数调用的返回地址,并传递重新设定好的参数使其能够按攻击者的期望运行。

实践过程:

(一)首先在kali虚拟机上添加一个新的用户:

(二)环境需要32位,因此需要事先进行安装,安装好后进入32位环境,进入bash,关闭地址随机化,并且把/bin/sh指向zsh:

(三)漏洞程序代码如下,并且将c文件保存在/tmp目录下:

(四)编译代码,fno-stack-protector关闭阻止缓冲区溢出的栈保护机制,并设置给该程序的所有者以suid权限,可以像root用户一样操作:

(五)getenvaddr.c代码如下,该程序用于读取环境变量:

(六)exploit程序代码如下,通过修改该程序里的地址,结合5223retlib程序产生漏洞来实现攻击:

(七)获取 BIN_SH 地址为0xffffdf2a

(八)在root下编译运行程序:

(九)gdb调试exploit程序获取systemexit地址,分别为0xf7e338500xf7e276c0

(十)将上述获取到的三个地址对exploit程序进行修改:

(十一)成功:

20145223 杨梦云 《网络对抗》shellcode实验+return-to-libc实验的更多相关文章

  1. 20145223 杨梦云 《网络对抗》 Web安全基础实践

    20145223 杨梦云 <网络对抗> Web安全基础实践 1.实验后回答问题 (1)SQL注入攻击原理,如何防御 **原理**:SQL注入攻击是通过构建特殊的输入作为参数传入web应用程 ...

  2. 20145223 杨梦云 《网络对抗》 Web基础

    20145223 杨梦云 <网络对抗> Web基础 1.实验后回答问题 (1)什么是表单 表单在网页中主要负责数据采集功能.一个表单有三个基本组成部分:(1) 表单标签:这里面包含了处理表 ...

  3. 20145223 杨梦云 《网络对抗》 MSF基础应用

    20145223 杨梦云 <网路对抗> MSF基础应用 1.实验后回答问题:用自己的话解释什么是exploit,payload,encode (1)百度百科上说Exploit 的英文意思就 ...

  4. 20155313 杨瀚 《网络对抗技术》实验九 Web安全基础

    20155313 杨瀚 <网络对抗技术>实验九 Web安全基础 一.实验目的 本实践的目标理解常用网络攻击技术的基本原理.Webgoat实践下相关实验. 二.基础问题回答 1.SQL注入攻 ...

  5. 20155313 杨瀚 《网络对抗技术》实验八 Web基础

    20155313 杨瀚 <网络对抗技术>实验八 Web基础 一.实验目的 1.Web前端HTML 能正常安装.启停Apache.理解HTML,理解表单,理解GET与POST方法,编写一个含 ...

  6. 20155313 杨瀚 《网络对抗技术》实验五 MSF基础应用

    20155313 杨瀚 <网络对抗技术>实验五 MSF基础应用 一.实验目的 本实验目标是掌握metasploit的基本应用方式,重点常用的三种攻击方式的思路.具体需要完成: 1.一个主动 ...

  7. 2018-2019-2 20165232《网络对抗技术》Exp1 缓冲区溢出实验

    2018-2019-2 20165232<网络对抗技术>Exp1 缓冲区溢出实验 实验点1:逆向及Bof基础实践 实践任务 用一个pwn1文件. 该程序正常执行流程是:main调用foo函 ...

  8. 2018-2019-2 20165225《网络对抗技术》Exp1 缓冲区溢出实验

    2018-2019-2 20165225<网络对抗技术>Exp1 缓冲区溢出实验 声明 虽然老师在邮箱中要求要把虚拟机名改为个人名字缩写,但是我的kali好像不是很听话...重启数次也没用 ...

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

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

随机推荐

  1. VS快捷键设置无效

    使用Resharper 后发现有些快捷键冲突,但是在工具-选项-键盘 设置后不管用,后来发现有一个移除功能,即移走原来的快捷键; 先选择下拉框1中自己用不到的快捷键,然后移除掉; 备注: 注意观察 快 ...

  2. jquery获取子元素

    Jquery获取子元素的方法有2种,分别是children()方法和find()方法. 下面我们分别来使用这两种方法,看看它们有何差异. children()方法:获取该元素下的直接子集元素 find ...

  3. c# winfrom 页面的enter变为tab 功能使用 在特定的按钮里面如何继续当enter使用求大神帮忙解答一下 !!急

    enter 当tab  键用 已经实现  :例如按回车的时候切换一直走 ,走到一个按钮如何让回车键在这个按钮的时候还是执行enter按钮的功能而不是tab   求大神解答一下, 目前页面tab功能改为 ...

  4. Jquery判断checkbox选中状态

    jQuery v3.3.1 <input type="checkbox" id="ch"> 判断 $('#ch').is(':checked'); ...

  5. 反编译DLL文件

    我们平时在工作中经常会遇到一些已经被编译后的DLL,而且更加麻烦是没有源代码可以进行修改,只能针对这个DLL的文件进行修改才能得到我们想要的结果:本文将通过一个实例来演示如果完成一个简单的修改;我们将 ...

  6. Execution default-resources of goal org.apache.maven.plugins:maven-resources-plugin:2.6:resources failed: Unable to load the mojo 'resources' (or one of its required components)

    1.异常提示: Description Resource Path Location Type Execution default-resources of goal org.apache.maven ...

  7. 【免费公测】阿里云SSD云盘,不仅仅是IO提速10倍

    今天很高兴为大家介绍最新的ECS存储服务:SSD云盘. SSD云盘基于全SSD存储介质.利用阿里云飞天分布式存储技术,提供数据可靠性99.999%的高性能存储:该产品具备以下特点: l  高性能:单个 ...

  8. redis 在linux安装

    转自:http://futeng.iteye.com/blog/2071867 下载 官网下载 安装 tar zxvf redis-2.8.9.tar.gz cd redis-2.8.9 #直接mak ...

  9. shell单引号双引号详解

    linux shell中的单引号与双引号的区别(看完就不会有引号的疑问了) " "(双引号)与 ' '(单引号)的区别    你在shell prompt(shell 提示)后面敲 ...

  10. Python学习---模版/包的概念

    1.1. 模块/包的概念 在Python中,一个.py文件就称之为一个模块(Module) 模块一共三种: python标准库 第三方模块 应用程序自定义模块 模块的使用:模块是用来组织函数的 解释器 ...