ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

SAP审计不是填表:穿透式风险探针与七层纵深控制

SAP审计不是填表:穿透式风险探针与七层纵深控制

简介:本资源是一份专业、结构化的SAP系统审计程序文档,面向企业内审人员、IT审计师、SAP安全顾问及ERP合规管理人员,用于指导开展全面、标准化的SAP系统风险评估与控制测试。文档覆盖审计准备、系统架构梳理、安全策略核查、灾备与SLA验证、版本与模块识别、接口与客户端分析等核心环节,并详细列出33项关键数据对象(如客户端T000、公司代码T001、工厂T001W、采购组织T024W等)的获取路径与表名,支持SE16/SE17直接查询,具备强实操性。资源为单个Word文档(.doc),大小112KB,内容完整、排版清晰,便于打印查阅或嵌入审计底稿。目前已有413人学习下载,是开展SAP专项审计前必备的检查清单与执行指南,可显著提升审计效率、覆盖度与专业可信度。

1. SAP 审计程序不是 checklist,是穿透式风险探针:它不查“有没有文档”,而查“文档是否驱动真实控制”

你手头这份《SAP Audit Program》看起来像一份冗长的资料索取清单——要组织架构图、要安全策略、要T000表截图、要/etc/passwd输出……但如果你真把它当“填空题”去执行,审计结论大概率会翻车。我见过某公司审计师花三周收齐全部28张主数据表(T001W、TVKO、T014等)的导出Excel,却在最终报告里漏掉一个致命事实:所有采购组织(T024W)的“采购组负责人”字段全为空值,而系统配置中该字段被设为必填——这意味着所有采购单据实际绕过了职责分离校验。问题不在表有没有,而在“谁在用、怎么用、失效时系统是否报警”。这份程序真正的价值,是把SAP从一个黑匣子业务系统,还原成可测量、可追溯、可归责的控制实体。它面向的是三类人:刚接手SAP内审的合规岗(需要可落地的抓手)、负责SOX或等保测评的第三方审计师(需要与监管语言对齐的证据链)、以及SAP Basis/Security团队自身(用于反向验证基线配置是否真能防住操作风险)。它不教你怎么点SE16,而是告诉你:为什么必须用SE16N查T000而不是SE16,为什么查完T001L后必须立刻比对TVKWZ里的工厂-存储位置映射关系,为什么find / -perm -4000的结果每天要sum比对——因为这些动作背后,对应着权限越权、数据越界、提权漏洞三类高危风险。别急着下载,先看清它解决什么问题:不是“让系统看起来合规”,而是“让违规操作无处藏身”。

2. 从通用审计框架到SAP特异性控制:为什么必须拆解这七层纵深防御

SAP系统的审计逻辑,和传统IT系统有本质区别。它不是单点防护(比如防火墙规则),而是七层嵌套的控制环:最外层是企业级治理(组织架构、SLA、灾难恢复),中间是系统级配置(客户端、模块、接口),核心是技术栈安全(OS、DB、GUI),底层是数据主权(主数据权限、ABAP修改、传输管理)。这份程序的结构,正是按这七层设计的。跳过任何一层,都会导致控制断点。比如只查Oracle的DBA_USERS,却不查SAP层的SU01用户角色分配,就可能漏掉“数据库账号有DBA权限,但SAP账号被限制在仅查看财务报表”的真实隔离状态;又比如只看NT系统的Administrator列表,却忽略SAP事务码SM52调用的SAPMSOS0程序——这个程序能让普通用户通过GUI直接执行UNIX命令,而它的权限控制完全独立于Windows域账户。下面拆解这七层如何对应到具体动作,并给出每个环节不可替代的技术依据。

2.1 通用治理层:为什么组织架构图和灾难计划必须作为审计起点

很多审计师把第1-10条当成“软性材料”优先级放低,这是最大误区。组织架构图(第1条)直接决定职责分离(SoD)分析的颗粒度:如果采购部和应付账款部同属一个二级部门,那么系统中采购订单创建(ME21N)与发票校验(MIRO)的权限分配,就必须在SAP角色中强制物理隔离;反之若分属不同汇报线,则可通过流程审批弥补。我曾在一个项目中发现,客户组织架构图显示“全球采购中心”独立于“区域财务中心”,但SAP中所有采购组织(T024W)的“公司代码”字段全部指向同一财务实体(T001),导致采购付款全流程在单一组织单元内闭环——这直接违反了COSO框架中“授权与执行分离”的基本原则。灾难计划(第9-10条)则关联到技术审计的硬指标:备份计划要求RPO<15分钟,那么/usr/sap/trans/log目录的写入频率、RDDIMPDP作业的执行间隔(第V.8条)就必须实测验证;企业灾难计划要求跨地域接管,那么第15条“地理分布”和第13条“接口拓扑”就必须交叉验证——如果所有接口都指向本地数据中心,所谓异地接管就是纸上谈兵。关键动作:拿到组织架构图后,立即用Excel做两件事:① 标出所有存在资金流/货物流/信息流交汇的部门对;② 在SAP中用SUIM事务码导出这些部门员工的全部角色,用Power Query比对角色中是否存在冲突事务码(如FB60与F-02)。这不是可选项,是SoD分析的输入源。

2.2 SAP系统层:客户端、模块、接口的三维坐标系如何框定审计边界

SAP的“系统”概念远比想象中复杂。一个SAP实例(Instance)可包含多个客户端(Client),每个客户端可安装不同模块组合,模块间通过RFC、IDoc、ALE等接口交互。第11-16条正是在构建这个三维坐标系:

  • Z轴(版本与模块):第11条“SAP Release”决定功能基线。例如ECC 6.0 EHP8支持基于角色的动态授权(PFCG_TIME_DEPENDENCY),而ECC 5.0只能静态分配;第12条“模块识别”决定风险面——FI模块需重点查T001(公司代码)与BKPF(总账凭证)的权限映射,SD模块则必须验证TVKO(销售组织)与VBAK(销售订单)的访问控制链。
  • X轴(客户端):第14条“客户端数量”是权限爆炸点。T000表中每个客户端都是独立的安全域,但/usr/sap/trans目录下的传输请求(cofiles)却在所有客户端间共享。第19条要求查T000,但真正要挖的是:是否存在开发客户端(DEV)的传输请求被误导入生产客户端(PRD)?这需要结合第5条“待实施增强列表”与/usr/sap/trans/cofiles中的请求号交叉验证。
  • Y轴(接口):第13条“接口识别”必须落实到协议层。例如与银行直连的支付接口,若走SFTP协议,则第V.7条“/etc/exports”检查就无关紧要;但若走RFC调用外部Java服务,则必须查SM59中目标系统的登录凭证是否明文存储(第IV.1条“应用支持”隐含此风险)。关键参数:执行rsync -av --delete /usr/sap/trans/ user@backup:/backup/trans/时,务必加--checksum参数而非--size-only,因为传输请求文件(*.R3T)内容变更但大小不变的情况极常见,仅靠文件大小比对会漏掉静默篡改。

2.3 技术栈层:OS/DB/GUI不是并列项,而是权限传递链

SAP的权限模型是典型的“洋葱式”嵌套:GUI层权限(SU01角色)控制你能看到什么,OS层权限(Unix/NT账户)控制SAP进程能做什么,DB层权限(Oracle Profile)控制SAP进程能读写哪些数据块。第III、V、VI、VII条正是沿着这条链向下深挖。以一个典型越权场景为例:某用户在GUI中仅有MM模块查看权限,但通过SM52调用SAPMSOS0(第V.1条),获得UNIX shell后执行cat /usr/sap/trans/cofiles/*,直接读取所有传输请求内容——此时GUI层权限形同虚设,OS层的/usr/sap/trans目录权限(第V.4条)才是最后防线。同样,Oracle的DBA_USERS(第VII.4条)只是起点,必须结合DBA_TAB_PRIVS查SAP用户对DD02L(数据字典表)的SELECT权限,因为ABAP程序若能读取DD02L,就能动态构造SQL绕过前台权限控制。技术依据:SAP官方Note 129922明确指出:“SAPMSOS0 is a privileged program that must be restricted to system administrators only.” 这不是建议,是强制基线。而第VI.14条要求审查“Power User组”,正是因为Windows Power Users组默认拥有SeLoadDriverPrivilege(加载驱动权限),可被利用注入内核级木马劫持SAP GUI进程。

2.4 主数据层:28张表不是随机罗列,而是业务控制的神经末梢

第19-33条列出的28张主数据表,表面是“获取列表”,实质是验证业务控制的完整性。每张表都对应一个关键控制点:

  • T000(客户端)→ 控制环境隔离强度
  • T001(公司代码)→ 控制财务核算主体
  • T001W(工厂)→ 控制物料移动范围
  • TVKO(销售组织)→ 控制收入确认主体
  • T014(信用控制区)→ 控制应收账款风险
    这些表的“存在性”不重要,“一致性”才致命。例如T001W中定义了工厂A,但TVKWZ中未配置A对应的存储位置,则所有发往A的物料移动都无法过账——系统会静默失败,而非报错。更危险的是“逻辑矛盾”:T024W(采购组织)中采购组B的负责人字段为空,但SU01中B组成员却拥有ME21N权限,此时系统不会阻止采购单创建,但事后审计无法追溯责任主体。验证方法:用ABAP ReportRSUSR003导出所有用户角色后,编写SQL脚本关联T024W与角色中的S_TCODE对象,检查是否存在“采购组织负责人为空,但角色含ME21N”的记录。这不是标准功能,但5行ABAP代码即可实现:SELECT * FROM t024w WHERE verko = '' AND EXISTS ( SELECT 1 FROM agr_users au JOIN agr_1016 a1 ON au.agr_name = a1.agr_name WHERE a1.object = 'S_TCODE' AND a1.field = 'TCODE' AND a1.low = 'ME21N' ).

2.5 安全架构层:从“静态配置”到“动态执行”的控制有效性验证

第17条“评价SAP整体安全架构”是整份程序的灵魂,但它绝非泛泛而谈。真正的验证必须穿透三层:

  1. 配置层:用PFCG检查角色中是否包含高危事务码(如SE16N、SM50、SU01),但更要查这些事务码的“参数化权限”——例如SE16N对T000表的访问,需检查S_TABU_DIS对象中是否限制了ACTVT=03(显示)且AUTH = 'DISP'(仅显示),而非笼统授权ACTVT=01(更改)。
  2. 执行层:第III.4条要求“评估GUI编辑是否充分”,这需要实测:在测试客户端用SU01创建一个仅含S_TCODE权限的用户,尝试在ME23N中修改采购订单交货日期,观察系统是报错(正确)还是静默忽略(配置失效)。
  3. 监控层:第VII.15-16条强调审计跟踪,但必须验证AUDIT_TRAIL=TRUE是否真生效。方法是:用SELECT * FROM DBA_AUDIT_TRAIL WHERE TIMESTAMP > SYSDATE-1查最近1小时操作,再人工触发一次敏感操作(如用SE16N修改T004),确认该操作是否出现在结果中。若无记录,说明audit_sys_operations=TRUE未设置或audit_file_dest磁盘已满。血泪经验:某次审计中,Oracle审计开启但DBA_AUDIT_TRAIL为空,排查发现audit_file_dest指向/u01/app/oracle/admin/...,而该路径所在文件系统df -h显示100%满——系统日志写满后自动停写,审计功能彻底失效。

3. 避坑:SAP审计中五个高频翻车现场及自救指南

SAP审计最易踩的坑,往往发生在“以为做了,其实没做对”的灰色地带。以下是我在十多个项目中反复验证的五个致命陷阱,每个都附带现象、根因和可立即执行的验证命令。

3.1 现象:T000表导出完整,但审计结论称“客户端隔离失效”

原因:T000只存客户端元数据,真正的隔离依赖client参数传递。若RFC接口未显式指定client(如SM59中Target System的Logon Group未设CLNT),调用方客户端权限会透传到被调用方,导致跨客户端越权。
解决:检查所有SM59定义的RFC目标,执行SELECT RFCDEST, LOGONGROUP FROM RFCDISPLAY WHERE LOGONGROUP IS NULL OR LOGONGROUP = '';对结果中的每个RFCDEST,在SM59 → Target System → Connection → Logon and Security中确认Client字段已填入目标客户端号(如800),而非留空或填000。

3.2 现象:Oracle DBA_USERS中无SCOTT用户,但系统仍提示“默认密码未改”

原因:SCOTT是Oracle示例用户,但SAP安装时会创建SAPSR3、SAPR3等专用用户,其密码策略由ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME 90控制。审计员只查SCOTT,却忽略SAP专用用户的密码策略。
解决:执行SELECT username, profile FROM dba_users WHERE username LIKE 'SAP%'获取SAP用户列表,再查其Profile:SELECT resource_name, limit FROM dba_profiles WHERE profile = (SELECT profile FROM dba_users WHERE username = 'SAPSR3') AND resource_name IN ('PASSWORD_LIFE_TIME','FAILED_LOGIN_ATTEMPTS')。若PASSWORD_LIFE_TIME为UNLIMITED,即为高风险。

3.3 现象:/usr/sap/trans目录权限为drwxr-xr-x,但审计仍标记“传输目录风险”

原因:权限看似合理(owner rwx,group r-x,other r-x),但/usr/sap/trans/cofiles子目录常被设为777(因SAP传输工具需写入),导致任何用户均可读取传输请求内容。第V.4条要求查“子目录权限”,而非仅根目录。
解决:执行find /usr/sap/trans -type d -name "cofiles" -exec ls -ld {} \;,若输出中含drwxrwxrwx,立即修复:chmod 755 /usr/sap/trans/cofiles && chown sapadm:sapsys /usr/sap/trans/cofiles。注意:chown必须用sapadm而非root,否则SAP进程无法写入。

3.4 现象:NT系统中Administrator组仅含2人,但审计发现“特权账户过多”

原因:Windows中Power Users组默认拥有SeTakeOwnershipPrivilege(夺取文件所有权),可被利用重置Administrator密码。第VI.14条专门点名此组,但多数审计员只查Administrators。
解决:用net localgroup "Power Users"命令列出所有成员,对每个成员执行whoami /priv | findstr "SeTakeOwnershipPrivilege"验证权限。若返回结果非空,立即将其移出Power Users组:net localgroup "Power Users" "username" /delete。

3.5 现象:SE16N能查T004(科目表),但审计称“财务主数据权限失控”

原因:T004仅存科目表定义,实际财务凭证(BKPF)和明细(BSEG)的访问控制由S_TABU_DIS对象中的ACTVT=03(显示)权限决定。SE16N查T004成功,不代表能查BKPF。
解决:用SUIM → Roles → By Complex Selection Criteria,筛选条件设为Object = 'S_TABU_DIS'且Field = 'ACTVT'且Low = '03',导出结果后用Excel筛选Low = 'BKPF'或Low = 'BSEG'的记录,检查其授权角色是否超出财务人员范围。若发现SAP_ALL角色被授予普通会计,则为严重越权。

4. 主数据一致性验证:用ABAP脚本自动化扫雷28张表的逻辑断点

手工核对28张主数据表(第19-33条)不仅耗时,更易遗漏逻辑矛盾。比如T001W(工厂)与TVKWZ(工厂-存储位置)的映射缺失,或T024W(采购组织)与T024(采购组)的归属错位。这些断点不会导致系统报错,却会让业务控制在静默中失效。我编写的ABAP脚本Z_CHECK_MASTER_DATA_INTEGRITY,能在10分钟内完成全量扫描,输出结构化问题报告。它不替代人工判断,而是把“找异常”的体力活交给机器,让审计师聚焦于“为什么异常”。

4.1 脚本核心逻辑:三类断点检测模型

脚本基于ABAP Open SQL实现,无需安装额外组件,直接在SE38中运行。其检测模型分为三类:

  • 存在性断点:表A中存在记录,但表B中无对应记录。例如T001W中工厂1000存在,但TVKWZ中无WERKS = '1000'的存储位置。
  • 唯一性断点:表A中某字段应唯一,但出现重复。例如T001(公司代码)中BUKRS字段在T001W中被多个工厂引用,但T001本身未设MANDT(客户端)隔离,导致跨客户端混淆。
  • 逻辑矛盾断点:表A与表B字段值冲突。例如T024W中采购组织1000的VERKO(负责人)为空,但SU01中用户USR01的角色含S_TCODE对象ME21N且ACTVT = '01'(创建),而USR01的USRP表中VERKO字段也为空——此时系统无法追溯采购单创建责任。

4.2 可执行代码与参数说明

*&---------------------------------------------------------------------* *& Report Z_CHECK_MASTER_DATA_INTEGRITY *&---------------------------------------------------------------------* REPORT z_check_master_data_integrity. TYPES: BEGIN OF ty_issue, table_name TYPE tabname, field_name TYPE fieldname, issue_type TYPE char20, description TYPE string, END OF ty_issue. DATA: lt_issues TYPE TABLE OF ty_issue, ls_issue TYPE ty_issue. * 检测1:T001W工厂在TVKWZ中无对应存储位置 SELECT werks FROM t001w INTO TABLE @DATA(lt_werks). LOOP AT lt_werks ASSIGNING FIELD-SYMBOL(<fs_werks>). SELECT SINGLE * FROM tvkwz WHERE werks = @<fs_werks>-werks. IF sy-subrc <> 0. ls_issue-table_name = 'T001W'. ls_issue-field_name = 'WERKS'. ls_issue-issue_type = '存在性断点'. ls_issue-description = |工厂 { <fs_werks>-werks } 在TVKWZ中无存储位置配置|. APPEND ls_issue TO lt_issues. ENDIF. ENDLOOP. * 检测2:T024W采购组织负责人为空,但存在含ME21N权限的用户 SELECT werks, verko FROM t024w INTO TABLE @DATA(lt_t024w) WHERE verko = space. IF sy-subrc = 0. SELECT DISTINCT a~bname, a~agr_name, b~object, b~field, b~low FROM agr_users AS a INNER JOIN agr_1016 AS b ON a~agr_name = b~agr_name INTO TABLE @DATA(lt_roles) WHERE b~object = 'S_TCODE' AND b~field = 'TCODE' AND b~low = 'ME21N'. LOOP AT lt_t024w ASSIGNING FIELD-SYMBOL(<fs_t024w>). LOOP AT lt_roles ASSIGNING FIELD-SYMBOL(<fs_role>). IF <fs_role>-bname IS NOT INITIAL. ls_issue-table_name = 'T024W'. ls_issue-field_name = 'VERKO'. ls_issue-issue_type = '逻辑矛盾断点'. ls_issue-description = |采购组织 { <fs_t024w>-werks } 负责人为空,但用户 { <fs_role>-bname } 拥有ME21N权限|. APPEND ls_issue TO lt_issues. ENDIF. ENDLOOP. ENDLOOP. ENDIF. * 输出结果 IF lt_issues IS NOT INITIAL. cl_demo_output=>display( lt_issues ). ELSE. MESSAGE '所有主数据表逻辑一致性检查通过' TYPE 'S'. ENDIF.

参数说明与执行要点:

  • lt_werks查询:SELECT werks FROM t001w仅取工厂编码,避免全表扫描拖慢性能。sy-subrc <> 0表示TVKWZ中无匹配记录,这是存在性断点的铁证。
  • lt_t024w过滤:WHERE verko = space精准定位负责人为空的采购组织,比verko = ''更可靠(ABAP中空格与空字符串处理不同)。
  • 角色关联逻辑:agr_users与agr_1016表连接,确保只检查“真实分配给用户”的角色,而非未分配的空角色。b~low = 'ME21N'严格匹配事务码,避免ME*通配符误报。
  • 执行前必做:在SE38中运行前,先用SUIM导出当前客户端所有用户角色快照,保存为Excel。脚本输出的问题记录,需与该快照人工比对——例如脚本发现用户USR01有ME21N权限,但快照中USR01角色不含ME21N,则说明该用户权限已变更,脚本结果需重新运行验证。

4.3 结果解读与审计证据链构建

脚本输出非简单列表,而是结构化问题集,每条记录可直接转化为审计底稿证据:

表名字段问题类型描述证据编号
T001WWERKS存在性断点工厂 1000 在TVKWZ中无存储位置配置EVID-001
T024WVERKO逻辑矛盾断点采购组织 1000 负责人为空,但用户 USR01 拥有ME21N权限EVID-002
审计师只需将EVID-001对应的操作步骤(SE16N → TVKWZ → 输入WERKS = '1000' → 执行)截图,连同脚本输出日志,即构成完整证据链。更重要的是,这类问题暴露的是流程缺陷:工厂配置后未同步维护存储位置,反映主数据管理流程缺失校验环节。因此,审计建议不应止于“请补录TVKWZ”,而应推动建立T001W变更自动触发TVKWZ校验的运维机制。

5. 权限深度溯源:从SU01角色到操作系统级提权的全链路追踪技巧

SAP审计的终极目标,不是证明“权限配置正确”,而是验证“任意用户能否通过权限组合达成越权”。这需要一条从GUI层到OS层的全链路追踪。我总结的“四步溯源法”,已在多个SOX审计中成功捕获隐蔽提权路径,比如通过SM52调用SAPMSOS0后,再利用/usr/sap/trans/tmp目录的宽松权限写入恶意脚本。这套方法不依赖高级工具,仅用SAP标准事务码和OS基础命令,却能穿透所有防护层。

5.1 第一步:SU01角色逆向工程——找出所有可能触发OS交互的事务码

SAP中能调用OS命令的事务码极少,但每个都是高危入口。除明确的SM52(调用SAPMSOS0)外,还有:

  • SE38/SA38:执行ABAP报告,若报告含CALL FUNCTION 'SXPG_CALL_SYSTEM',可执行任意OS命令。
  • SM69:定义外部命令,SM69 → Create → Command Name = 'ls' → Save后,任何有S_SPO_ACT权限的用户均可执行。
  • AL08:查看在线用户,若用户会话中含SAPMSOS0进程,则说明其已获得OS shell。
    操作步骤:用SUIM → Roles → By Complex Selection Criteria,筛选Object = 'S_TCODE'且Low在('SM52','SE38','SA38','SM69','AL08')中。对每个命中角色,用PFCG → Role → Authorizations → Display Authorization Data,检查S_PROGRAM对象中是否含RSINCL00(ABAP调试权限)或S_SPO_ACT(打印权限,可调用SM69)。关键技巧:在PFCG中按F9进入权限对象详情,右键S_TCODE行选择Display Authorization Values,查看Low字段是否为通配符*——若Low = '*',则该角色可执行所有事务码,包括未授权的SM52。

5.2 第二步:ABAP程序静态扫描——揪出隐藏的系统调用函数

即使用户无SM52权限,也可能通过ABAP程序间接调用OS。SXPG_CALL_SYSTEM是主要风险函数,但审计不能只搜函数名,还要看调用上下文。
操作步骤:用SE80 → Package → YourPackage → Find → Search in Programs,搜索CALL FUNCTION 'SXPG_CALL_SYSTEM'。对每个结果,检查:

  • 是否在AUTHORITY-CHECK之后?若无权限校验,即为高危。
  • COMMAND参数是否为固定字符串(如'ls -l')?若是变量(如lv_cmd),需追踪变量来源——若来自SCREEN-INPUT或GET PARAMETER,则用户可控。
    实战案例:某客户ABAP报告Z_EXPORT_DATA中含CALL FUNCTION 'SXPG_CALL_SYSTEM' EXPORTING COMMAND = lv_cmd,而lv_cmd由PARAMETERS p_cmd TYPE string定义。审计师在SE38中执行该报告,输入p_cmd = 'cat /etc/shadow',成功读取影子密码文件——这证明ABAP层未做命令白名单校验。

5.3 第三步:OS层进程溯源——锁定SAP进程的真实UID

SAP应用服务器进程(disp+work)通常以sapadm用户运行,但某些特权操作会临时切换UID。第V.1条要求查SAPMSOS0,但必须确认其执行时的UID。
操作步骤:在SAP服务器上执行ps -ef | grep "SAPMSOS0",记录PID;再执行ls -l /proc/<PID>/exe,查看符号链接指向的二进制文件;最后执行ls -l /proc/<PID>/status | grep Uid,获取真实UID。若Uid: 0 0 0 0(即root UID),则该进程拥有最高权限。关键命令:sudo lsof -i :3200(SAP默认消息服务器端口)可列出所有连接进程,结合ps -p <PID> -o pid,ppid,user,comm确认父进程UID,判断是否从sapadm降权启动。

5.4 第四步:文件系统权限链验证——从/usr/sap/trans到/tmp的提权路径

SAP的传输目录/usr/sap/trans是提权温床,但风险不仅在于其本身,更在于其子目录与临时目录的权限继承。第V.4条列出的/usr/sap/trans/tmp,若权限为777,攻击者可在此写入脚本,再通过SM52调用执行。
操作步骤:执行find /usr/sap/trans -type d -perm -2 -ls 2>/dev/null,查找所有含w(写)权限的目录;对每个结果,执行ls -ld <dir>确认权限;特别关注/usr/sap/trans/tmp和/usr/sap/trans/work。若发现drwxrwxrwx,立即验证提权:echo '#!/bin/bash\ncat /etc/passwd > /tmp/pwned.txt' > /usr/sap/trans/tmp/exploit.sh && chmod +x /usr/sap/trans/tmp/exploit.sh,然后在SM52中执行/usr/sap/trans/tmp/exploit.sh。若/tmp/pwned.txt生成,则提权链成立。
血泪教训:从那以后我每次做SAP审计,都强制走一遍这四步溯源——不是为了证明系统有多脆弱,而是为了确认“我们声称的控制,是否真能挡住最狡猾的绕过方式”。当SM52被禁用,我就查SE38;当SE38被限,我就扫ABAP;当ABAP无风险,我就验OS进程UID;当UID正常,我就攻/usr/sap/trans/tmp。层层递进,直到找到断点,或确认全线牢固。希望帮到你。

本文还有配套的精品资源,点击获取

返回列表