- ============================================================================
- Breaking the Windows Server 2003 SP2 Stack
- by Nikolaos Rangos aka kcope/eliteb0y in 2008 / kcope2(at)googlemail.com
- ============================================================================
- In this tutorial you can learn how to circumvent the
- stack protection of Windows Server 2003.
- It has to be said that the technique presented in this paper
- works on Service Pack 2 of the Windows Server 2003 Operating System.
- I don't claim that the information in this paper is something new.
- The described technique has been documented in the paper entitled
- "Advanced exploitation in exec-shield (Fedora Core case study)"
- by "dong-hun you" [1]. This paper describes circumventing the
- exec-shield protections of Linux systems but can also be applied
- to Windows Server systems.
- Normal exploitation of Windows stack based overflows is done by
- either redirecting EIP (the instruction pointer) to an attacker
- defined return address jumping onto the stack or through the
- SEH handler (Structured Exception Handler) method where the
- SEH chain is overwritten.
- Both exploitation methods only seem to work on Windows (Server) 2000
- systems or even older Windows Operating systems.
- The exploitation method I want to present is a special return-into-libc
- technique.
- An example exploit using this technique is the "Bea Weblogic -- Apache
- Connector Remote Exploit" [2]. In this exploit the described technique
- is implemented.
- The first thing to do is to redirect EIP to 0x41414141 (Here we
- have to be careful to not overwrite the SEH chain).
- Now normally one would search for an address which allows to jump
- on the stack and execute the shellcode which is on the stack.
- Now for this new technique we will NOT search for a JMP ESP in memory
- space.
- When the executable is loaded into the OllDbg [3] debugger and the
- access violation kicks in because 0x41414141 is not an executable
- address the stack layout may look like the following:
- -overwritten addresses-
- -overwritten addresses-
- .......................
- .......................
- .......................
- .......................
- .......................
- .......................
- Pointer to our buffer
- .......................
- .......................
- The goal is to shift the "Pointer to our buffer" upwards in the stack
- layout just below a call to WinExec().
- Ideally the stack layout would look like the following:
- -overwritten addresses-
- -overwritten addresses-
- Call to WinExec()
- Pointer to our buffer (can be "cmd.exe /c ...")
- .......................
- .......................
- If there is a call to WinExec() with the parameter "Pointer to our
- buffer" we have our code execution.
- Now how can we shift our buffer just below a call to WinExec() ?
- This is quite easy to do. We search the memory space of our process
- for POP+ret instructions.
- As an example there would be POP+POP+POP+RET instructions at 0x10020EBF:
- (Such instruction sets are very easy to find in the processes address
- space. The addresses used here are just examples)
- 10020EBF 5F POP EDI
- 10020EC0 5D POP EBP
- 10020EC1 5E POP ESI
- 10020EC2 C3 RETN
- If we now set our return address to 0x10020EBF instead of 0x41414141
- the process will jump to that address and shift the stack.
- The RET instruction will return to the next bytes in our attack buffer:
- The address right after 0x10020EBF (which was 0x41414141 before).
- To illustrate that we can look at the Bea Weblogic exploit and it's
- attack buffer:
- --- snip ---
- #### STACKBREAKING WITH WINEXEC() ON WINDOWS
- my $c = "C" x 97 . pack("L", 0x10013930) x 3 . pack("L", 0x10013930) .
- pack("L", 0x10013931) . pack("L",0x77EA411E);
- my $a = $cmds . "A" x (4000-length($cmds)) . $c;
- ---snip---
- There we have four times called the address at 0x10013930 and
- once the address at 0x10013931. These addresses are pointing to POP+RET
- instructions. After those instructions are called there is a call
- to WinExec(). It's address is at 0x77EA411E as seen in the attack
- string.
- When we call the POP+RET instructions at 0x10013930 and RETurn from
- that address there is a direct call to 0x10013930 again because this
- is the place the epilog (POP+RET instructions) will return, namely
- returning to our string again.
- So the described technique is nothing but shifting/adjusting the
- stack frame and when the "Pointer to our buffer" is reached
- a call to WinExec() (or ShellExecute/CreateProcess) to execute
- our commands.
- That's it - nothing more to say - it's pretty straightforward.
- References
- [1] Advanced exploitation in exec-shield (Fedora Core case study) by
- "dong-hun you", http://www.milw0rm.com/papers/151
- [2] Bea Weblogic Remote Exploit, http://www.milw0rm.com/exploits/6089
- [3] OllyDbg, http://www.ollydbg.de
相关推荐
PCB设计实践(三十二)PCB设计遇到大电流时的设计技巧
本文系统阐述10A至数百安培PCB设计的六大关键技术。载流能力优化强调铜厚选择(2-4oz)、线宽计算及并联结构;热管理提出散热孔阵列、铜基板嵌入等方案;布局策略包括功率分区和低阻抗路径设计;材料工艺推荐铝基板、陶瓷基板等高效解决方案;安全设计涵盖电气隔离与保护电路;验证环节需结合热仿真与实测。典型150A电机驱动板案例显示,通过4oz铝基板、散热孔阵列等设计,可实现温升≤45℃的稳定运行。核心在于铜厚线宽协同、主动散热及严格验证。
POP POP RET指令序列在绕过SafeSEH中的必要性
这篇文章的目的是解释POP POP RET指令序列的必要性。你经常读到或听到漏洞利用编写者搜索这个指令序列,因为它是它们的漏洞的一个重要部分。但为什么?什么对这个指令序列如此有用,它是如何使用的?这些将是我会尝试回答的问题。 对于以下分析,我将假设在一台32位小端结构的机器上进行。我也会省略很多细节,以便只关注一些概念。还要记住,ESP( Extended Stack Pointer)是扩展堆栈
85-dify案例分享-无需OpenAI账号,Dify+Sora2工作流实战:一键生成写实动漫视频,插件+教程全解析
本文详细解析了如何利用Dify平台结合Sora2插件,搭建无需OpenAI账号的AI视频生成工作流。通过可视化拖拽配置,用户输入文本描述即可一键生成高质量的写实或动漫风格短片,极大降低了AI视频创作的技术门槛。教程涵盖插件安装、API密钥获取、工作流搭建及优化技巧,助力创作者快速实现创意。
为什么POP/POP/RET是必需的
POP/POP/RET是创建SEH漏洞必需的指令序列。 要理解P/P/R是如何工作的,就要先了解各个寄存器的作用: 在x86处理器中,EIP(Instruction Pointer)是指令寄存器,指向处理器下条等待执行的指令地址(代码段内的偏移量),每次执行完相应汇编指令EIP值就会增加。ESP(Stack Pointer)是堆栈指针寄存器,存放执行函数对应栈帧的栈顶地址(也是系统栈的顶部),
USB设备识别码VID和PID详解:如何查询和自定义你的设备ID
本文详细解析了USB设备识别码VID和PID的核心作用、查询方法及自定义配置技巧。VID(供应商识别码)和PID(产品识别码)是USB设备的唯一身份证,用于驱动匹配和功能识别。文章提供了Windows和Linux系统下的查询方法,并探讨了如何合法获取和自定义VID/PID,适合硬件开发者和DIY爱好者参考。
如何理解界面陷阱电荷呢(interface trapped charge)和费米钉扎效应?
如何理解界面陷阱电荷呢?(interface trapped charge) 我们在学半导体物理的时候经常对各种界面态和陷阱分不清楚,然而这却是半导体中最为关键的知识点之一。我这路主要介绍一下如何比较直观地理解界面陷阱电荷,应该也有叫界面态,快态之类的。 在介绍界面陷阱电荷之前,我们可以回顾一下施主(donor)和受主(acceptor)的概念。在si中如果掺杂了n型杂质P,那么P由于最外层电子有5个,有一个电子比较容易跑走,成为自由移动的导电电子,在能带中可以表现为电子从禁带中的能级跃迁到导带,这种情况我
循环嵌套(多层 for 循环)
表:order(订单表,order_id, user_id)、user(用户表,user_id, user_name)✅ 优化:先查所有订单,拿到所有 user_id 批量 in 查询,内存 join。✅ 优化:先把优惠券转 HashMap,单层循环查找(hash 查找 O (1))SQL 只有 2 次,O (1) 数据库查询,内存遍历 O (n)。需求:查询所有订单列表,同时带出每个订单对应的用户名称。需求:订单列表、优惠券列表,把订单匹配对应的优惠券名称。复杂度:O (M+N),非常快。
LTspice仿真报错Timestep too small?5种实测有效的解决方法(附详细参数配置)
本文针对LTspice仿真中常见的“Timestep too small”报错,提供了5种经过实测有效的解决方案。从理解错误根源入手,详细介绍了调整求解器、仿真参数、优化精度容差、设置初始条件、为理想元件添加寄生参数以及使用高级指令等具体方法,并附有详细的参数配置步骤,帮助工程师快速定位并解决仿真收敛问题,提升电路设计效率。
Python+Agent入门笔记(六):记忆和状态,从“一次性问答”到“能用助手”
滑动窗口的缺点很明显:被扔掉的信息就真没了。如果用户第一轮说“我不吃辣”,隔了二十轮让他推荐餐厅,模型已经忘了。定期把旧的对话压缩成一段总结,作为一条特殊的消息插进去。"""把除 system 和最近 keep_recent 条以外的消息,压缩成一条摘要。返回新的 messages 列表。"""# 把旧消息拼成纯文本,让模型总结content = f"[工具结果]把除 system 和最近 keep_recent 条以外的消息,压缩成一条摘要。返回新的 messages 列表。
在 SAP HANA 里为视图创建 Analytic Privilege,真正把同一份数据按角色切开
摘要:本文介绍了SAP HANA中基于业务角色的动态数据权限控制方法。通过Analytic Privilege技术,可以在同一视图上为不同角色设置不同的数据访问范围,实现行级安全控制。核心机制包括:1) 创建带有STRUCTURED PRIVILEGE CHECK的视图;2) 建立授权对象和用户映射表;3) 开发条件提供过程动态生成过滤条件;4) 创建结构化权限对象绑定条件提供器。这种设计使权限规则与业务数据解耦,便于维护变更,适合销售区域、财务数据等多角色访问控制场景。
mjlab 入门教程(一)MuJoCo 人形机器人强化学习训练 sim-to-real 部署框架
摘要:mjlab是一个结合IsaacLab API与MuJoCo简洁性的GPU加速机器人仿真框架,专为强化学习和机器人研究设计。它提供快速安装(支持uv、pip、conda和Docker)、核心功能(域随机化、NaN守护、观测历史/延迟、执行器/传感器系统)以及从IsaacLab的迁移指南。相比IsaacLab,mjlab更轻量、启动更快,直接构建在MuJoCo Warp上,避免了Omniverse开销。其哲学强调裸机性能、开发者体验和核心领域专注,适合需要快速迭代和直接MuJoCo控制的用户,而Isaac
【数据结构-5】单链表的实现
单链表,具体来说是单向的、不带头的、不循环的链表。链表由一个一个节点组成,每个节点分为数据域和指针域,数据域存放数据,指针域存放下一节点的地址。这样,就可以根据指针域中的地址找到下一个节点,节点就串起来了构成了单链表。
MTK-Android12开机应用自启需求-自定义原生Launcher3 主界面布局图标
MTK平台 Android12 版本 上实现 开机应用自启需求-自定义原生Launcher3 主界面布局图标。添加一个属性定义即可,如下:这里自定义一个属性目的是为了在加载Launcher3启动时候从属性获取需要自启动应用的包名,可以扩展动态替换 自启动包名。这里有两种方案,要么在Launcher3里面实现,要么在系统服务里面在开机时候启动第三方一次。这里强烈建议在Launcher3中去实现,体验效果更好。// 第一步:定义属性,// 第二步:在onCreate 方法中获取属性并启动应用。
C# 数据结构和特殊类型
.NET Core(现称.NET)提供丰富数据结构,优化性能与开发效率。日常开发首选List<T>和Dictionary<TKey,TValue>;高性能场景推荐Span<T>与Memory<T>减少内存分配;并发环境使用ConcurrentDictionary等线程安全集合;避免非泛型集合如ArrayList。
visio安装包
Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。
ssm框架搭建
这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载
C++ 入门笔记(十七):list 入门 —— 为什么 list 不能 sort?
第17课:用大白话讲清 list 的双向链表结构、哨兵头、push_back 四步、迭代器封装、merge 与 splice 的区别,以及 vector 排序为什么常比 list 快。
老版QQ原生表情gif动态
这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。
工厂设备接MES为什么慢:协议识别与点表配置自动化的技术拆解
工业现场设备接 MES 的周期主要消耗在协议识别与点表配置。本文拆解这条链路的四层结构,给出点表映射的数据模型、两种部署架构的对比,以及可直接落地的三项验收口径与校验代码。适合工控集成、MES 实施、设备联网方向的工程师。
汉书HE8,好用的汇编代码编写工具
汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大
list
的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。,因此反向迭代器的实现可以借助正向迭代器,即:反向迭代器内部可以包含一个正向迭代器,对正向迭代器的接口进行包装即可。是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。迭代到该位置,在这段位置上迭代需要线性的时间开销;最大的缺陷是不支持任意位置的随机访问,比如:要访问。还需要一些额外的空间,以保存每个节点的相关联信息。个元素,必须从已知的位置。
软件商店常见问题标准处理流程
从底层软件源来看,/etc/apt/sources.list配置错误、源地址失效、公网与内网离线源混用、ARM64与x86_64架构源串用,以及DNS解析异常、系统代理配置错误,都会导致商店无法获取应用数据;打开该应用,确认可正常运行;软件商店作为系统内置的图形化软件分发与安装入口(UKUI桌面配套组件,底层依赖APT软件源),承担着应用软件的浏览、搜索、下载、安装、升级与卸载等核心功能,是终端软件部署与管理的关键通道。覆盖软件商店启动、页面加载、应用下载、安装、卸载、搜索、自身更新等全部业务场景。
【AI 开发从入门到进阶 · 10】收官篇:LoRA 微调、模型评估、推理加速与生产部署全链路
本文系统梳理了大模型微调与生产落地的全流程,从决策是否微调、优选LoRA技术方案,到代码实现、效果评估、推理加速与FastAPI服务封装,最终构建可迭代的生产级AI系统。强调“逐级升级”原则,倡导以数据闭环驱动优化,避免技术冲动。全系列贯穿工程化思维,提供可复用模板与实战建议,助力开发者从模型训练迈向稳定可用的AI服务部署。
LangGraph(03):状态归约、并行更新与消息管理
并行节点写入报错?历史消息无法清理?本文拆解 LangGraph 状态归约与消息增删改机制,带你精确控制复杂工作流状态。
ARIA规范
ARIA用来补充原生HTML缺失的语义,原则:优先原生标签,ARIA仅做补充。 ARIA角色role:定义组件身份,分为地标角色、构件角色、文档角色;构件角色用于自定义弹窗、tab、下拉菜单等复杂组件; ARIA状态与属性:以aria-开头,描述组件实时状态;常用:aria-label、aria-labelledby、aria-describedby、aria-hidden、aria-expanded、aria-selected、aria-modal、aria-live; 常用场景:图标按钮用aria-l
LangGraph 的分离思想总结
LangGraph 的分离思想,本质上是对"高内聚、低耦合"这一经典工程原则在 LLM 应用领域的落地。它通过状态与逻辑分离、节点职责分离、控制流与执行分离、计算与持久化分离、编排与实现分离五个层面,把一个难以维护的"大黑盒"拆解成一组可组合、可测试、可观测的部件。理解这套分离思想,比记住 API 更重要——因为当你面对新的智能体场景时,真正指导你做出合理拆分的,正是这些分离原则。
Java基础:泛型、类型擦除与 PECS 原则
泛型允许类、接口和方法使用类型参数,把许多类型检查提前到编译期,减少显式类型转换,提高代码复用性。例如。
To-Do List 的「修改」功能与 CSS 定位
买牛奶</td><td index="1">写作业</td><td index="2">跑步
第2讲:提示注入攻击——原理与防御
提示注入是攻击者通过恶意指令绕过AI系统规则的安全威胁,分为直接注入(如覆盖指令、角色扮演越狱)和间接注入(藏于文档或搜索结果中)。防御需三重机制:检测(识别高危模式与多轮诱导)、加固(设置优先级、随机分隔符、锁定输出)、净化(清除控制字符、编码、截断超长输入)。结合上下文分析与多模态处理,可有效防范编码绕过、过度净化等陷阱。核心理念:防御需检测、加固、净化联动,筑牢AI应用安全防线。
TypeError: must be str, not list
【代码】TypeError: must be str, not list。
4232



被折叠的 条评论
为什么被折叠?



