软件漏洞分析入门2

struts2漏洞分析(S2-057为例) 0x00 前言 利用空闲时间分析了一下struts2框架的历史高危漏洞,发现除了S2-052(XStream反序列化漏洞)以外,其他漏洞的本质都是由于框架执行了恶意用户传进来的OGNL表达式,从而造成远程代码执行。只不过需要精心构造不同的OGNL代码而已。 发生OGNL表达式注入的点也是多种多样,如:请求参数名、请求参数值、content-type请求头、文件上传时的filename值、url地址... 阅读详情
导读:
  2_初级栈溢出_A
  To be the apostrophe which changed “Impossible” into “I’m possible”
  —— failwest
  今夜月明星稀
  本想来点大道理申明下研究思路啥的,看到大家的热情期待,稍微调整一下讲课的顺序。从今天开始,将用3~4次给大家做一下栈溢出的扫盲。
  栈溢出的文章网上还是有不少的(其实优秀的也就两三篇),原理也不难,读过基本上就能够明白是怎么回事。本次讲解将主要集中在动手调试方面,更加着重实践。
  经过这3~4次的栈溢出扫盲,我们的目标是:
  领会栈溢出攻击的基本原理
  能够动手调试简易的栈溢出漏洞程序,并能够利用漏洞执行任意代码(最简易的shellcode)
  最主要的目的其实是激发大家的学习兴趣——寡人求学若干年,深知没有兴趣是决计没有办法学出名堂来的。
  本节课的基本功要求是:会C语言就行(大概能编水仙花数的水平)
  我会尽量用最最傻瓜的文字来阐述这些内存中的二进制概念。为了避免一开始涉及太多枯燥的基础知识让您失去了兴趣,我并不提倡从汇编和寄存器开始,也不想用函数和栈开头。我准备用一个自己设计的小例子开始讲解,之后我会以这个例子为基础,逐步加码,让它变得越来越像真实的漏洞攻击。
  您需要的就是每天晚上看一篇帖子,然后用十分钟时间照猫画虎的在编译器里把例子跟着走一遍,坚持一个星期之后您就会发现世界真奇妙了。
  不懂汇编不是拒绝这门迷人技术的理由——今天的课程就不涉及汇编——并且以后遇到会随时讲解滴
  所以如果你懂C语言的话,不许不学,不许说学不会,也不许说难,哈哈
  开场白多说了几句,下面是正题。今天我们来一起研究一段暴简单无比的C语言小程序,看看编程中如果不小心出现数组越界将会出现哪些问题,直到这个单元结束您能够用这些数组越界漏洞控制远程主机。
  #include
  #define PASSWORD "1234567"
  int verify_password (char *password)
  {
  int authenticated;
  char buffer[8]; // add local buff to be overflowed
  authenticated=strcmp(password,PASSWORD);
  strcpy(buffer,password); //over flowed here!
  return authenticated;
  }
  main()
  {
  int valid_flag=0;
  char password[1024];
  while(1)
  {
  printf("please input password: ");
  scanf("%s",password);
  valid_flag = verify_password(password);
  if(valid_flag)
  {
  printf("incorrect password!/n/n");
  }
  else
  {
  printf("Congratulation! You have passed the verification!/n");
  break;
  }
  }
  }
  对于这几行乱简单无比的程序,我还是稍作解释。
  程序运行后将提示输入密码
  用户输入的密码将被程序与宏定义中的“1234567”比较
  密码错误,提示验证错误,并提示用户重新输入
  密码正确,提示正确,程序退出(真够傻瓜的语言)
  所谓的漏洞在于verify_password()函数中的strcpy(buffer,password)调用。
  由于程序将把用户输入的字符串原封不动的复制到verify_password函数的局部数组char buffer[8]中,但用户的字符串可能大于8个字符。当用户输入大于8个字符的缓冲区尺寸时,缓冲区就会被撑暴——即所谓的缓冲区溢出漏洞。
  缓冲区给撑暴了又怎么样?大不了程序崩溃么,有什么了不起!
  此话不然,如果只是导致程序崩溃就不用我在这里浪费大家时间了。根据缓冲区溢出发生的具体情况,巧妙的填充缓冲区不但可以避免崩溃,还能影响到程序的执行流程,甚至让程序去执行缓冲区里的代码。
  今天我们先玩一个最简单的。函数verify_password()里边申请了两个局部变量
  int authenticated;
  char buffer[8];
  当verify_password被调用时,系统会给它分配一片连续的内存空间,这两个变量就分布在那里(实际上就叫函数栈帧,我们后面会详细讲解),如下图
  
  
  
  变量和变量紧紧的挨着。为什么紧挨着?当然不是他俩关系好,省空间啊,好傻瓜的问题,笑:)
  用户输入的字符串将拷贝进buffer[8],从示意图中可以看到,如果我们输入的字符超过7个(注意有串截断符也算一个),那么超出的部分将破坏掉与它紧邻着的authenticated变量的内容!
  在复习一下程序,authenticated变量实际上是一个标志变量,其值将决定着程序进入错误重输的流程(非0)还是密码正确的流程(0)。
  下面是比较有趣的部分:
  当密码不是宏定义的1234567时,字符串比较将返回1或-1(这里只讨论1,结尾的时候会谈下-1的情况)
  由于intel是所谓的大顶机,其实就是内存中的数据按照4字节(DWORD)逆序存储,所以authenticated为1时,内存中存的是0x01000000
  如果我们输入包含8个字符的错误密码,如“qqqqqqqq”,那么字符串截断符0x00将写入authenticated变量
  这溢出数组的一个字节0x00将恰好把逆序存放的authenticated变量改为0x00000000。
  函数返回,main函数中一看authenticated是0,就会欢天喜地的告诉你,oh yeah 密码正确!这样,我们就用错误的密码得到了正确密码的运行效果
  下面用5分钟实验一下这里的分析吧。将代码用VC6.0编译链接,生成可执行文件。注意,是VC6.0或者更早的编译器,不是7.0,不是8.0,不是.net,不是VS2003,不是VS2005。为什么,其实不是高级的编译器不能搞,是比较难搞,它们有特殊的GS编译选项,为了不给咱们扫盲班增加负担,所以暂时飘过,用6.0!
  按照程序的设计思路,只有输入了正确的密码”1234567”之后才能通过验证。程序运行情况如下:
  
  
  
  
  
  要是输入几十个字符的长串,应该会崩溃。多少个字符会崩溃?为什么?卖个关子,下节课慢慢讲。现在来个8个字符的密码试下:
  
  
  
  注意为什么01234567不行?因为字符串大小的比较是按字典序来的,所以这个串小于“1234567”,authenticated的值是-1,在内存里将按照补码存负数,所以实际村的不是0x01000000而是0xffffffff。那么字符串截断后符0x00淹没后,变成0x00ffffff,还是非0,所以没有进入正确分支。
  总结一下,由于编程的粗心,有可能造成程序中出现缓冲区溢出的缺陷。
  这种缺陷大多数情况下会导致崩溃,但是结合内存中的具体情况,如果精心构造缓冲区的话,是有可能让程序作出设计人员根本意向不到的事情的
  本节只是用一个字节淹没了邻接变量,导致了程序进入密码正确的处理流程,使设计的验证功能失效。
  其实作为cracker,大家可能会说这有什么难的,我可以说出一堆方法做到这一点:
  直接查看PE,找出宏定义中的密码值,得到正确密码
  反汇编PE,找到爆破点,JZ JNZ的或者TEST EAX,EAX变XOR EAX,EAX的在分支处改它一个字节
  ……
  但是今天介绍的这种方法与crack的方法有一个非常重要的区别,非常非常重要~~
  就是~~~我们是在程序允许的情况下,用合法的输入数据(对于程序来说)得到了非法的执行效果(对于程序员来说)——这是hack与crack之间的一个重要区别,因为大多数情况下hack是没有办法直接修改PE的,他们只能通过影响输入来影响程序的流程,这将使hack受到很多限制,从某种程度上讲也更加困难。这个区别将在后面几讲中得到深化,并被我不断强调。
  好了,今天的扫盲课程暂时结束,作为栈溢出的开场白,希望这个自制的漏洞程序能够给您带来一点点帮助。
  顺便预告一下下一讲的内容:
  初级溢出B:将讲述函数调用时怎样和系统栈配合的,然后在本讲的基础上淹没栈帧寄存器,直接改变程序流程
  初级溢出C:手把手的教你写一段超简单的shellcode(可执行的机器代码),并把这段代码做为密码输入,最后引导程序跳去执行这段代码
  下次再见:)
软件供应链安全——组件漏洞的治理 前 言 漏洞库:漏洞数据库,主要指大型的、公开的、业界公认的漏洞数据库。比如NVD、CNVD、exploit-db等。 CVE:给每个漏洞确定唯一名称,通过CVE可以帮助安全人员快速在漏洞数据库中找到相应的漏洞信息。 CPE:漏洞所关联的产品、版本、依赖路径或命名规范等信息,通过CPE信息,可以知道某个CVE所影响的组件版本和所在产品的依赖路径。 CWE:漏洞的类型,比如某3个组件都存在SQL注入漏洞,这3个漏洞的CVE并不相同,但CWE都可描述为CWE-89 SQL... 阅读详情

相关推荐

DL-FWI基础入门培训视频学习1、2

DL-FWI基础知识

shengMio的博客 711

软件漏洞分析入门_初级栈溢出_修改程序流程(2)

修改程序流程环境工具存在漏洞程序代码流程分析键盘上可见字符输入的限制成功效果参考 环境工具 VC++6.0 ultrEdit OD 存在漏洞程序代码 #include <stdio.h> #define PASSWORD "1234567" int verify_password (char *password) { int authenticated; char buffer[8]; authenticated=strcmp(password,P

个人笔记 298

Frida实战:SSL Pinning绕过技术全解析

本文详细解析了如何使用Frida工具绕过SSL Pinning技术,包括环境搭建、四种实战绕过方案及常见问题排查指南。通过具体代码示例和实战经验,帮助安全研究人员快速掌握SSL Pinning绕过技术,适用于金融类App的安全测试场景。

weixin_42530732的博客 188

软件漏洞概述

文章目录一、软件漏洞的概念1、信息安全漏洞简述2、软件漏洞3、软件漏洞概念4、软件漏洞的成因分析二、软件漏洞标准化管理1、软件漏洞分类2、软件漏洞分级3、安全漏洞管理规范 一、软件漏洞的概念 1、信息安全漏洞简述 信息安全漏洞是信息安风险的主要根源之一,是网络攻防对抗中的主要目标。由于信息系统漏洞的危害性、多样性和广泛性,在当前网路空间博弈中,漏洞作为一种战略资源被各方所积极关注。 对于信息安全漏洞的不同认识有以下三个主要的共同特点: 漏洞是信息系统自身的弱点或缺陷。 漏洞存在环境通常是特定的。 漏洞具有

W0ngk,一个安全菜鸡,一直在模仿,尚未有超越。 7813

GitHub漏洞挖掘与CVE提交实战指南:从发现到编号的完整链路

GitHub开源项目是现代软件供应链的核心节点,其安全漏洞直接影响全球数百万系统的机密性、完整性与可用性。理解漏洞本质需回归CIA三元组原理,而真实可利用性依赖对协议解析层、配置加载区和依赖传递链等高危模块的精准识别。技术价值在于将模糊的‘可疑逻辑’转化为符合MITRE CVE标准的可验证事件,支撑SDL流程、威胁情报建设与供应链风险管理。典型应用场景包括甲方安全工程师推动供应商修复、独立研究者参与负责任披露,以及DevSecOps团队构建自动化风险坐标系。本文基于27次CVE提交经验,聚焦GitHub代码

weixin_33646989的博客 651

版图提取的spice网表中参数含义及二级效应STI/WPE

寄生电阻、寄生电容可以从版图提出的.sp文件中看, ad area of drain 面积 as area of source pd perimeter of drain 周长,PS PD周长都不计算与栅极接触的部分 ps perimeter of source nrd 漏扩散区等效方块数 nrs 源扩散区等效方块数 sa ...

qq_40007892的博客 6554

软件漏洞分析简述

软件漏洞 1.1漏洞的定义 漏洞,也叫脆弱性(英语:Vulnerability),是指计算机系统安全方面的缺陷,使得系统或其应用数据的保密性、完整性、可用性、访问控制等面临威胁。 漏洞在各时间阶段的名称 根据是否公开分为:未公开漏洞、已公开漏洞 根据漏洞是否发现分为:未知漏洞、已知漏洞 根据补丁和利用价值是否发布分为:0day漏洞、1day漏洞、历史漏洞 图1 漏洞在各时间阶段的名称 漏洞的特...

fufu_good的博客 8万+

姿态传感器/陀螺仪之BMI270应用原理图设计

BMI270是一款由博世(Bosch)推出的高性能、超低功耗惯性测量单元(IMU),专为可穿戴设备、智能设备及物联网应用设计。

corlin6688的博客 2864

软件漏洞分析入门

原帖链接:http://bbs.pediy.com/showthread.php?t=56445  1 引子 To be the apostrophe which changed “Impossible” into “I’m possible” —— failwest  凉风有讯,秋月无边。 您是否梦想过能够像电影上演的那样黑进任意一台机器远程操控?您的梦想是否曾经被书店里边满架子的反黑,

foolzhang的专栏 8684

DeepSeek邮件管理全攻略

DeepSeek邮件助手是一款高效的邮件处理工具,提供智能分类、撰写、回复和任务自动化功能。通过API调用或多智能体系统,它能自动分类邮件意图、生成专业回复并优化邮件内容。核心功能包括智能过滤、会议安排和任务提醒,支持与主流邮箱服务集成。提供精准提示词模板,帮助用户快速生成得体邮件,提升工作效率。适合个人和企业使用,通过简单配置即可实现邮件处理自动化。

Genio_Wang的博客 181

SAP 权限配置(复合角色)

复合角色创建步骤:业务场景:通常单一角色权限颗粒度划分比较细,当需要分配单一角色权限A、B(多个单一角色)给某账号用户Y时,可以先建立一个复合角色C,将A、B绑定到复合角色C中,再将角色C分配给账号Y即完成权限配置。 业务模拟: 1、PFCG创建复合角色: 2、在角色页面添加子角色 在角色分页内添加子角色,点击“菜单”分页中的“读菜单”即可导入子角色中的菜单: 3、将用户分配给...

willieyuan的博客 7087

网络安全漏洞与修复 网络安全软件漏洞

给小伙伴们的意见是想清楚,自学网络安全没有捷径,相比而言系统的网络安全是最节省成本的方式,因为能够帮你节省大量的时间和精力成本。坚持住,既然已经走到这条路上,虽然前途看似困难重重,只要咬牙坚持,最终会收到你想要的效果。黑客工具&SRC技术文档&PDF书籍&web安全等(可分享)网络安全产业就像一个江湖,各色人等聚集。

Hacker_Nightrain的博客 1833

图像处理系列——直方图之直方图规定化(Histogram Specification)

直方图规定化也叫直方图匹配(Histogram Matching),让原图像的像素分布与规定图像的像素分布保持一致。直方图规定化比直方图均衡化更加灵活,算是直方图均衡的变种。常用于图片风格一致性的自动处理,能有效的改善图像的整体或局部的特征,广泛运用在图像增强处理中。

nanke_yh的博客 4595

软件安全漏洞分析与发现 复习笔记

略。查ppt。修正:上图中的语句2 的可到达语句不包括4。定义集合我们先确定每个语句的 Gen 和 Kill 集合:路径分析接下来我们分析从入口到 [9] 的所有路径:在每个路径上,我们计算每个语句的 In 和 Out 集合。路径1: [0] -> [1] -> [2] -> [3] -> [4] -> [5] -> [9]In(0) = {}

skysys的研究小屋 1695

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

【漏洞分析】DeDeCMS v5.7 SP2 正式版前台任意用户密码修改漏洞

织梦内容管理系统(DedeCms)以简单、实用、开源而闻名,是国内最知名的 PHP 开源网站管理系统,也是使用用户最多的 PHP 类 CMS 系统,在经历多年的发展,目前的版本无论在功能,还是在易用性方面,都有了长足的发展和进步,DedeCms 免费版的主要目标用户锁定在个人站长,功能更专注于个人网站或中小型门户的构建,当然也不乏有企业用户和学校等在使用该系统。2018 年 1 月 10 日,锦行信息安全公众号公开了一个关于DeDeCMS前台任意用户密码修改漏洞的细节。

qq_44655084的博客 2821

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

软件漏洞及检测技术概述

首席安全官Plus是一个围绕“大数据、云计算和人工智能”高技术领域,发布相关网络安全前沿技术和产业趋势的平台,努力打造“有特色、高水平、国际化”的网络安全思想高地。如投稿,请发送到:csoplus@163.com。 软件的质量是软件产品的生命线,其质量问题的根源在于软件设计的不合理以及...

网络空间发展与战略研究 3031

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

[javaweb]strut2-001漏洞分析

Python微信订餐小程序课程视频 https://edu.youkuaiyun.com/course/detail/36074 Python实战量化交易理财系统 https://edu.youkuaiyun.com/course/detail/35475 Strut2-001 漏洞描述 框架解析JSP页面标签时会对用户输入的Value值获取,在获取对应的Value值中递归解析%{、}造成了二次解析,最终触发表达式注入漏洞,执行任意代码 影响版本 2.0.1 ~ 2.0.8 漏洞分析 环境搭建了好久。。。最后看到一篇http

m0_56069948的博客 2688

Struts2 013 漏洞分析

继参数和值之后,出现includeParams相关漏洞。Struts2 是一个基于 Java 的开发框架,用于构建 Web 应用程序。它提供了一组易于使用的组件和标签,可以帮助开发人员创建和管理Web 应用程序。Struts2 帮助开发人员集中精力在业务逻辑方面而不是底层基础架构,简化了 Web 应用程序的开发过程。在Struts2 中,使用MVC(模型-视图-控制器)模式来组织应用程序的代码。它是一种轻量级的框架,可以与其他框架和技术集成。Struts2 是一个基于 Java。

王嘟嘟的博客 1729

软件漏洞自动化利用,零基础入门到精通,收藏这篇就够了_漏洞利用

近年来软件漏洞数目急剧增加,漏洞危害也引起业界广泛关注. 准确、高效、快速地编写出漏洞利用代码是漏洞危害性评估和漏洞修复的关键. 当前漏洞利用代码主要依赖人工手动分析编写,效率较低. 因此,如何实现自动化的漏洞利用代码生成是该领域研究的热点和难点.

wananxuexihu的博客 1183

Struts2漏洞分析与复现合集

原理:该漏洞因用户提交表单数据并且验证失败时,后端会将用户之前提交的参数值使用OGNL表达式%{value}进行解析,然后重新填充到对应的表单数据中。如注册或登录页面,提交失败后一般会默认返回之前提交的数据,由于后端使用%{value}对提交的数据执行了一次OGNL 表达式解析,所以可以直接构造 Payload进行命令执行。 漏洞环境搭建 https://github.com/vulhub/vulhub/tree/master/struts2/s2-001 运行以下命令进行设置 .............

未完成的歌~的博客 9262

RIOT 构建系统 CFLAGS 空格处理实战:Makefile、增量重建与 Docker 三种场景全解析

RIOT 是面向 IoT 的开源操作系统,其基于 GNU Make 的构建系统允许开发者通过 `CFLAGS` 向编译过程注入宏定义与编译选项。当这些值本身包含空格(例如传递一个带空格的字符串宏)时,Makefile 解析、增量重建触发以及 Docker 容器环境传递都会出现边界问题。本文以 [tests/build_system/cflags_spaces/README.md](https://

gitblog_00930的博客 1050

软件安全备考--典型漏洞机理分析

软件安全复习–典型漏洞机理分析 典型的软件漏洞 1.缓冲区溢出 2.注入类漏洞 - SQL注入 - 操作系统命令注入 - web脚本语言注入 - soap注入 3.权限类漏洞 缓存区溢出漏洞 缓冲区是一块连续的计算机内存区域,可保存相同数据类型的多个实例。缓冲区可以是堆栈(自动变量)、堆(动态内存)和静态数据区(全局或静态)。溢出指数据被添加到分配给该缓冲区的内存块之外。缓冲区溢出是最常见的程序缺陷。 缓存溢出(或译为缓冲溢出)为黑客最为常用的攻击手段之一,蠕虫病毒对操作系统高危漏洞

qq_43967212的博客 1022

逆向赋能安全:恶意软件分析、漏洞挖掘与攻防对抗完整讲解

本文详细阐述逆向工程技术如何赋能各类安全研究工作,内容涵盖恶意样本分析、程序漏洞挖掘、攻防对抗实战应用,讲解底层原理、分析思路、实战技巧,整合全套知识框架,让读者清晰理解各项技术的内在联系与学习侧重点。 写一篇关于逆向工程的文章 推荐一些逆向工程的学习资源 逆向工程在网络安全领域的应用有哪些?

shandongjiushen的博客 1176
上一篇: 软件漏洞分析入门
下一篇: 软件漏洞分析入门3
linkboy2004
博客等级 码龄22年 276粉丝 292原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值