20145226夏艺华《网络对抗》第一次实验拓展:shellcode注入+return-to-libc
20145226夏艺华《网络对抗》第一次实验拓展:shellcode注入+return-to-libc
shellcode注入实践
编写shellcode
编写shellcode已经在之前的实验中搞定啦,这次直接用成品咯~
准备工作,设置环境
基础——Bof攻击防御技术
· 从防止注入的角度来看:在编译时,编译器在每次函数调用前后都加入一定的代码,用来设置和检测堆栈上设置的特定数字,以确认是否有bof攻击发生。
· GCC中的编译器有堆栈保护技术(结合CPU的页面管理机制,通过DEP/NX用来将堆栈内存区设置为不可执行。这样即使是注入的shellcode到堆栈上,也执行不了。)
· 此时就需要手动设置环境,如下所示:
apt-cache search execstack
apt-get install execstack
execstack --help
execstack -s pwn1 //设置堆栈可执行
execstack -q pwn1 //查询文件的堆栈是否可执行

构造要注入的payload
· 在Linux下有两种基本构造攻击buf的方法:retaddr+nop+shellcode和nop+shellcode+retaddr``。因为retaddr在缓冲区的位置是固定的,shellcode可能在它前面或者后面,或者说缓冲区小就把shellcode放后面,缓冲区大就把shellcode放前面。 · 我们还是尝试对于pwn1用nop+shellcode+retaddr`的方法
payload结构为nop+shellcode+retaddr
· 编写payload

需要注意的是:千万不能以
\x0a作为结束。因为\x0a相当于回车,如果回车了下面的操作就gg了。
· 打开一个新终端(终端2),将payload注入到pwn1中。注意一定不能多敲回车。
· 在终端中输入(cat input_shellcode;cat) | ./pwn1

· 保持终端2中程序的运行状态。
终端1中查询pwn1进程的UID

gdb调试,进入对应UID端口


反汇编,设置断点

ps:continue执行的时候,在终端2敲一下回车,终端1中的continue就会暂停在断点处了~
往上查询找到shellcode,同时找到要覆盖的地址



要覆盖的地址(返回地址)是0xffffd32c
重新构造payload

成功啦!

return-to-libc实验
首先需要配置32位linux环境
sudo apt-get update
sudo apt-get install lib32z1 libc6-dev-i386
sudo apt-get install lib32readline-gplv2-dev
这里简直有毒[smile],我安装的时候总是报错,上网查了一下需要先apt-get update还有apt-get upgrade一下,然后吧我就开始在终端搞了,然后吧我嫌弃网速太慢就开了个热点,当时瞟了一眼看到的是17.1M,觉得没啥嘛反正月底了。然后[smile],我就收到了流量超量提醒,用了6G,手动再见。
这个故事告诉我们,开热点做实验很容易手滑。
添加新用户
· 因为最后的是要通过看“是否取得root权限”来判断成功与否的,所以攻击对象不能是root用户,要创建一个新用户。

设置实验背景
· 进入32位环境,关闭地址随机化,设置zsh程序代替/bin/bash



· 在/tmp文件夹下编写漏洞程序retlib

· 在root用户下编译,关闭栈保护机制,并设置SET-UID

在/tmp文件夹下编写getenvaddr和exploit
· 用来读取环境变量的代码getenvaddr:

上图手滑了好几处,正确的代码应该是长这样的:

· 用来攻击的代码:exploit


· 也是在root用户下编译的

获取地址并修改exploit
· 获取BIN_SH地址

· 进入gdb设置断点,调试运行获取system和exit地址


· 将上述三个地址修改入exploit.c文件

最后~攻击,over
先运行exploit再运行retlib就可以可获得root权限,成功!

实验感想
心好累,我的流量一去不复返了。操作中很多细节的地方需要注意,比如多一个少一个回车的问题,就很容易有影响。我第一次做的时候因为直接在pwn1的文件上做了,但是又从头来过,所以就很尴尬的是,pwn1文件已经被修改了,所以我从码云上下载了新的pwn1文件,但是权限有问题,需要先chmod u+x pwn1改一下它的权限之后才可以继续往下做,之前拷贝的老师的虚拟机应该是已经更改过权限的~这个故事告诉我们,做实验的时候还是先拷贝一下比较好,或者来个虚拟机快照之类的也不错~谁知道哪天就崩了呢。
20145226夏艺华《网络对抗》第一次实验拓展:shellcode注入+return-to-libc的更多相关文章
- 20145226夏艺华 网络对抗技术 EXP9 web安全基础实践
20145226夏艺华 网络对抗技术 EXP9 web安全基础实践 !!!免考项目:wannacry病毒分析+防护 一.实验后回答问题 SQL注入攻击原理,如何防御 攻击原理 "SQL注入& ...
- 20145226夏艺华 网络对抗技术EXP8 WEB基础实践
20145226夏艺华 网络对抗技术EXP8 WEB基础实践 实验问题回答 1.什么是表单? 表单在网页中主要负责数据采集功能.一个表单有三个基本组成部分: 表单标签:这里面包含了处理表单数据所用CG ...
- 20145226夏艺华 网络对抗技术 EXP7 网络欺诈技术防范
20145226夏艺华 网络对抗技术 EXP7 网络欺诈技术防范 实践内容 本实践的目标理解常用网络欺诈背后的原理,以提高防范意识,并提出具体防范方法. · 简单应用SET工具建立冒名网站 · ett ...
- 20145226夏艺华 网络对抗技术EXP4 恶意代码分析
20145226夏艺华 网络对抗技术EXP4 恶意代码分析(未完成版) 回答问题 (1)如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么.请设计下你想监控的操作 ...
- 20145226夏艺华 《Java程序设计》实验报告四
实验四 Android开发基础 实验内容 基于Android Studio开发简单的Android应用并部署测试 了解Android组件.布局管理器的使用 掌握Android中事件处理机制 Andro ...
- 20145226夏艺华 Exp6 信息搜集与漏洞扫描
20145226夏艺华 Exp6 信息搜集与漏洞扫描 基础问题回答 哪些组织负责DNS,IP的管理? · 全球根服务器均由美国政府授权的ICANN统一管理,负责全球的域名根服务器.DNS和IP地址管理 ...
- 网络对抗第一次实验——PC平台逆向破解(5)M
网络对抗第一次实验--PC平台逆向破解(5)M 实践一 手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数. 操作步骤: 获取实验用文件pwn1,复制,复制出来的文件改名为20155 ...
- 20145203盖泽双《网络对抗技术》拓展:注入:shellcode及return-into-libc攻击
20145203盖泽双<网络对抗技术>拓展:注入:shellcode及return-into-libc攻击 一.注入:shellcode 1.编写一段用于获取Shellcode的C语言代码 ...
- 20145307陈俊达《网络对抗》shellcode注入&return to libc
20145307陈俊达<网络对抗>shellcode注入 Shellcode注入 基础知识 Shellcode实际是一段代码,但却作为数据发送给受攻击服务器,将代码存储到对方的堆栈中,并将 ...
随机推荐
- January 20 2017 Week 3 Friday
I am a slow walker, but I never walk backwards. 我走得很慢,但我从来不会后退. In the past years, I walked very slo ...
- plus.webview.create mui.openWindow区别是什么呢
create 只是创建这个webview,但是不显示,而且同一个页面.同一个id你甚至能重复创建多个(严重消耗性能,作死...),其实mui里面已经封装了这个方法 mui.preload(),并且 ...
- PHP面向对象(OOP)编程入门教程链接
PHP官方学习OOP: http://php.net/manual/zh/oop5.intro.php 从其他博主学习:(以下链接来源: http://blog.snsgou.com/post-41. ...
- 分享一个SqliteHelper类
分享一个SqliteHelper类 SQLite作为一个本地文件数据库相当好用,小巧.快速.支持事务.关系型,甚至可以运行在Android上.在很久以前的一个项目中,我们用过它来将接收到的数据做本地统 ...
- SpringMVC WEB应用上传照片的实现
使用是SpringMVC+Hibernate搭建的WEB应用,使用jsp写的前端页面. 如何将文件上传到服务器呢?我这里使用的是Multipart的形式将文件上传. 这里有两大步:一是配置multip ...
- 编码 Unicode utf-8
编码的发展史: 一开始计算机只在美国使用.8位的字节可以组合出256种不同的状态.他们将0到32种状态规定为”控制码“,后来又用其中32号以后的状态表示空格.标点符号.数字和大小写字母.这样一直编到了 ...
- 十六、详述 IntelliJ IDEA 创建 Maven 项目及设置 java 源目录的方法
Maven 是一个优秀的项目管理工具,它为我们提供了一个构建完整的生命周期框架.现在,就让我们一起看看如何利用 IntelliJ IDEA 快速的创建 Maven 项目吧! 如上图所示,点击Creat ...
- java字符串类型和时间类型的转换
类型转换 //reqeust.getParameter获取字符串直接赋值 1 public static Date date(String date_str) { try { Calendar zca ...
- careercup-扩展性和存储限制10.6
题目 你有10亿个url,每个url对应一个非常大的网页.你怎么检测重复的网页? 解答 网页大,数量多,要把它们载入内存是不现实的. 因此我们需要一个更简短的方式来表示这些网页.而hash表正是干这事 ...
- LeetCode27.移除元素 JavaScript
给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成 ...