20145303 刘俊谦《网络对抗》shellcode注入&Return-to-libc攻击深入
20145303 刘俊谦《网络对抗》shellcode注入&Return-to-libc攻击深入
Shellcode注入
shellcode实际是一段代码,但却作为数据发送给受攻击服务器,将代码存储到对方的堆栈中,并将堆栈的返回地址利用缓冲区溢出,覆盖成为指向 shellcode 的地址
实验过程:
获取shellcode的C语言代码

下载安装execstack

配置环境
execstack -s pwn5303:将堆栈设为可执行状态
execstack -q pwn5303:查看文件pwn5302的堆栈是否是可执行状态
用more /proc/sys/kernel/randomize_va_space:查看地址随机化的状态
用echo "0" > /proc/sys/kernel/randomize_va_space:关闭地址随机化

构造要注入的payload
用anything+retaddr+nops+shellcode结构构造

注入这段攻击buf:

(先只按一下回车)
打开另外一个终端,用gdb来调试pwn1这个进程

(找到进程号为2375)

设置断点,来查看注入buf的内存地址:

在另外一个终端中按下回车:


(将返回地址改为0xffffd3c1)

(执行shellcode5303,可以看到成功注入)
Return-to-libc 攻击实验
即使栈有不可执行的能力,无法将shellcode放入堆栈中运行,但我们却可以直接让漏洞程序调转到现存的代码来实现我们的攻击。(本次实验所用的是已经载入内存的 libc 库中的 system()函数等)
实验过程:
创建32位C语言可编译的环境
进入32位linux操作环境,进入bash,并关闭地址随机化

在/tmp下创建“retlib.c”文件,并编译设置SET-UID

(此程序有一个缓冲区溢出漏洞:该程序读取badfile文件,将40字节的数据读取到只有12字节大小的buffer,而fread函数不检查边界导致溢出)
在/tmp下创建“getenvaddr.c”文件用于读取环境变量,并编译。在/tmp下创建“exploit.c”文件用于攻击。并获取地址。

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

修改 exploit.c 文件
当时做太快,没来得及截图(很尴尬),事后想起来的时候,已经把练习都做完了。。。
删除 exploit 和 badfile ,重新编译exploit.c,然后先运行攻击程序 exploit,再运行漏洞程序 retlib,可以看到攻击成功,获得了 root 权限

练习:
将/bin/sh重新指向/bin/bas

修改攻击程序

编译运行,可以看到攻击成功

20145303 刘俊谦《网络对抗》shellcode注入&Return-to-libc攻击深入的更多相关文章
- 20145303 刘俊谦《网络对抗》逆向及BOF基础实践
20145303 刘俊谦<网络对抗>逆向及BOF基础实践 1 逆向及Bof基础实践说明 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调 ...
- 20145303刘俊谦 《网络对抗》Exp9 Web安全基础实践
20145303刘俊谦 <网络对抗>Exp9 Web安全基础实践 基础问题回答 1.SQL注入原理,如何防御 SQL注入 就是通过把SQL命令插入到"Web表单递交"或 ...
- 20145303刘俊谦《网络对抗》Exp2 后门原理与实践
20145303刘俊谦<网络对抗>Exp2 后门原理与实践 基础问题回答 1.例举你能想到的一个后门进入到你系统中的可能方式? •在网页上浏览不安全的网站或者下载不安全的软件 •通过发送邮 ...
- 20145303刘俊谦 Exp7 网络欺诈技术防范
20145303刘俊谦 Exp7 网络欺诈技术防范 1.实验后回答问题 (1)通常在什么场景下容易受到DNS spoof攻击 局域网内的攻击,arp入侵攻击和DNS欺骗攻击 公共wifi点上的攻击. ...
- 20145303刘俊谦《网络攻防》Exp4 Msf基础
20145303刘俊谦<网络攻防>Exp4 Msf基础 实验目标 • 掌握metasploit的基本应用方式,掌握常用的三种攻击方式的思路. • 一个主动攻击,如ms08_067: • 一 ...
- 20145303刘俊谦 Exp8 Web基础
20145303刘俊谦 Exp8 Web基础 基础问题回答 1.什么是表单? 表单是一个包含表单元素的区域,表单元素是允许用户在表单中(比如:文本域.下拉列表.单选框.复选框等等)输入信息的元素,表单 ...
- 20145303刘俊谦 《Java程序设计》第4周学习总结
20145303刘俊谦 <Java程序设计>第4周学习总结 教材学习内容总结 1.继承:继承是面向对象的第二大特征,避免多个类间重复定义共同行为.把单独抽取出来的那个类称为父类,其他的多个 ...
- 20145303刘俊谦 Java 代码托管
(20145303刘俊谦) Java 第三周代码托管 这是最近保存下来的代码,今天一起上传的,有很多在代码学习过程中无意识删掉了:
- 20145303刘俊谦 《Java程序设计》第三周学习总结
20145303刘俊谦 <Java程序设计>第三周学习总结 教材学习内容总结 1.类与对象: 类:对现实生活中事物的描述,定义类时用关键词class 对象:这类事物实实在在存在的个体,利用 ...
随机推荐
- Java中list对象的三种遍历方式
1.增强for循环 for(String str : list) {//其内部实质上还是调用了迭代器遍历方式,这种循环方式还有其他限制,不建议使用. System.out.println(str); ...
- Apktool源码解析——第一篇
著名的apktool是android逆向界用的最普遍的一个工具,这个项目的原始地址在这里http://code.google.com/p/android-apktool/,但是你们都懂的在天朝谷歌是无 ...
- LeetCode——Peeking Iterator
Description: Given an Iterator class interface with methods: next() and hasNext(), design and implem ...
- Ubuntu16.04安装Elasticsearch
一.安装工作 wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add - sudo apt-g ...
- Android中集成QQ登陆和QQ好友分享及QQ空间分享
extends : http://blog.csdn.net/arjinmc/article/details/38439957 相关官方文档及下载地址: 如果只用分享和登陆,用lite包就可以,体积小 ...
- for update 和 t.rowid的区别
select * from table_name for update; 和 select t.*, t.rowid from table_name t 的区别 前者会对你查询出来的结果加上锁,而后者 ...
- org.apache.commons.beanutils.BeanUtils的常见用法
import org.apache.commons.beanutils.BeanUtils BeanUtils1. public static void copyProperty(Object bea ...
- NIO之Buffer的clear()、rewind()、flip()方法的区别
Java的NIO中有关Buffer的几种常用方法比如clear,rewind和flip到底有哪些区别.下面给大家这三种方法的源码,方便大家记忆.clear()方法用于写模式,其作用为情况Buffer中 ...
- 170714、springboot编程之多数据源切换(动态)
(1)新建maven java project; 新建一个maven project,取名为:spring-boot-multi-ds (2)在pom.xml添加依赖包: 在pom.xml文件中加入依 ...
- C++ Websites
C++ Websites C++ 推荐网站 1.cprogramming.com 2.cppreference.com 3.cplusplus.com 4.Boost C++ Library