入侵检测-关于一个简单的堆栈例子

问题描述

关于一个简单的堆栈例子

我在读一本入侵检测技术的书,看到一个简单的堆栈溢出示例,看不懂,请各位大神解释一下是什么意思

解决方案

简单说就是通过程序编写的不严格,使局部变量溢出从而覆盖掉堆栈上的返回值。调用一个函数时,以__stdcall为例,先把参数入栈,然后时返回地址入栈, CPU执行现场跳转到函数中 ,然后是ebp寄存器入栈,随后局部变量和寄存器入栈,不同的编译器可能会有所差别,比如微软CL编译器在处理Debug和Release时是有一些区别的,但大致是相同的,溢出攻击,简单说就是溢出覆盖掉了返回值,这样就可以在函数返回时跳转到hacker指定的一个地址,如果hacker事先发送精心设计好的数据,就可以在远程计算机上执行他想执行的代码,然后反弹一个shell给hacker,hacker就可以在目标主机上上传和执行程序,如果溢出的程序没有权限,hacker还可以利用本地提权漏洞提权得到管理员/root权限,随后以这台主机为跳板,渗透网络中的其他主机!

后话:人类为了抑制溢出攻击,具有划时代意义的成果有:DEP(数据执行保护)、ALSR(地址空间分布随机化)等。简单说DEP通过将指定虚拟内存页面设置为“不可执行”,当然需要硬件支持,所有和Intel x86和amd x86_64兼容的CPU均支持,当CPU执行不可执行页面的代码时,就会出现虚拟内存违规访问,从而程序崩溃退出,在部分Windows系统上,操作系统还会在右下角弹出一个气泡“数据执行保护已终止XXX程序”。绕过DEP在没有ALSR的系统上(比如XP)还是比较简单的,溢出覆盖返回值为VirtualProtect,修改指定内存页面的访问规则即可。ALSR简单说就是将程序载入内存时不载入程序要求载入的地方,而是随机载入(当然操作系统必须遍历程序代码,然后对导入的函数、数据、以及自己的函数调用进行“重定向”),这样函数地址什么的全是随机的了,hacker溢出后就不知道往哪个地址调用VirtualProtect了,非常棘手,360为何对自己的XP甲盾如此有信心?因为XP甲盾通过驱动拦截可执行模块载入并修改了基地址,相当于在XP上实现了ALSR,当然代价是使系统运行效率下降。

解决方案二:

因为你没有基础,所以看不懂。以科普的方式和你说下堆栈溢出的原理。要理解堆栈溢出,最先需要理解,对于x86处理器来说,指令和数据是混合编址的。以及调用函数的过程,我们把返回地址、参数放在堆栈上,而函数局部变量也放在堆栈上。
当你对数组一类的变量越界访问的时候,你写入的数据就会冲掉堆栈里的返回值(堆栈是向下增长的,越界的数组冲掉的是堆栈下面的数据,包括返回地址),一旦这样,函数执行完以后,就不会返回调用的地方了,而是另一个地方。
如果攻击者注入一段可执行机器代码作为数据,同时改变返回地址,那么就会造成这些本来作为数据的内存被当作代码执行,而这些代码如果用于做坏事,那么就会造成破坏。特别是你的进程拥有很高权限的情况下。

解决方案三:

最近在深攻c语言,巧了,这句代码也是c语言的。
首先,你要知道c语言的字符串是用数组承载的,但它(c语言)并不会检查上标,一旦超出定义的内存,就会产生溢出,举个例子:
#include
void main () {
char str[1]="xy";
int i;
for (i=-1;i<10000;i++){
printf("%c",str[i]);
};
}
我故意非法访问内存地址,结果:
v7l/data/data/com.n0n3m4.droidc/files/tempEXTERNAL_STORAGE=/storage/emulated/legacyLOOP_MOUNTPOINT=/mnt/obbLD_LIBRARY_PATH=/vendor/lib:/system/libOLDPWD=/TERMINFO=/data/data/com.n0n3m4.droidc/files/gcc/terminfoANDROID_ASSETS=/system/appBOOTCLASSPATH=/system/framework/core.jar:/system/framework/conscrypt.jar:/system/framework/okhttp.jar:/system/framework/core-junit.jar:/system/framework/bouncycastle.jar:/system/framework/ext.jar:/system/framework/framework.jar:/system/framework/framework2.jar:/system/framework/telephony-common.jar:/system/framework/voip-common.jar:/system/framework/mms-common.jar:/system/framework/android.policy.jar:/system/framework/services.jar:/systSegmentation fault

时间: 2024-08-17 17:02:47

入侵检测-关于一个简单的堆栈例子的相关文章

jquery插件-jquery.bootgrid插件如何实现数据的分页显示,求一个简单地小例子~~

问题描述 jquery.bootgrid插件如何实现数据的分页显示,求一个简单地小例子~~ 感觉它是一个非常不错的数据分页显示框架,希望能够学会,可是在网上没有查到类似的资料,大家有用过的吗? 解决方案 http://www.jquery-bootgrid.com/Examples 解决方案二: 这个我看过了,但是代码不全,有部分不知道怎么写

轻松创建nodejs服务器(1):一个简单nodejs服务器例子_node.js

我们先来实现一个简单的例子,hello world. 似乎每种语言教程的第一节都会讲这个,我们也不例外. 首先我们先创建一个项目目录,目录可自己定义,本案例的目录为 e:/nodetest/. 由于我们要搭建的是服务器,所以我把第一个文件命名为server.js. 在server.js里面输入以下代码: 复制代码 代码如下: var http = require("http");   http.createServer(function(request, response) {    

Python网络爬虫 - 一个简单的爬虫例子

下面我们创建一个真正的爬虫例子 爬取我的博客园个人主页首页的推荐文章列表和地址 scrape_home_articles.py from urllib.request import urlopen from bs4 import BeautifulSoup import re html = urlopen("http://www.cnblogs.com/davidgu") bsObj = BeautifulSoup(html, "html.parser") for

再谈Windows Service - 一个简单的自我例子和部署

我们的服务需要做两件自动的事情,一个是往表格中定时插入数据,另一个就是 往文件中定时插入内容   因此,我们需要做一个工作类,这个类可以是一个抽象类,如下: TaskWorker using System;using System.Collections.Generic;using System.Linq;using System.Text;using log4net; namespace WinConsoleService{    public abstract class TaskWorke

问大伙一个简单的ajax例子中的问题.

问题描述 以下为javascript代码<scriptlanguage="javascript"type="text/javascript">varhttp_request=false;functionmakeRequest(url){http_request=false;if(window.XMLHttpRequest){//Mozilla,Safari,...http_request=newXMLHttpRequest();if(http_reque

Java网络爬虫 - 一个简单的爬虫例子

WikiScraper.java package master.haku.scrape; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import java.net.*; import java.io.*; public class WikiScraper { public static void main(String[] args) { scrapeTopic("/wiki/Python"); } public

轻松修复IDS入侵检测系统故障

有人说网络就好比一片黑暗,到处都充满了极具危险的陷阱,不过冥冥中还好有一个出口可寻.而IDS入侵检测系统,恰好就是给你照明开道的手电筒,它可以帮你发现恶意人所留下的陷阱,从而让你远离被人暗算厄运. 但是世间总有意想不到的事发生, 例如笔者的IDS入侵检测系统出现了故障,无法对计算机进行检测,这样 就会给病毒木马侵入的机会.如果你跟笔者有着 同样的遭遇,不妨利用本文的方案,对其IDS入侵检测进行一下简单维修.小提示:IDS是Intrusion Detection System的缩写,即入侵检测系统

通过实例来分析如何进行入侵检测及防御(上)

本文将详细介绍在开源系统中如何合理.高效地构建主机-网络-分布式入侵检测这样一个纵深防御体系来保证安全,并通过实际的例子来分析如何进行入侵检测及防御. Intrusion Detection System(入侵检测系统)顾名思义,便是对入侵行为的发觉,其通过对http://www.aliyun.com/zixun/aggregation/11991.html">计算机网络或计算机系统中的若干关键点收集信息并对其进行分析,从中发现网络或系统中是否有违反安全策略的行为和被攻击的迹象.通常说来,

搞好服务器的入侵检测

中介交易 SEO诊断 淘宝客 云主机 技术大厅 相信大家都受过病毒煎熬,下面是我从自学编程网转载过来,看了,觉得不错,所以特来献给站长朋友, 入侵检测既是一项非常重要的服务器日常管理工作,也是管理人员必须掌握的技能.下面笔者和大家一道,多点出击.明察秋毫进行服务器的入侵检测. 1.查看服务器状态 部署"性能监控"工具,实施对服务器的实时监控这应该成为服务器的标准配置.笔者向大家推荐NetFox这款服务器监控工具,通过其可以设置"Web/Ping"."FTP