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. (转)The remote certificate is invalid according to the validation procedure

    If you get “The remote certificate is invalid according to the validation procedure” exception while ...

  2. 8、导航:Nav

    1.导航视图   angular2 中的是视图是显示在<router-outlet></router-outlet>里的同时他要依赖于 directives:[ ROUTER_ ...

  3. ASP.NET MVC4 新手入门教程之九 ---9.查询详情和删除方法

    在本教程的这一部分,您会检查自动生成的Details和Delete方法. 检查详细信息和删除方法 打开Movie控制器并检查的Details的方法. public ActionResult Detai ...

  4. Redis - 数据类型常用命令

    5种数据类型都离不开key,先列出key的相关命令. KEY相关操作 列出符合规则的KEYS KEYS pattern pattern支持glob风格的通配符格式,即: ? 一个字符 * 任意多个字符 ...

  5. logback.xml简单配置

    感觉配置的没问题,但是控制台就是不输出日志,后来发现是jar的问题. 依赖包: 注意依赖包,没有其他,只有下面3个,因为Jar包的问题,浪费了很长时间 <dependency> <g ...

  6. VC++ 崩溃处理以及打印调用堆栈

    title: VC++ 崩溃处理以及打印调用堆栈 tags: [VC++, 结构化异常处理, 崩溃日志记录] date: 2018-08-28 20:59:54 categories: windows ...

  7. 理解mouseover,mouseout,mouseenter,mouseleave

    mouseover定义和用法 当鼠标指针位于元素上方时,会发生 mouseover 事件. 该事件大多数时候会与 mouseout 事件一起使用. mouseover() 方法触发 mouseover ...

  8. type="button"和type="submit"的区别

    type="button" ,"submit" 的区别(转) Submit是专门用于提交表单的Button,与Button的区别主要有两点: type=button 就单纯是按钮功能   type=s ...

  9. 如何解决git fatal: refusing to merge unrelated histories

    我在Github新建一个仓库,写了License,然后把本地一个写了很久仓库上传. 先pull,因为两个仓库不同,发现refusing to merge unrelated histories,无法p ...

  10. 小小的js

    //安全登陆不允许iframe嵌入 if (window.top !== window.self) { window.top.location = window.location; } 使用filte ...