<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://wiki.owasp.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Irene+Abezgauz</id>
		<title>OWASP - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="https://wiki.owasp.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Irene+Abezgauz"/>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php/Special:Contributions/Irene_Abezgauz"/>
		<updated>2026-04-28T12:49:10Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.27.2</generator>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Testing_for_XPath_Injection_(OTG-INPVAL-010)&amp;diff=173249</id>
		<title>Testing for XPath Injection (OTG-INPVAL-010)</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Testing_for_XPath_Injection_(OTG-INPVAL-010)&amp;diff=173249"/>
				<updated>2014-04-22T21:50:45Z</updated>
		
		<summary type="html">&lt;p&gt;Irene Abezgauz: slight change to summary&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:OWASP Testing Guide v4}}&lt;br /&gt;
&lt;br /&gt;
== Brief Summary ==&lt;br /&gt;
XPath is a language that has been designed and developed primarily to address parts of an XML document. In XPath injection testing, we test if it is possible to inject XPath syntax into a request interpreted by the application, allowing an attacker to execute user-controlled XPath queries. When successfully exploited, this vulnerability may allow an attacker to bypass authentication mechanisms or access information without proper authorization.&lt;br /&gt;
&lt;br /&gt;
== Short Description of the Issue == &lt;br /&gt;
Web applications heavily use databases to store and access the data they need for their operations. Historically, relational databases have been by far the most common technology for data storage, but, in the last years, we are witnessing an increasing popularity for databases that organize data using the XML language. Just like relational databases are accessed via SQL language, XML databases use XPath as their standard query language. Since, from a conceptual point of view, XPath is very similar to SQL in its purpose and applications, an interesting result is that XPath injection attacks follow the same logic as [[SQL Injection]] attacks. In some aspects, XPath is even more powerful than standard SQL, as its whole power is already present in its specifications, whereas a large number of the techniques that can be used in a SQL Injection attack depend on the characteristics of the SQL dialect used by the target database. This means that XPath injection attacks can be much more adaptable and ubiquitous. Another advantage of an XPath injection attack is that, unlike SQL, no ACLs are enforced, as our query can access every part of the XML document.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Black Box testing and example ==&lt;br /&gt;
The XPath attack pattern was first published by Amit Klein [1] and is very similar to the usual SQL Injection. In order to get a first grasp of the problem, let's imagine a login page that manages the authentication to an application in which the user must enter his/her username and password. Let's assume that our database is represented by the following XML file:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;ISO-8859-1&amp;quot;?&amp;gt; &lt;br /&gt;
&amp;lt;users&amp;gt; &lt;br /&gt;
&amp;lt;user&amp;gt; &lt;br /&gt;
&amp;lt;username&amp;gt;gandalf&amp;lt;/username&amp;gt; &lt;br /&gt;
&amp;lt;password&amp;gt;!c3&amp;lt;/password&amp;gt; &lt;br /&gt;
&amp;lt;account&amp;gt;admin&amp;lt;/account&amp;gt; &lt;br /&gt;
&amp;lt;/user&amp;gt; &lt;br /&gt;
&amp;lt;user&amp;gt; &lt;br /&gt;
&amp;lt;username&amp;gt;Stefan0&amp;lt;/username&amp;gt; &lt;br /&gt;
&amp;lt;password&amp;gt;w1s3c&amp;lt;/password&amp;gt; &lt;br /&gt;
&amp;lt;account&amp;gt;guest&amp;lt;/account&amp;gt; &lt;br /&gt;
&amp;lt;/user&amp;gt; &lt;br /&gt;
&amp;lt;user&amp;gt; &lt;br /&gt;
&amp;lt;username&amp;gt;tony&amp;lt;/username&amp;gt; &lt;br /&gt;
&amp;lt;password&amp;gt;Un6R34kb!e&amp;lt;/password&amp;gt; &lt;br /&gt;
&amp;lt;account&amp;gt;guest&amp;lt;/account&amp;gt; &lt;br /&gt;
&amp;lt;/user&amp;gt; &lt;br /&gt;
&amp;lt;/users&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
An XPath query that returns the account whose username is &amp;quot;gandalf&amp;quot; and the password is &amp;quot;!c3&amp;quot; would be the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
string(//user[username/text()='gandalf' and password/text()='!c3']/account/text()) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If the application does not properly filter user input, the tester will be able to inject XPath code and interfere with the query result. For instance, the tester could input the following values:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Username: ' or '1' = '1 &lt;br /&gt;
Password: ' or '1' = '1 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Looks quite familiar, doesn't it? &lt;br /&gt;
Using these parameters, the query becomes: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
string(//user[username/text()='' or '1' = '1' and password/text()='' or '1' = '1']/account/text()) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
As in a common SQL Injection attack, we have created a query that always evaluates to true, which means that the application will authenticate the user even if a username or a password have not been provided.&lt;br /&gt;
&lt;br /&gt;
And as in a common SQL Injection attack, with XPath injection, the first step is to insert a single quote (') in the field to be tested, introducing a syntax error in the query, and to check whether the application returns an error message. &lt;br /&gt;
&lt;br /&gt;
If there is no knowledge about the XML data internal details and if the application does not provide useful error messages that help us reconstruct its internal logic, it is possible to perform a [[Blind XPath Injection]] attack, whose goal is to reconstruct the whole data structure. The technique is similar to inference based SQL Injection, as the approach is to inject code that creates a query that returns one bit of information. [[Blind XPath Injection]] is explained in more detail by Amit Klein in the referenced paper.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
'''Whitepapers'''&amp;lt;br&amp;gt;&lt;br /&gt;
* [1] Amit Klein: &amp;quot;Blind XPath Injection&amp;quot; - http://www.modsecurity.org/archive/amit/blind-xpath-injection.pdf&lt;br /&gt;
* [2] XPath 1.0 specifications - http://www.w3.org/TR/xpath&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Irene Abezgauz</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Test_Session_Timeout_(OTG-SESS-007)&amp;diff=173248</id>
		<title>Test Session Timeout (OTG-SESS-007)</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Test_Session_Timeout_(OTG-SESS-007)&amp;diff=173248"/>
				<updated>2014-04-22T21:48:15Z</updated>
		
		<summary type="html">&lt;p&gt;Irene Abezgauz: small additions and changes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:OWASP Testing Guide v4}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Brief Summary ==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
In this phase, we check that the application automatically logs out a user when that user has been idle for a certain amount of time, ensuring that it is not possible to “reuse” the same session and that no sensitive data remains stored in the browser cache.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Description of the Issue == &lt;br /&gt;
All applications should implement an idle or inactivity timeout for sessions. This timeout defines the amount of time a session will remain active in case there is no activity by the user, closing and invalidating the session upon the defined idle period since the last HTTP request received by the web application for a given session ID. &lt;br /&gt;
The most appropriate timeout should be a right balance between security (shorter timeout) and usability (longer timeout) and heavily depends on the sensitivity level of the data handled by the application. For example, a 60 minute logout time for a public forum can be acceptable, but such a long time would be too much in a home banking application (where a maximum timeout of 15 minutes it's, in general, recommended). In any case, any application that does not enforce a timeout-based logout should be considered not secure, unless such behavior is required by a specific functional requirement. &amp;lt;br&amp;gt;&lt;br /&gt;
The idle timeout limits the chances that an attacker has to guess and use a valid session ID from another user, and under certain circumstances could protect public computers from session reuse. However, if the attacker is able to hijack a given session, the idle timeout does not limit the attacker’s actions, as he can generate activity on the session periodically to keep the session active for longer periods of time. &amp;lt;br&amp;gt;&lt;br /&gt;
Session timeout management and expiration must be enforced server-side. If some data, under the control of the client, are used to enforce the session timeout, for example using cookie values or other client parameters to track time references (e.g. number of minutes since login time), an attacker could manipulate these to extend the session duration. So the application has to track the inactivity time on the server side and, after the timeout is expired, automatically invalidate the current user's session and delete every data stored on the client. &amp;lt;br&amp;gt;&lt;br /&gt;
Both actions must be implemented carefully, in order to avoid introducing weaknesses that could be exploited by an attacker to gain unauthorized access if the user forgot to logout from the application. &lt;br /&gt;
More specifically, as for the logout function, it is important to ensure that all session tokens (e.g. cookies) are properly destroyed or made unusable, and that proper controls are enforced at the server side to prevent the reuse of session tokens. &lt;br /&gt;
If such actions are not properly carried out, an attacker could replay these session tokens in order to “resurrect” the session of a legitimate user and impersonate him/her (this attack is usually known as 'cookie replay'). Of course, a mitigating factor is that the attacker needs to be able to access those tokens (which are stored on the victim's PC), but, in a variety of cases, this may not be impossible or particularly difficult. &amp;lt;br&amp;gt;&lt;br /&gt;
The most common scenario for this kind of attack is a public computer that is used to access some private information (e.g., webmail, online bank account): if the user moves away from the computer, without explicitly logging out, and the session timeout is not implemented on the application, then an attacker could access to the same account even long time after, for instance, by simply pressing the “back” button of the browser.   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Black Box testing and example ==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The same approach that we have seen in the [[Testing for logout functionality (OWASP-SM-007)]] section can be applied when measuring the timeout logout.  &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The testing methodology is very similar. First, we have to check whether a timeout exists, for instance, by logging in and then killing some time reading some other Testing Guide chapter, waiting for the timeout logout to be triggered. As in the logout function, after the timeout has passed, all session tokens should be destroyed or be unusable.&lt;br /&gt;
&amp;lt;br&amp;gt; &lt;br /&gt;
Then, if the timeout is configured, we need to understand whether the timeout is enforced by the client or by the server (or both). If the session cookie is non-persistent (or, more in general, the session cookie does not store any data about the time), we can assume that the timeout is enforced by the server. If the session cookie contains some time related data (e.g., login time, or last access time, or expiration date for a persistent cookie), then it's possible that the client is involved in the timeout enforcing. In this case, we could try to modify the cookie (if it's not cryptographically protected) and see what happens to our session. For instance, we can set the cookie expiration date far in the future and see whether our session can be prolonged. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
As a general rule, everything should be checked server-side and it should not be possible, by re-setting the session cookies to previous values, to access the application again. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Gray Box testing and example ==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
We need to check that:&lt;br /&gt;
* The logout function effectively destroys all session token, or at least renders them unusable,&lt;br /&gt;
* The server performs proper checks on the session state, disallowing an attacker to replay previously destroyed session identifiers&lt;br /&gt;
* A timeout is enforced and it is properly enforced by the server. If the server uses an expiration time that is read from a session token that is sent by the client (but this is not advisable), then the token must be cryptographically protected from tampering.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Note: the most important thing is for the application to invalidate the session on the server side. Generally this means that the code must invoke the appropriate methods, e.g. HttpSession.invalidate() in Java and Session.abandon() in .NET. Clearing the cookies from the browser is advisable, but is not strictly necessary, since if the session is properly invalidated on the server, having the cookie in the browser will not help an attacker.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
'''OWASP Resources'''&lt;br /&gt;
* [[Session Management Cheat Sheet]]&lt;/div&gt;</summary>
		<author><name>Irene Abezgauz</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Testing_for_Session_puzzling_(OTG-SESS-008)&amp;diff=173247</id>
		<title>Testing for Session puzzling (OTG-SESS-008)</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Testing_for_Session_puzzling_(OTG-SESS-008)&amp;diff=173247"/>
				<updated>2014-04-22T21:42:51Z</updated>
		
		<summary type="html">&lt;p&gt;Irene Abezgauz: minor addition to description, minor edits&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:OWASP Testing Guide v4}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Brief Summary ==&lt;br /&gt;
&lt;br /&gt;
Session Variable Overloading (also known as Session Puzzling) is an application level vulnerability which can enable an attacker to perform a variety of malicious actions not limited to:&lt;br /&gt;
* Bypass efficient authentication enforcement mechanisms, and impersonate legitimate users.&lt;br /&gt;
* Elevate the privileges of a malicious user account, in an environment that would otherwise be considered foolproof.&lt;br /&gt;
* Skip over qualifying phases in multiphase processes, even if the process includes all the commonly recommended code level restrictions.&lt;br /&gt;
* Manipulate server-side values in indirect methods that cannot be predicted or detected.&lt;br /&gt;
* Execute traditional attacks in locations that were previously unreachable, or even considered secure.&lt;br /&gt;
&lt;br /&gt;
== Description of the Issue == &lt;br /&gt;
&lt;br /&gt;
This vulnerability occurs when an application uses the same session variable for more than one purpose.&lt;br /&gt;
An attacker can potentially access pages in an order unanticipated by the developers so that the session variable is set in one context and then used in another.&lt;br /&gt;
&lt;br /&gt;
For example an attacker could use session variable overloading to bypass authentication enforcement mechanisms&lt;br /&gt;
of applications that enforce authentication by validating the existence of session&lt;br /&gt;
variables that contain identity–related values, which are usually stored in the session after a successful authentication process. This means an attacker first accesses a location in the application that sets session context and then accesses privileged locations that examine this context. For example - an&lt;br /&gt;
authentication bypass attack vector could be executed by accessing a publicly&lt;br /&gt;
accessible entry point (e.g. a password recovery page) that populates the session with&lt;br /&gt;
an identical session variable, based on fixed values or on user originating input.&lt;br /&gt;
&lt;br /&gt;
== Black Box Testing and Examples ==&lt;br /&gt;
&lt;br /&gt;
This vulnerability can be detected and exploited by enumerating all of the session variables used by the application and in which context they are valid. In particular this is possible by accessing a sequence of entry points and then examining exit points. In case of black box testing, obviously, this procedure is difficult and requires some luck since every different sequence could lead to a different result. &lt;br /&gt;
&lt;br /&gt;
===Examples===&lt;br /&gt;
&lt;br /&gt;
A very simple example could be the password reset functionality that, in the entry point, could request to the user some identifying information as the username or the e-mail. This page might then populate the session with these identifying values, which are received directly from the client side, or obtained from queries or calculations based on the received input. At this point there may be some pages, in the application, that show private data based on this session object. In this manner the attacker could bypass the authentication process.&lt;br /&gt;
&lt;br /&gt;
== Gray Box testing and example ==&lt;br /&gt;
&lt;br /&gt;
The most effective way to detect these vulnerabilities is via a source code review.&lt;br /&gt;
&lt;br /&gt;
==Prevention==&lt;br /&gt;
&lt;br /&gt;
Session variables should only be used for a single consistent purpose.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
'''Whitepapers'''&amp;lt;br&amp;gt;&lt;br /&gt;
* Session Puzzles: http://puzzlemall.googlecode.com/files/Session%20Puzzles%20-%20Indirect%20Application%20Attack%20Vectors%20-%20May%202011%20-%20Whitepaper.pdf&lt;br /&gt;
* Session Puzzling and Session Race Conditions: http://sectooladdict.blogspot.com/2011/09/session-puzzling-and-session-race.html&lt;/div&gt;</summary>
		<author><name>Irene Abezgauz</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Testing_for_Error_Code_(OTG-ERR-001)&amp;diff=173246</id>
		<title>Testing for Error Code (OTG-ERR-001)</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Testing_for_Error_Code_(OTG-ERR-001)&amp;diff=173246"/>
				<updated>2014-04-22T21:38:24Z</updated>
		
		<summary type="html">&lt;p&gt;Irene Abezgauz: minor changes and additions&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:OWASP Testing Guide v4}}&lt;br /&gt;
&lt;br /&gt;
== Brief Summary ==&lt;br /&gt;
&lt;br /&gt;
Often, during a penetration test on web applications, we come up against many error codes generated from applications or web servers.&lt;br /&gt;
It's possible to cause these errors to be displayed by using a particular requests, either specially crafted with tools or created manually.&lt;br /&gt;
These codes are very useful to penetration testers during their activities, because they reveal a lot of information about databases, bugs, and other technological components directly linked with web applications.&lt;br /&gt;
Within this section we'll analyse the more common codes (error messages) and bring into focus the steps of vulnerability assessment.&lt;br /&gt;
The most important aspect for this activity is to focus one's attention on these errors, seeing them as a collection of information that will aid in the next steps of our analysis. A good collection can facilitate assessment efficiency by decreasing the overall time taken to perform the penetration test.&lt;br /&gt;
&lt;br /&gt;
Attackers sometimes use search engines to locate errors that disclose information. Searches can be performed to find any erroneous sites as random victims, or it is possible to search for errors in a specific site using the search engine filtering tools as described in [https://www.owasp.org/index.php/Testing:_Search_engine_discovery/reconnaissance_(OWASP-IG-002) 4.2.1 Conduct Search Engine Discovery and Reconnaissance for Information Leakage (OTG-INFO-001)]&lt;br /&gt;
&lt;br /&gt;
== Description of the Issue ==&lt;br /&gt;
&lt;br /&gt;
===Web Server Errors===&lt;br /&gt;
&lt;br /&gt;
A common error that we can see during testing is the HTTP 404 Not Found.&lt;br /&gt;
Often this error code provides useful details about the underlying web server and associated components. For example: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Not Found&lt;br /&gt;
The requested URL /page.html was not found on this server.&lt;br /&gt;
Apache/2.2.3 (Unix) mod_ssl/2.2.3 OpenSSL/0.9.7g  DAV/2 PHP/5.1.2 Server at localhost Port 80&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This error message can be generated by requesting a non-existent URL.&lt;br /&gt;
After the common message that shows a page not found, there is information about web server version, OS, modules and other products used.&lt;br /&gt;
This information can be very important from an OS and application type and version identification point of view.&lt;br /&gt;
&lt;br /&gt;
Other HTTP response codes such as 400 Bad Request, 405 Method Not Allowed, 501 Method Not Implemented, 408 Request Time-out and 505 HTTP Version Not Supported can be forced by an attacker. When receiving specially crafted requests, web servers may provide one of these error codes depending on their HTTP implementation. &lt;br /&gt;
&lt;br /&gt;
Testing for disclosed information in the Web Server error codes is related testing for information disclosed in the HTTP headers as described in the section [https://www.owasp.org/index.php/Fingerprint_Web_Server_(OTG-INFO-002) Fingerprint Web Server (OTG-INFO-002)]. &lt;br /&gt;
&lt;br /&gt;
===Application Server Errors===&lt;br /&gt;
&lt;br /&gt;
Application errors are returned by the application itself, rather than the web server. These could be error messages from framework code (ASP, JSP etc.) or they could be specific errors returned by the application code. &lt;br /&gt;
Detailed application errors typically provide information of server paths, installed libraries and application versions. &lt;br /&gt;
&lt;br /&gt;
===Database Errors===&lt;br /&gt;
&lt;br /&gt;
Database errors are those returned by the Database System when there is a problem with the query or the connection. Each Database system, such as MySQL, Oracle or MSSQL, has their own set of errors. Those errors can provide sensible information such as Database server IPs, tables, columns and login details.&lt;br /&gt;
&lt;br /&gt;
In addition, there are many SQL Injection exploitation techniques that utilize detailed error messages from the database driver, for in depth information on this issue see [https://www.owasp.org/index.php/Testing_for_SQL_Injection_%28OWASP-DV-005%29 Testing for SQL Injection (OWASP-DV-005)] for more information.&lt;br /&gt;
&lt;br /&gt;
Web server errors aren't the only useful output returned requiring security analysis. Consider the next example error message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Microsoft OLE DB Provider for ODBC Drivers (0x80004005)&lt;br /&gt;
[DBNETLIB][ConnectionOpen(Connect())] - SQL server does not exist or access denied &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
What happened? We will explain step-by-step below.&lt;br /&gt;
&lt;br /&gt;
In this example, the 80004005 is a generic IIS error code which indicates that it could not establish a connection to its associated database. In many cases, the error message will detail the type of the database. This will often indicate the underlying operating system by association. With this information, the penetration tester can plan an appropriate strategy for the security test.&lt;br /&gt;
&lt;br /&gt;
By manipulating the variables that are passed to the database connect string, we can invoke more detailed errors.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Microsoft OLE DB Provider for ODBC Drivers error '80004005'&lt;br /&gt;
[Microsoft][ODBC Access 97 ODBC driver Driver]General error Unable to open registry key 'DriverId'&lt;br /&gt;
&amp;lt;/pre&amp;gt; 	&lt;br /&gt;
&lt;br /&gt;
In this example, we can see a generic error in the same situation which reveals the type and version of the associated database system and a dependence on Windows operating system registry key values.&lt;br /&gt;
&lt;br /&gt;
Now we will look at a practical example with a security test against a web application that loses its link to its database server and does not handle the exception in a controlled manner. This could be caused by a database name resolution issue, processing of unexpected variable values, or other network problems.&lt;br /&gt;
&lt;br /&gt;
Consider the scenario where we have a database administration web portal, which can be used as a front end GUI to issue database queries, create tables, and modify database fields. During the POST of the logon credentials, the following error message is presented to the penetration tester. The message indicates the presence of a MySQL database server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Microsoft OLE DB Provider for ODBC Drivers (0x80004005)&lt;br /&gt;
[MySQL][ODBC 3.51 Driver]Unknown MySQL server host&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
		&lt;br /&gt;
If we see in the HTML code of the logon page the presence of a '''hidden field''' with a database IP, we can try to change this value in the URL with the address of database server under the penetration tester's control in an attempt to fool the application into thinking that the logon was successful.&lt;br /&gt;
&lt;br /&gt;
Another example: knowing the database server that services a web application, we can take advantage of this information to carry out a SQL Injection for that kind of database or a persistent XSS test.&lt;br /&gt;
&lt;br /&gt;
==Web Server Configuration==&lt;br /&gt;
&lt;br /&gt;
===Error Handling in IIS and ASP .net===&lt;br /&gt;
&lt;br /&gt;
ASP .net is a common framework from Microsoft used for developing web applications. IIS is one of the commonly used web servers. Errors occur in all applications, developers try to trap most errors but it is almost impossible to cover each and every exception (it is however possible to configure the web server to suppress detailed error messages from being returned to the user). &lt;br /&gt;
&lt;br /&gt;
IIS uses a set of custom error pages generally found in c:\winnt\help\iishelp\common to display errors like '404 page not found' to the user. These default pages can be changed and custom errors can be configured for IIS server. When IIS receives a request for an aspx page, the request is passed on to the dot net framework.&lt;br /&gt;
&lt;br /&gt;
There are various ways by which errors can be handled in dot net framework. Errors are handled at three places in ASP .net: &lt;br /&gt;
&lt;br /&gt;
# Inside Web.config customErrors section&lt;br /&gt;
# Inside global.asax Application_Error Sub&lt;br /&gt;
# At the the aspx or associated codebehind page in the Page_Error sub&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Handling errors using web.config'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;customErrors defaultRedirect=&amp;quot;myerrorpagedefault.aspx&amp;quot; mode=&amp;quot;On|Off|RemoteOnly&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;error statusCode=&amp;quot;404&amp;quot; redirect=&amp;quot;myerrorpagefor404.aspx&amp;quot;/&amp;gt;&lt;br /&gt;
   &amp;lt;error statusCode=&amp;quot;500&amp;quot; redirect=&amp;quot;myerrorpagefor500.aspx&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/customErrors&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
mode=&amp;quot;On&amp;quot; will turn on custom errors. mode=RemoteOnly will show custom errors to the remote web application users. A user accessing the server locally will be presented with the complete stack trace and custom errors will not be shown to him.&lt;br /&gt;
&lt;br /&gt;
All the errors, except those explicitly specified, will cause a redirection to the resource specified by defaultRedirect, i.e., myerrorpagedefault.aspx. &lt;br /&gt;
A status code 404 will be handled by myerrorpagefor404.aspx.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Handling errors in Global.asax'''&lt;br /&gt;
&lt;br /&gt;
When an error occurs, the Application_Error sub is called. A developer can write code for error handling/page redirection in this sub.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Private Sub Application_Error (ByVal sender As Object, ByVal e As System.EventArgs) &lt;br /&gt;
     Handles MyBase.Error&lt;br /&gt;
End Sub&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Handling errors in Page_Error sub'''&lt;br /&gt;
&lt;br /&gt;
This is similar to application error.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Private Sub Page_Error (ByVal sender As Object, ByVal e As System.EventArgs) &lt;br /&gt;
     Handles MyBase.Error&lt;br /&gt;
End Sub&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Error hierarchy in ASP .net'''&lt;br /&gt;
&lt;br /&gt;
Page_Error sub will be processed first, followed by global.asax Application_Error sub, and, finally, customErrors section in web.config file.&lt;br /&gt;
&lt;br /&gt;
Information Gathering on web applications with server-side technology is quite difficult, but the information discovered can be useful for the correct execution of an attempted exploit (for example, SQL injection or Cross Site Scripting (XSS) attacks) and can reduce false positives.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''How to test for ASP.net and IIS Error Handling'''&lt;br /&gt;
&lt;br /&gt;
Fire up your browser and type a random page name &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http:\\www.mywebserver.com\anyrandomname.asp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the server returns &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
The page cannot be found&lt;br /&gt;
&lt;br /&gt;
Internet Information Services&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
it means that IIS custom errors are not configured. Please note the .asp extension.&lt;br /&gt;
&lt;br /&gt;
Also test for .net custom errors. Type a random page name with aspx extension in your browser&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http:\\www.mywebserver.com\anyrandomname.aspx&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the server returns&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Server Error in '/' Application.&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
The resource cannot be found. &lt;br /&gt;
Description: HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable. Please review the following URL and make sure that it is spelled correctly. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
custom errors for .net are not configured.&lt;br /&gt;
&lt;br /&gt;
===Error Handling in Apache===&lt;br /&gt;
&lt;br /&gt;
Apache is a common HTTP server for serving HTML and PHP web pages. By default, Apache shows the server version, products installed and OS system in the HTTP error responses.&lt;br /&gt;
&lt;br /&gt;
Responses to the errors can be configured and customized globally, per site or per directory in the apache2.conf using the ErrorDocument directive [2]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ErrorDocument 404 “Customized Not Found error message”&lt;br /&gt;
ErrorDocument 403 /myerrorpagefor403.html&lt;br /&gt;
ErrorDocument 501 http://www.externaldomain.com/errorpagefor501.html&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Site administrators are able to manage their own errors using .htaccess file if the global directive AllowOverride is configured properly in apache2.conf [3]&lt;br /&gt;
&lt;br /&gt;
The information shown by Apache in the HTTP errors can also be configured using the directives ServerTokens [4] and ServerSignature [5] at apache2.conf configuration file. “ServerSignature Off” (On by default) removes the server information from the error responses, while ServerTokens [ProductOnly|Major|Minor|Minimal|OS|Full] (Full by default) defines what information has to be shown in the error pages.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Error Handling in Tomcat===&lt;br /&gt;
&lt;br /&gt;
Tomcat is a HTTP server to host JSP and Java Servlet applications. By default, Tomcat shows the server version in the HTTP error responses.&lt;br /&gt;
&lt;br /&gt;
Customization of the error responses can be configured in the configuration file web.xml.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;error-page&amp;gt;&lt;br /&gt;
	&amp;lt;error-code&amp;gt;404&amp;lt;/error-code&amp;gt;&lt;br /&gt;
	&amp;lt;location&amp;gt;/myerrorpagefor404.html&amp;lt;/location&amp;gt;&lt;br /&gt;
&amp;lt;/error-page&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Black Box Testing Examples ==&lt;br /&gt;
Below are some examples of testing for detailed error messages returned to the user. Each of the below examples has specific information about the operating system, application version, etc.&lt;br /&gt;
&lt;br /&gt;
'''Test: 404 Not Found'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
telnet &amp;lt;host target&amp;gt; 80&lt;br /&gt;
GET /&amp;lt;wrong page&amp;gt; HTTP/1.1&lt;br /&gt;
host: &amp;lt;host target&amp;gt;&lt;br /&gt;
&amp;lt;CRLF&amp;gt;&amp;lt;CRLF&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
'''Result:'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
HTTP/1.1 404 Not Found&lt;br /&gt;
Date: Sat, 04 Nov 2006 15:26:48 GMT&lt;br /&gt;
Server: Apache/2.2.3 (Unix) mod_ssl/2.2.3 OpenSSL/0.9.7g&lt;br /&gt;
Content-Length: 310&lt;br /&gt;
Connection: close&lt;br /&gt;
Content-Type: text/html; charset=iso-8859-1&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;title&amp;gt;404 Not Found&amp;lt;/title&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;address&amp;gt;Apache/2.2.3 (Unix) mod_ssl/2.2.3 OpenSSL/0.9.7g at &amp;lt;host target&amp;gt; Port 80&amp;lt;/address&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Test:'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Network problems leading to the application being unable to access the database server&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
'''Result:'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Microsoft OLE DB Provider for ODBC Drivers (0x80004005) '&lt;br /&gt;
[MySQL][ODBC 3.51 Driver]Unknown MySQL server host&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Test:'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Authentication failure due to missing credentials&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
'''Result:'''&lt;br /&gt;
&lt;br /&gt;
Firewall version used for authentication:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Error 407&lt;br /&gt;
FW-1 at &amp;lt;firewall&amp;gt;: Unauthorized to access the document.&lt;br /&gt;
•  Authorization is needed for FW-1.&lt;br /&gt;
•  The authentication required by FW-1 is: unknown.&lt;br /&gt;
•  Reason for failure of last attempt: no user&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Test: 400 Bad Request'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
telnet &amp;lt;host target&amp;gt; 80&lt;br /&gt;
GET / HTTP/1.1&lt;br /&gt;
&amp;lt;CRLF&amp;gt;&amp;lt;CRLF&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
'''Result:'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
HTTP/1.1 400 Bad Request&lt;br /&gt;
Date: Fri, 06 Dec 2013 23:57:53 GMT&lt;br /&gt;
Server: Apache/2.2.22 (Ubuntu) PHP/5.3.10-1ubuntu3.9 with Suhosin-Patch&lt;br /&gt;
Vary: Accept-Encoding&lt;br /&gt;
Content-Length: 301&lt;br /&gt;
Connection: close&lt;br /&gt;
Content-Type: text/html; charset=iso-8859-1&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;title&amp;gt;400 Bad Request&amp;lt;/title&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;address&amp;gt;Apache/2.2.22 (Ubuntu) PHP/5.3.10-1ubuntu3.9 with Suhosin-Patch at 127.0.1.1 Port 80&amp;lt;/address&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Test: 405 Method Not Allowed'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
telnet &amp;lt;host target&amp;gt; 80&lt;br /&gt;
PUT /index.html HTTP/1.1&lt;br /&gt;
Host: &amp;lt;host target&amp;gt;&lt;br /&gt;
&amp;lt;CRLF&amp;gt;&amp;lt;CRLF&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
'''Result:'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
HTTP/1.1 405 Method Not Allowed&lt;br /&gt;
Date: Fri, 07 Dec 2013 00:48:57 GMT&lt;br /&gt;
Server: Apache/2.2.22 (Ubuntu) PHP/5.3.10-1ubuntu3.9 with Suhosin-Patch&lt;br /&gt;
Allow: GET, HEAD, POST, OPTIONS&lt;br /&gt;
Vary: Accept-Encoding&lt;br /&gt;
Content-Length: 315&lt;br /&gt;
Connection: close&lt;br /&gt;
Content-Type: text/html; charset=iso-8859-1&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;title&amp;gt;405 Method Not Allowed&amp;lt;/title&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;address&amp;gt;Apache/2.2.22 (Ubuntu) PHP/5.3.10-1ubuntu3.9 with Suhosin-Patch at &amp;lt;host target&amp;gt; Port 80&amp;lt;/address&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Test: 408 Request Time-out'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
telnet &amp;lt;host target&amp;gt; 80&lt;br /&gt;
GET / HTTP/1.1&lt;br /&gt;
-	Wait X seconds – (Depending on the target server, 21 seconds for Apache by default)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
'''Result:'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
HTTP/1.1 408 Request Time-out&lt;br /&gt;
Date: Fri, 07 Dec 2013 00:58:33 GMT&lt;br /&gt;
Server: Apache/2.2.22 (Ubuntu) PHP/5.3.10-1ubuntu3.9 with Suhosin-Patch&lt;br /&gt;
Vary: Accept-Encoding&lt;br /&gt;
Content-Length: 298&lt;br /&gt;
Connection: close&lt;br /&gt;
Content-Type: text/html; charset=iso-8859-1&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;title&amp;gt;408 Request Time-out&amp;lt;/title&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;address&amp;gt;Apache/2.2.22 (Ubuntu) PHP/5.3.10-1ubuntu3.9 with Suhosin-Patch at &amp;lt;host target&amp;gt; Port 80&amp;lt;/address&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Test: 501 Method Not Implemented'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
telnet &amp;lt;host target&amp;gt; 80&lt;br /&gt;
RENAME /index.html HTTP/1.1&lt;br /&gt;
Host: &amp;lt;host target&amp;gt;&lt;br /&gt;
&amp;lt;CRLF&amp;gt;&amp;lt;CRLF&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
'''Result:'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
HTTP/1.1 501 Method Not Implemented&lt;br /&gt;
Date: Fri, 08 Dec 2013 09:59:32 GMT&lt;br /&gt;
Server: Apache/2.2.22 (Ubuntu) PHP/5.3.10-1ubuntu3.9 with Suhosin-Patch&lt;br /&gt;
Allow: GET, HEAD, POST, OPTIONS&lt;br /&gt;
Vary: Accept-Encoding&lt;br /&gt;
Content-Length: 299&lt;br /&gt;
Connection: close&lt;br /&gt;
Content-Type: text/html; charset=iso-8859-1&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;title&amp;gt;501 Method Not Implemented&amp;lt;/title&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;address&amp;gt;Apache/2.2.22 (Ubuntu) PHP/5.3.10-1ubuntu3.9 with Suhosin-Patch at &amp;lt;host target&amp;gt; Port 80&amp;lt;/address&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Test:'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Enumeration of directories by using access denied error messages:&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
http://&amp;lt;host&amp;gt;/&amp;lt;dir&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
'''Result:'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Directory Listing Denied&lt;br /&gt;
This Virtual Directory does not allow contents to be listed.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Forbidden&lt;br /&gt;
You don't have permission to access /&amp;lt;dir&amp;gt; on this server.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
* [1] ErrorMint - http://sourceforge.net/projects/errormint/ &amp;lt;br&amp;gt;&lt;br /&gt;
* [2] ZAP Proxy - https://www.owasp.org/index.php/OWASP_Zed_Attack_Proxy_Project &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
* [1] [[http://www.ietf.org/rfc/rfc2616.txt?number=2616 RFC2616]] Hypertext Transfer Protocol -- HTTP/1.1&lt;br /&gt;
* [2] [[http://httpd.apache.org/docs/2.2/mod/core.html#errordocument ErrorDocument]] Apache ErrorDocument Directive&lt;br /&gt;
* [3] [[http://httpd.apache.org/docs/2.2/mod/core.html#allowoverride AllowOverride]] Apache AllowOverride Directive&lt;br /&gt;
* [4] [[http://httpd.apache.org/docs/2.2/mod/core.html#servertokens ServerTokens]] Apache ServerTokens Directive&lt;br /&gt;
* [5] [[http://httpd.apache.org/docs/2.2/mod/core.html#serversignature ServerSignature]] Apache ServerSignature Directive&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP .NET Project]]&lt;/div&gt;</summary>
		<author><name>Irene Abezgauz</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Testing_for_Stack_Traces_(OTG-ERR-002)&amp;diff=173245</id>
		<title>Testing for Stack Traces (OTG-ERR-002)</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Testing_for_Stack_Traces_(OTG-ERR-002)&amp;diff=173245"/>
				<updated>2014-04-22T21:26:18Z</updated>
		
		<summary type="html">&lt;p&gt;Irene Abezgauz: minor changes and additions&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:OWASP Testing Guide v4}}&lt;br /&gt;
&lt;br /&gt;
== Brief Summary ==&lt;br /&gt;
&lt;br /&gt;
Stack traces are not vulnerabilities by themselves, but they often reveal information that is interesting to an attacker. Attackers attempt to generate these stack traces by tampering with the input to the web application with malformed HTTP requests and other input data.&lt;br /&gt;
&lt;br /&gt;
== Description of the Issue ==&lt;br /&gt;
&lt;br /&gt;
If the application responds with stack traces that are not managed it could reveal information useful to attackers. This information could then be used in further attacks. Providing debugging information as a result of operations that generate errors is considered a bad practice due to multiple reasons. For example it may contain information on internal workings of the application such as relative paths of the point where the application is installed or how objects are referenced internally.  &lt;br /&gt;
&lt;br /&gt;
== Black Box testing and example ==&lt;br /&gt;
&lt;br /&gt;
There are a variety of techniques that will cause exception messages to be sent in an HTTP response. Note that in most cases this will be an HTML page, but exceptions can be sent as part of SOAP or REST responses too.&lt;br /&gt;
&lt;br /&gt;
Some things to attempt: invalid input (such as input that is not consistent with application logic, input that contains non alphanumeric characters or query syntax, empty inputs, inputs that are too long etc.), access to internal pages without authentication, bypassing application flow etc. all these could lead to application errors that may contain stack traces. It is recommended to use a fuzzer in addition to any manual testing.&lt;br /&gt;
&lt;br /&gt;
Some tools, such as [[OWASP_Zed_Attack_Proxy_Project|OWASP ZAP]] and Burp proxy will automatically detect these exceptions in the response stream as you are doing other penetration and testing work.&lt;br /&gt;
&lt;br /&gt;
== Gray Box testing and example ==&lt;br /&gt;
&lt;br /&gt;
Search the code for the calls that cause an exception to be rendered to a String or output stream. For example, in Java this might be code in a JSP that looks like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;lt;% e.printStackTrace( new PrintWriter( out ) ) %&amp;amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In some cases, the stack trace will be specifically formatted into HTML, so be careful of accesses to stack trace elements.&lt;br /&gt;
&lt;br /&gt;
Search the configuration to verify error handling configuration and the use of default error pages.  For example, in Java this configuration can be found in web.xml.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
* [1] [[http://www.ietf.org/rfc/rfc2616.txt?number=2616 RFC2616]] Hypertext Transfer Protocol -- HTTP/1.1&lt;/div&gt;</summary>
		<author><name>Irene Abezgauz</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Testing_for_cookies_attributes_(OTG-SESS-002)&amp;diff=173244</id>
		<title>Testing for cookies attributes (OTG-SESS-002)</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Testing_for_cookies_attributes_(OTG-SESS-002)&amp;diff=173244"/>
				<updated>2014-04-22T21:15:06Z</updated>
		
		<summary type="html">&lt;p&gt;Irene Abezgauz: small additions&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:OWASP Testing Guide v4}}&lt;br /&gt;
&lt;br /&gt;
== Brief Summary ==&lt;br /&gt;
Cookies are often a key attack vector for malicious users (typically targeting other users) and, as such, the application should always take due diligence to protect cookies.  In this section, we will look at how an application can take the necessary precautions when assigning cookies, and how to test that these attributes have been correctly configured.&lt;br /&gt;
&lt;br /&gt;
== Description of the Issue == &lt;br /&gt;
The importance of secure use of Cookies cannot be understated, especially within dynamic web applications, which need to maintain state across a stateless protocol such as HTTP.  To understand the importance of cookies it is imperative to understand what they are primarily used for.  These primary functions usually consist of being used as a session authorization/authentication token or as a temporary data container.  Thus, if an attacker were by some means able to acquire a session token (for example, by exploiting a cross site scripting vulnerability or by sniffing an unencrypted session), then he/she could use this cookie to hijack a valid session.  Additionally, cookies are set to maintain state across multiple requests.  Since HTTP is stateless, the server cannot determine if a request it receives is part of a current session or the start of a new session without some type of identifier.  This identifier is very commonly a cookie although other methods are also possible.  As you can imagine, there are many different types of applications that need to keep track of session state across multiple requests.  The primary one that comes to mind would be an online store.  As a user adds multiple items to a shopping cart, this data needs to be retained in subsequent requests to the application.  Cookies are very commonly used for this task and are set by the application using the Set-Cookie directive in the application's HTTP response, and is usually in a name=value format (if cookies are enabled and if they are supported, which is the case for all modern web browsers).  Once an application has told the browser to use a particular cookie, the browser will send this cookie in each subsequent request.  A cookie can contain data such as items from an online shopping cart, the price of these items, the quantity of these items, personal information, user IDs, etc.  Due to the sensitive nature of information in cookies, they are typically encoded or encrypted in an attempt to protect the information they contain.  Often, multiple cookies will be set (separated by a semicolon) upon subsequent requests. For example, in the case of an online store, a new cookie could be set as you add multiple items to your shopping cart.  Additionally, you will typically have a cookie for authentication (session token as indicated above) once you log in, and multiple other cookies used to identify the items you wish to purchase and their auxiliary information (i.e., price and quantity) in the online store type of application.   &lt;br /&gt;
&lt;br /&gt;
Now that you have an understanding of how cookies are set, when they are set, what they are used for, why they are used, and their importance, let's take a look at what attributes can be set for a cookie and how to test if they are secure.  The following is a list of the attributes that can be set for each cookie and what they mean.  The next section will focus on how to test for each attribute.&lt;br /&gt;
&lt;br /&gt;
*secure - This attribute tells the browser to only send the cookie if the request is being sent over a secure channel such as HTTPS.  This will help protect the cookie from being passed over unencrypted requests.  &lt;br /&gt;
If the application can be accessed over both HTTP and HTTPS, then there is the potential that the cookie can be sent in clear text.&lt;br /&gt;
&lt;br /&gt;
*HttpOnly - This attribute is used to help prevent attacks such as cross-site scripting, since it does not allow the cookie to be accessed via a client side script such as JavaScript.  Note that not all browsers support this functionality.&lt;br /&gt;
&lt;br /&gt;
*domain -  This attribute is used to compare against the domain of the server in which the URL is being requested.  If the domain matches or if it is a sub-domain, then the path attribute will be checked next.  &lt;br /&gt;
Note that only hosts within the specified domain can set a cookie for that domain.  Also the domain attribute cannot be a top level domain (such as .gov or .com) to prevent servers from setting arbitrary cookies for another domain.  If the domain attribute is not set, then the hostname of the server which generated the cookie is used as the default value of the domain. &lt;br /&gt;
For example, if a cookie is set by an application at app.mydomain.com with no domain attribute set, then the cookie would be resubmitted for all subsequent requests for app.mydomain.com and its subdomains (such as hacker.app.mydomain.com), but not to otherapp.mydomain.com.  If a developer wanted to loosen this restriction, then he could set the domain attribute to mydomain.com.  In this case the cookie would be sent to all requests for app.mydomain.com and its subdomains, such as hacker.app.mydomain.com, and even bank.mydomain.com.&lt;br /&gt;
If there was a vulnerable server on a subdomain (for example, otherapp.mydomain.com) and the domain attribute has been set too loosely (for example, mydomain.com), then the vulnerable server could be used to harvest cookies (such as session tokens).&lt;br /&gt;
 &lt;br /&gt;
*path - In addition to the domain, the URL path can be specified for which the cookie is valid.  If the domain and path match, then the cookie will be sent in the request.&lt;br /&gt;
Just as with the domain attribute, if the path attribute is set too loosely, then it could leave the application vulnerable to attacks by other applications on the same server.  For example, if the path attribute was set to the web server root &amp;quot;/&amp;quot;, then the application cookies will be sent to every application within the same domain. &lt;br /&gt;
&lt;br /&gt;
*expires - This attribute is used to set persistent cookies, since the cookie does not expire until the set date is exceeded.  This persistent cookie will be used by this browser session and subsequent sessions until the cookie expires.  Once the expiration date has exceeded, the browser will delete the cookie.  Alternatively, if this attribute is not set, then the cookie is only valid in the current browser session and the cookie will be deleted when the session ends.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Black Box testing and example ==&lt;br /&gt;
'''Testing for cookie attribute vulnerabilities:''' &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
By using an intercepting proxy or traffic intercepting browser plug-in, trap all responses where a cookie is set by the application (using the Set-cookie directive) and inspect the cookie for the following:&lt;br /&gt;
&lt;br /&gt;
*Secure Attribute - Whenever a cookie contains sensitive information or is a session token, then it should always be passed using an encrypted tunnel.  For example, after logging into an application and a session token is set using a cookie, then verify it is tagged using the &amp;quot;;secure&amp;quot; flag.  If it is not, then the browser would agree to pass it via an unencrypted channel such as using HTTP, and this could lead to an attacker leading users into submitting their cookie over an insecure channel. &lt;br /&gt;
&lt;br /&gt;
*HttpOnly Attribute - This attribute should always be set even though not every browser supports it. This attribute aids in securing the cookie from being accessed by a client side script, it does not eliminate cross site scripting risks but does eliminate some exploitation vectors. Check to see if the &amp;quot;;HttpOnly&amp;quot; tag has been set. &lt;br /&gt;
&lt;br /&gt;
*Domain Attribute - Verify that the domain has not been set too loosely.  As noted above, it should only be set for the server that needs to receive the cookie.  For example if the application resides on server app.mysite.com, then it should be set to &amp;quot;; domain=app.mysite.com&amp;quot; and NOT &amp;quot;; domain=.mysite.com&amp;quot; as this would allow other potentially vulnerable servers to receive the cookie. &lt;br /&gt;
&lt;br /&gt;
*Path Attribute - Verify that the path attribute, just as the Domain attribute, has not been set too loosely.  Even if the Domain attribute has been configured as tight as possible, if the path is set to the root directory &amp;quot;/&amp;quot; then it can be vulnerable to less secure applications on the same server.  For example, if the application resides at /myapp/, then verify that the cookies path is set to &amp;quot;; path=/myapp/&amp;quot; and NOT &amp;quot;; path=/&amp;quot; or &amp;quot;; path=/myapp&amp;quot;.  Notice here that the trailing &amp;quot;/&amp;quot; must be used after myapp.  If it is not used, the browser will send the cookie to any path that matches &amp;quot;myapp&amp;quot; such as &amp;quot;myapp-exploited&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
*Expires Attribute - Verify that, if this attribute is set to a time in the future, that the cookie does not contain any sensitive information.  For example, if a cookie is set to &amp;quot;; expires=Fri, 13-Jun-2010 13:45:29 GMT&amp;quot; and it is currently June 10th 2008, then you want to inspect the cookie.  If the cookie is a session token that is stored on the user's hard drive then an attacker or local user (such as an admin) who has access to this cookie can access the application by resubmitting this token until the expiration date passes. &lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
'''Whitepapers'''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*RFC 2965 - HTTP State Management Mechanism - http://tools.ietf.org/html/rfc2965&lt;br /&gt;
&lt;br /&gt;
*RFC 2616 – Hypertext Transfer Protocol – HTTP 1.1 - http://tools.ietf.org/html/rfc2616&lt;br /&gt;
&lt;br /&gt;
*The important &amp;quot;expires&amp;quot; attribute of Set-Cookie http://seckb.yehg.net/2012/02/important-expires-attribute-of-set.html&lt;br /&gt;
&lt;br /&gt;
* HttpOnly Session ID in URL and Page Body http://seckb.yehg.net/2012/06/httponly-session-id-in-url-and-page.html &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Tools'''&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Intercepting Proxy:'''&lt;br /&gt;
&lt;br /&gt;
* '''[[:OWASP Zed Attack Proxy Project]]'''&lt;br /&gt;
&lt;br /&gt;
'''Browser Plug-in:'''&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;TamperIE&amp;quot; for Internet Explorer - &lt;br /&gt;
http://www.bayden.com/TamperIE/&lt;br /&gt;
&lt;br /&gt;
*Adam Judson: &amp;quot;Tamper Data&amp;quot; for Firefox - &lt;br /&gt;
https://addons.mozilla.org/en-US/firefox/addon/966&lt;/div&gt;</summary>
		<author><name>Irene Abezgauz</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Enumerate_Infrastructure_and_Application_Admin_Interfaces_(OTG-CONFIG-005)&amp;diff=173242</id>
		<title>Enumerate Infrastructure and Application Admin Interfaces (OTG-CONFIG-005)</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Enumerate_Infrastructure_and_Application_Admin_Interfaces_(OTG-CONFIG-005)&amp;diff=173242"/>
				<updated>2014-04-22T21:03:11Z</updated>
		
		<summary type="html">&lt;p&gt;Irene Abezgauz: minor corrections and changes, added a tools section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:OWASP Testing Guide v4}}&lt;br /&gt;
&lt;br /&gt;
== Brief Summary ==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Administrator interfaces may be present in the application or on the application server to allow certain users to undertake privileged activities on the site. Tests should be undertaken to reveal if and how this privileged functionality can be accessed by an unauthorized or standard user.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Description of the Issue == &lt;br /&gt;
An application may require an administrator interface to enable a privileged user to access functionality that may make changes to how the site functions. Such changes may include:&lt;br /&gt;
&lt;br /&gt;
- user account provisioning&amp;lt;br&amp;gt;&lt;br /&gt;
- site design and layout&amp;lt;br&amp;gt;&lt;br /&gt;
- data manipulation&amp;lt;br&amp;gt;&lt;br /&gt;
- configuration changes&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In many instances, such interfaces do not have sufficient controls to protect them from unauthorized access. Testing is aimed at discovering these administrator interfaces and accessing functionality intended for the privileged users.&lt;br /&gt;
&lt;br /&gt;
== Black Box testing and example ==&lt;br /&gt;
The following describes vectors that may be used to test for the presence of administrative interfaces. These techniques may also be used for testing for related issues including privilege escalation, and are described elsewhere in this guide(for example [https://www.owasp.org/index.php/Testing_for_Bypassing_Authorization_Schema_%28OWASP-AZ-002%29 Testing for Bypassing Authorization Schema (OWASP-AZ-002)] and [https://www.owasp.org/index.php/Testing_for_Insecure_Direct_Object_References_%28OWASP-AZ-004%29 Testing for Insecure Direct Object References (OWASP-AZ-004)] in greater detail. &lt;br /&gt;
&lt;br /&gt;
* Directory and file enumeration - An administrative interface may be present but not visibly available to the tester. Attempting to guess the path of the administrative interface may be as simple as requesting: ''/admin or /administrator etc..'' or in some scenarios can be revealed within seconds using [http://www.exploit-db.com/google-dorks Google dorks].&lt;br /&gt;
* There are many tools available to perform brute forcing of server contents, see the tools section below for more information.  &lt;br /&gt;
&lt;br /&gt;
A tester may have to also identify the filename of the administration page. Forcibly browsing to the identified page may provide access to the interface.&lt;br /&gt;
&lt;br /&gt;
* Comments and links in source - Many sites use common code that is loaded for all site users. By examining all source sent to the client, links to administrator functionality may be discovered and should be investigated. &lt;br /&gt;
&lt;br /&gt;
* Reviewing server and application documentation - If the application server or application is deployed in its default configuration it may be possible to access the administration interface using information described in configuration or help documentation. Default password lists should be consulted if an administrative interface is found and credentials are required.&lt;br /&gt;
&lt;br /&gt;
* Publicly available information – many applications such as wordpress have default administrative interfaces &lt;br /&gt;
&lt;br /&gt;
* Alternative server port - Administration interfaces may be seen on a different port on the host than the main application. For example, Apache Tomcat's Administration interface can often be seen on port 8080.&lt;br /&gt;
&lt;br /&gt;
* Parameter tampering - A GET or POST parameter or a cookie variable may be required to enable the administrator functionality. Clues to this include the presence of hidden fields such as:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;admin&amp;quot; value=&amp;quot;no&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or in a cookie:&lt;br /&gt;
&lt;br /&gt;
 Cookie: session_cookie; useradmin=0&lt;br /&gt;
&lt;br /&gt;
Once an administrative interface has been discovered, a combination of the above techniques may be used to attempt to bypass authentication. If this fails, the tester may wish to attempt a brute force attack. In such an instance the tester should be aware of the potential for administrative account lockout if such functionality is present.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Gray Box testing and example == &lt;br /&gt;
A more detailed examination of the server and application components should be undertaken to ensure hardening (i.e. administrator pages are not accessible to everyone through the use of IP filtering or other controls), and where applicable, verification that all components do not use default credentials or configurations.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Source code should be reviewed to ensure that the authorization and authentication model ensures clear separation of duties between normal users and site administrators. User interface functions shared between normal and administrator users should be reviewed to ensure clear separation between the drawing of such components and information leakage from such shared functionality.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
* Default Password list: http://www.governmentsecurity.org/articles/DefaultLoginsandPasswordsforNetworkedDevices.php&lt;br /&gt;
* Default Password list: http://www.cirt.net/passwords&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
* [https://www.owasp.org/index.php/Category:OWASP_DirBuster_Project Dirbuster] This currently inactive OWASP project is still a great tool for brute forcing directories and files on the server.&lt;br /&gt;
* [https://www.thc.org/thc-hydra/ THC-HYDRA] is a tool that allows brute-forcing of many interfaces, including form-based HTTP authentication.&lt;br /&gt;
&lt;br /&gt;
A brute forcer is much better when it uses a good dictionary, for example the [https://www.netsparker.com/blog/web-security/svn-digger-better-lists-for-forced-browsing/ netsparker] dictionary.&lt;/div&gt;</summary>
		<author><name>Irene Abezgauz</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=User:Irene_Abezgauz&amp;diff=173237</id>
		<title>User:Irene Abezgauz</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=User:Irene_Abezgauz&amp;diff=173237"/>
				<updated>2014-04-22T20:49:05Z</updated>
		
		<summary type="html">&lt;p&gt;Irene Abezgauz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
I've been in application security for over a decade, as penetration tester, consultant, researcher, social engineering enthusiast and breaker of things in general. &lt;br /&gt;
&amp;lt;br&amp;gt; Currently I'm VP Product Management at [http://www.quotium.com Quotium] - creating rather than breaking for a change! &lt;br /&gt;
&lt;br /&gt;
I also lead the Seeker Research Center, where we are constantly on the look for new techniques and exploitation vectors, as well as causing vendors to scratch their heads occasionally when we identify a new vulnerability in one of their products.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Current OWASP involvement: &lt;br /&gt;
      OWASP Testing Guide v3&lt;br /&gt;
      OWASP Testing Guide v4&lt;br /&gt;
      Speaker in OWASP Conferences&lt;/div&gt;</summary>
		<author><name>Irene Abezgauz</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Testing_for_Sensitive_information_sent_via_unencrypted_channels_(OTG-CRYPST-003)&amp;diff=173232</id>
		<title>Testing for Sensitive information sent via unencrypted channels (OTG-CRYPST-003)</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Testing_for_Sensitive_information_sent_via_unencrypted_channels_(OTG-CRYPST-003)&amp;diff=173232"/>
				<updated>2014-04-22T20:35:39Z</updated>
		
		<summary type="html">&lt;p&gt;Irene Abezgauz: some corrections, some clarifications&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:OWASP Testing Guide v4}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Brief Summary ==&lt;br /&gt;
Sensitive data must be protected when it is transmitted through the network. If data is transmitted over HTTPS or encrypted in another way the protection mechanism must not have limitations or vulnerabilities, as explained in the broader article [https://www.owasp.org/index.php?title=Testing_for_Weak_SSL/TSL_Ciphers,_Insufficient_Transport_Layer_Protection_%28OWASP-EN-002%29 Testing for Weak SSL/TSL Ciphers, Insufficient Transport Layer Protection (OWASP-EN-002)] [1] and in other OWASP documentation [2], [3], [4], [5]. As a rule of thumb if data must be protected when it is stored, this data must also be protected during transmission. Some examples for sensitive data are:&lt;br /&gt;
* Information used in Authentication (e.g. Credentials, PINs, Session identifiers, Tokens, Cookies…)&lt;br /&gt;
* Information protected by Laws, Regulations or specific organizational Policy (e.g. Credit Cards, Customers data) &lt;br /&gt;
&lt;br /&gt;
== Description of the Issue ==&lt;br /&gt;
If the application transmits sensitive information via unencrypted channels - e.g. HTTP - it is considered a security risk. Some examples are Basic authentication which sends authentication credentials in plain-text over HTTP, form based authentication credentials sent via HTTP, or plain-text transmission of any other information considered sensitive due to regulations, laws, organizational policy or application business logic. &lt;br /&gt;
&lt;br /&gt;
== Black Box testing and examples ==&lt;br /&gt;
Various types of information which must be protected, could be transmitted by the application in clear text. It is possible to check if this information is transmitted over HTTP instead of HTTPS, or whether weak cyphers are used. See more information about insecure transmission of credentials [https://www.owasp.org/index.php/Top_10_2013-A6-Sensitive_Data_Exposure Top 10 2013-A6-Sensitive Data Exposure] [3] or insufficient transport layer protection in general [https://www.owasp.org/index.php/Top_10_2010-A9-Insufficient_Transport_Layer_Protection Top 10 2010-A9-Insufficient Transport Layer Protection] [2].&lt;br /&gt;
&lt;br /&gt;
=== Example 1: Basic Authentication over HTTP ===&lt;br /&gt;
A typical example is the usage of Basic Authentication over HTTP. When using Basic Authentication, user credentials are encoded rather than encrypted, and are sent as HTTP headers. In the example below we use curl [5] to test for this issue. Note how the application uses Basic authentication, and HTTP rather than HTTPS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ curl -kis http://example.com/restricted/ &lt;br /&gt;
HTTP/1.1 401 Authorization Required &lt;br /&gt;
Date: Fri, 01 Aug 2013 00:00:00 GMT &lt;br /&gt;
WWW-Authenticate: Basic realm=&amp;quot;Restricted Area&amp;quot; &lt;br /&gt;
Accept-Ranges: bytes Vary: &lt;br /&gt;
Accept-Encoding Content-Length: 162 &lt;br /&gt;
Content-Type: text/html  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;html&amp;gt;&amp;lt;head&amp;gt;&amp;lt;title&amp;gt;401 Authorization Required&amp;lt;/title&amp;gt;&amp;lt;/head&amp;gt; &lt;br /&gt;
&amp;lt;body bgcolor=white&amp;gt; &amp;lt;h1&amp;gt;401 Authorization Required&amp;lt;/h1&amp;gt;  Invalid login credentials!  &amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example 2: Form-Based Authentication Performed over HTTP ===&lt;br /&gt;
Another typical example is authentication forms which transmit user authentication credentials over HTTP. In the example below we see HTTP being used in the &amp;quot;action&amp;quot; attribute of the form. It is also possible to see this issue by examining the HTTP traffic with an interception proxy.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;form action=&amp;quot;http://example.com/login&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;label for=&amp;quot;username&amp;quot;&amp;gt;User:&amp;lt;/label&amp;gt; &amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;username&amp;quot; name=&amp;quot;username&amp;quot; value=&amp;quot;&amp;quot;/&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
	&amp;lt;label for=&amp;quot;password&amp;quot;&amp;gt;Password:&amp;lt;/label&amp;gt; &amp;lt;input type=&amp;quot;password&amp;quot; id=&amp;quot;password&amp;quot; name=&amp;quot;password&amp;quot; value=&amp;quot;&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Login&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Example 3: Cookie Containing Session ID Sent over HTTP ===&lt;br /&gt;
The Session ID Cookie must be transmitted over protected channels. If the cookie does not have the secure flag set [6] it is permitted for the application to transmit it unencrypted.. Note below the setting of the cookie is done without the Secure flag, and the entire login process is performed in HTTP and not HTTPS. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
https://secure.example.com/login&lt;br /&gt;
&lt;br /&gt;
POST /login HTTP/1.1&lt;br /&gt;
Host: secure.example.com&lt;br /&gt;
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:25.0) Gecko/20100101 Firefox/25.0&lt;br /&gt;
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8&lt;br /&gt;
Accept-Language: en-US,en;q=0.5&lt;br /&gt;
Accept-Encoding: gzip, deflate&lt;br /&gt;
Referer: https://secure.example.com/&lt;br /&gt;
Content-Type: application/x-www-form-urlencoded&lt;br /&gt;
Content-Length: 188&lt;br /&gt;
&lt;br /&gt;
HTTP/1.1 302 Found&lt;br /&gt;
Date: Tue, 03 Dec 2013 21:18:55 GMT&lt;br /&gt;
Server: Apache&lt;br /&gt;
Cache-Control: no-store, no-cache, must-revalidate, max-age=0&lt;br /&gt;
Expires: Thu, 01 Jan 1970 00:00:00 GMT&lt;br /&gt;
Pragma: no-cache&lt;br /&gt;
Set-Cookie: JSESSIONID=BD99F321233AF69593EDF52B123B5BDA; expires=Fri, 01-Jan-2014 00:00:00 GMT; path=/; domain=example.com; httponly&lt;br /&gt;
Location: private/&lt;br /&gt;
X-Content-Type-Options: nosniff&lt;br /&gt;
X-XSS-Protection: 1; mode=block&lt;br /&gt;
X-Frame-Options: SAMEORIGIN&lt;br /&gt;
Content-Length: 0&lt;br /&gt;
Keep-Alive: timeout=1, max=100&lt;br /&gt;
Connection: Keep-Alive&lt;br /&gt;
Content-Type: text/html&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------&lt;br /&gt;
http://example.com/private&lt;br /&gt;
&lt;br /&gt;
GET /private HTTP/1.1&lt;br /&gt;
Host: example.com&lt;br /&gt;
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:25.0) Gecko/20100101 Firefox/25.0&lt;br /&gt;
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8&lt;br /&gt;
Accept-Language: en-US,en;q=0.5&lt;br /&gt;
Accept-Encoding: gzip, deflate&lt;br /&gt;
Referer: https://secure.example.com/login&lt;br /&gt;
Cookie: JSESSIONID=BD99F321233AF69593EDF52B123B5BDA;&lt;br /&gt;
Connection: keep-alive&lt;br /&gt;
&lt;br /&gt;
HTTP/1.1 200 OK&lt;br /&gt;
Cache-Control: no-store&lt;br /&gt;
Pragma: no-cache&lt;br /&gt;
Expires: 0&lt;br /&gt;
Content-Type: text/html;charset=UTF-8&lt;br /&gt;
Content-Length: 730&lt;br /&gt;
Date: Tue, 25 Dec 2013 00:00:00 GMT&lt;br /&gt;
----------------------------------------------------------&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
'''OWASP Resources'''&lt;br /&gt;
* [1] [https://www.owasp.org/index.php?title=Testing_for_Weak_SSL/TSL_Ciphers,_Insufficient_Transport_Layer_Protection_(OWASP-EN-002 OWASP Testing Guide - Testing for Weak SSL/TSL Ciphers, Insufficient Transport Layer Protection (OWASP-CRYPST-002)]&lt;br /&gt;
* [2] [https://www.owasp.org/index.php/Top_10_2010-A9-Insufficient_Transport_Layer_Protection OWASP TOP 10 2010 - Insufficient Transport Layer Protection]&lt;br /&gt;
* [3] [https://www.owasp.org/index.php/Top_10_2013-A6-Sensitive_Data_Exposure OWASP TOP 10 2013 - Sensitive Data Exposure]&lt;br /&gt;
* [4] [https://code.google.com/p/owasp-asvs/wiki/Verification_V10 OWASP  ASVS v1.1 - V10 Communication Security Verification Requirements]&lt;br /&gt;
* [6] [https://www.owasp.org/index.php/Testing_for_cookies_attributes_(OWASP-SM-002) OWASP Testing Guide - Testing for Cookies attributes (OTG-SESS-002)]&lt;br /&gt;
'''Tools'''&lt;br /&gt;
* [5] [http://curl.haxx.se/ curl] can be used to check manually for pages&lt;/div&gt;</summary>
		<author><name>Irene Abezgauz</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Testing_for_Insecure_Direct_Object_References_(OTG-AUTHZ-004)&amp;diff=164775</id>
		<title>Testing for Insecure Direct Object References (OTG-AUTHZ-004)</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Testing_for_Insecure_Direct_Object_References_(OTG-AUTHZ-004)&amp;diff=164775"/>
				<updated>2013-12-16T21:04:44Z</updated>
		
		<summary type="html">&lt;p&gt;Irene Abezgauz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:OWASP Testing Guide v4}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Brief Summary ==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Insecure Direct Object References occur when an application provides direct access to objects based on user-supplied input. As a result of this vulnerability attackers can bypass authorization and access resources in the system directly, for example database records or files. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Description of the Issue == &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Insecure Direct Object References allow attackers to bypass authorization and access resources directly by modifying the value of a parameter used to directly point to an object. Such resources can be database entries belonging to other users, files in the system, and more. This is caused by the fact the application takes user supplied input and uses it to retrieve an object without performing sufficient authorization checks. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Black Box testing and example ==&lt;br /&gt;
To test for this vulnerability the tester needs to first map out all locations in the application where user input is used to reference objects directly. For example – locations where user input is used to access a database row, a file, application pages and more. &lt;br /&gt;
At the next step the tester should modify the value of the parameter used to reference objects and assess whether it is possible to retrieve objects belonging to other users or otherwise bypass authorization. &lt;br /&gt;
The best way to test for direct object references would be by having at least two (often more) users to cover different owned objects and functionalities. For example two users each having access to different objects (such as purchase information, private messages, etc), and if relevant users with different privileges (for example administrator users) to see whether there are direct references to application functionality. By having multiple users the tester saves valuable testing time in guessing different object names as he can attempt to access with one user objects that belong to the other. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Below are several typical scenarios for this vulnerability and the methods to test for each: &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* The value of a parameter is used directly to retrieve a database record: &lt;br /&gt;
&lt;br /&gt;
sample request: http://foo.bar/somepage?invoice=12345&lt;br /&gt;
&lt;br /&gt;
In this case, the value of the ''invoice'' parameter is used as an index in an invoices table in the database. The application takes the value of this parameter and uses it in a query to the database. The application then returns the invoice information to the user. &lt;br /&gt;
Since the value of ''invoice'' goes directly into the query, by modifying the value of the parameter it is possible to retrieve any invoice object, regardless of the user to whom the invoice belongs. To test for this case the tester should obtain the identifier of an invoice belonging to a different test user (ensuring he is not supposed to view this information per application business logic), and then check whether it is possible to access objects without authorization. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* The value of a parameter is used directly to perform an operation in the system: &lt;br /&gt;
&lt;br /&gt;
sample request: [http://foo.bar/changepassword?user=someuser http://foo.bar/changepassword?user=someuser]  &lt;br /&gt;
&lt;br /&gt;
in this case, the value of the ''user'' parameter is used to tell the application for which user it should change the password. In many cases this step will be a part of a wizard, or a multi-step operation. In the first step the application will get a request stating for which user we are changing the password, and in the next step the user will provide a new password (without asking for the current one). The ''user'' parameter is used to directly reference the object of the user for whom the password change operation will be performed. To test for this case the tester should attempt to provide a different test username than the one currently logged in, and check whether it is possible to modify the password of another user. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* The value of a parameter is used directly to retrieve a file system resource: &lt;br /&gt;
&lt;br /&gt;
sample request: [http://foo.bar/showImage?img=img00011 http://foo.bar/showImage?img=img00011]  &lt;br /&gt;
&lt;br /&gt;
In this case, the value of the ''file'' parameter is used to tell the application which file the user intends to retrieve. By providing the name or identifier of a different file (for example file=image00012.jpg) the attacker will be able to retrieve objects belonging to other users. To test for this case, the tester should obtain a reference the user is supposed to not be able to access and attempt placing it as the value of ''file''. &lt;br /&gt;
Note: This vulnerability is often exploited in conjunction with a directory/path traversal vulnerability (see [https://www.owasp.org/index.php/Testing_for_Path_Traversal_%28OWASP-AZ-001%29 Testing for Path Traversal]) &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* The value of a parameter is used directly to access application functionality: &lt;br /&gt;
&lt;br /&gt;
sample request: [http://foo.bar/accessPage?menuitem=12 http://foo.bar/accessPage?menuitem=12] &lt;br /&gt;
&lt;br /&gt;
In this case, the value of the ''menuitem'' parameter is used to tell the application which menu item (and therefore which application functionality) the user is attempting to access. Assume the user is supposed to be restricted and therefore has links available only to access to menu items 1,2 and 3. By modifying the value of ''menuitem'' parameter it is possible to bypass authorization and access additional application functionality. To test for this case the tester identifies a location where application functionality is determined by reference to a menu item, maps the values of menu items the given test user can access, and then attempts other menu items. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In the above examples the modification of a single parameter is sufficient. However, sometimes the object reference may be split between more than one parameter, and testing should be adjusted accordingly. &lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
[https://www.owasp.org/index.php/Top_10_2013-A4-Insecure_Direct_Object_References Top 10 2013-A4-Insecure Direct Object References]&lt;/div&gt;</summary>
		<author><name>Irene Abezgauz</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Testing_for_Insecure_Direct_Object_References_(OTG-AUTHZ-004)&amp;diff=164774</id>
		<title>Testing for Insecure Direct Object References (OTG-AUTHZ-004)</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Testing_for_Insecure_Direct_Object_References_(OTG-AUTHZ-004)&amp;diff=164774"/>
				<updated>2013-12-16T21:03:21Z</updated>
		
		<summary type="html">&lt;p&gt;Irene Abezgauz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:OWASP Testing Guide v4}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Brief Summary ==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Insecure Direct Object References occur when an application provides direct access to objects based on user-supplied input. As a result of this vulnerability attackers can bypass authorization and access resources in the system directly, for example database records or files. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Description of the Issue == &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Applications with Insecure Direct Object References allow attackers to bypass authorization and access application resources directly by modifying the value of a parameter used to directly point to an object. Such resources can be database entries belonging to other users, files in the system, and more. This is caused by the fact the application takes user supplied input and uses it to retrieve an object without performing sufficient authorization checks. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Black Box testing and example ==&lt;br /&gt;
To test for this vulnerability the tester needs to first map out all locations in the application where user input is used to reference objects directly. For example – locations where user input is used to access a database row, a file, application pages and more. &lt;br /&gt;
At the next step the tester should modify the value of the parameter used to reference objects directly and assess whether it is possible to retrieve objects belonging to other users or otherwise bypass authorization. &lt;br /&gt;
The best way to test for direct object references would be by having at least two (often more) users to cover different owned objects and functionalities. For example two users each having access to different objects (such as purchase information, private messages, etc), and if relevant users with different privileges (for example administrator users) to see whether there are direct references to application functionality. By having multiple users the tester saves valuable testing time in guessing different object names as he can attempt to access with one user objects that belong to the other. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Below are several typical scenarios for this vulnerability and the methods to test for each: &amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* The value of a parameter is used directly to retrieve a database record: &lt;br /&gt;
&lt;br /&gt;
sample request: http://foo.bar/somepage?invoice=12345&lt;br /&gt;
&lt;br /&gt;
In this case, the value of the ''invoice'' parameter is used as an index in an invoices table in the database. The application takes the value of this parameter and uses it in a query to the database. The application then returns the invoice information to the user. &lt;br /&gt;
Since the value of ''invoice'' goes directly into the query, by modifying the value of the parameter it is possible to retrieve any invoice object, regardless of the user to whom the invoice belongs. To test for this case the tester should obtain the identifier of an invoice belonging to a different test user (ensuring he is not supposed to view this information per application business logic), and then check whether it is possible to access objects without authorization. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* The value of a parameter is used directly to perform an operation in the system: &lt;br /&gt;
&lt;br /&gt;
sample request: [http://foo.bar/changepassword?user=someuser http://foo.bar/changepassword?user=someuser]  &lt;br /&gt;
&lt;br /&gt;
in this case, the value of the ''user'' parameter is used to tell the application for which user it should change the password. In many cases this step will be a part of a wizard, or a multi-step operation. In the first step the application will get a request stating for which user we are changing the password, and in the next step the user will provide a new password (without asking for the current one). The ''user'' parameter is used to directly reference the object of the user for whom the password change operation will be performed. To test for this case the tester should attempt to provide a different test username than the one currently logged in, and check whether it is possible to modify the password of another user. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* The value of a parameter is used directly to retrieve a file system resource: &lt;br /&gt;
&lt;br /&gt;
sample request: [http://foo.bar/showImage?img=img00011 http://foo.bar/showImage?img=img00011]  &lt;br /&gt;
&lt;br /&gt;
In this case, the value of the ''file'' parameter is used to tell the application which file the user intends to retrieve. By providing the name or identifier of a different file (for example file=image00012.jpg) the attacker will be able to retrieve objects belonging to other users. To test for this case, the tester should obtain a reference the user is supposed to not be able to access and attempt placing it as the value of ''file''. &lt;br /&gt;
Note: This vulnerability is often exploited in conjunction with a directory/path traversal vulnerability (see [https://www.owasp.org/index.php/Testing_for_Path_Traversal_%28OWASP-AZ-001%29 Testing for Path Traversal]) &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* The value of a parameter is used directly to access application functionality: &lt;br /&gt;
&lt;br /&gt;
sample request: [http://foo.bar/accessPage?menuitem=12 http://foo.bar/accessPage?menuitem=12] &lt;br /&gt;
&lt;br /&gt;
In this case, the value of the ''menuitem'' parameter is used to tell the application which menu item (and therefore which application functionality) the user is attempting to access. Assume the user is supposed to be restricted and therefore has links available only to access to menu items 1,2 and 3. By modifying the value of ''menuitem'' parameter it is possible to bypass authorization and access additional application functionality. To test for this case the tester identifies a location where application functionality is determined by reference to a menu item, maps the values of menu items the given test user can access, and then attempts other menu items. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In the above examples the modification of a single parameter is sufficient. However, sometimes the object reference may be split between more than one parameter, and testing should be adjusted accordingly. &lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
[https://www.owasp.org/index.php/Top_10_2013-A4-Insecure_Direct_Object_References Top 10 2013-A4-Insecure Direct Object References]&lt;/div&gt;</summary>
		<author><name>Irene Abezgauz</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Testing_for_Insecure_Direct_Object_References_(OTG-AUTHZ-004)&amp;diff=164773</id>
		<title>Testing for Insecure Direct Object References (OTG-AUTHZ-004)</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Testing_for_Insecure_Direct_Object_References_(OTG-AUTHZ-004)&amp;diff=164773"/>
				<updated>2013-12-16T21:00:39Z</updated>
		
		<summary type="html">&lt;p&gt;Irene Abezgauz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:OWASP Testing Guide v4}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Brief Summary ==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Insecure Direct Object References occur when an application provides direct access to objects based on user-supplied input. As a result of this vulnerability attackers can bypass authorization and access resources in the system directly, for example database records or files. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Description of the Issue == &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Applications with Insecure Direct Object References allow attackers to bypass authorization and access application resources directly by modifying the value of a parameter used to directly point to an object. Such resources can be database entries belonging to other users, files in the system, and more. This is caused by the fact the application takes user supplied input and uses it to retrieve an object without performing sufficient authorization checks. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Black Box testing and example ==&lt;br /&gt;
To test for this vulnerability the tester needs to first map out all locations in the application where user input is used to reference objects directly. For example – locations where user input is used to access a database row, a file, application pages and more. &lt;br /&gt;
At the next step the tester should modify the value of the parameter used to reference objects directly and assess whether it is possible to retrieve objects belonging to other users or otherwise bypass authorization. &lt;br /&gt;
The best way to test for direct object references would be by having at least two (often more) users to cover different owned objects and functionalities. For example two users each having access to different objects (such as purchase information, private messages, etc), and if relevant users with different privileges (for example administrator users) to see whether there are direct references to application functionality. By having multiple users the tester saves valuable testing time in guessing different object names as he can attempt to access with one user objects that belong to the other. &lt;br /&gt;
&lt;br /&gt;
'''Below are several typical scenarios for this vulnerability and the methods to test for each: '''&amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1. The value of a parameter is used directly to retrieve a database record: &lt;br /&gt;
&lt;br /&gt;
sample request: http://foo.bar/somepage?invoice=12345&lt;br /&gt;
&lt;br /&gt;
In this case, the value of the ''invoice'' parameter is used as an index in an invoices table in the database. The application takes the value of this parameter and uses it in a query to the database. The application then returns the invoice information to the user. &lt;br /&gt;
Since the value of ''invoice'' goes directly into the query, by modifying the value of the parameter it is possible to retrieve any invoice object, regardless of the user to whom the invoice belongs. To test for this case the tester should obtain the identifier of an invoice belonging to a different test user (ensuring he is not supposed to view this information per application business logic), and then check whether it is possible to access objects without authorization. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
2. The value of a parameter is used directly to perform an operation in the system: &lt;br /&gt;
&lt;br /&gt;
sample request: [http://foo.bar/changepassword?user=someuser http://foo.bar/changepassword?user=someuser]  &lt;br /&gt;
&lt;br /&gt;
in this case, the value of the ''user'' parameter is used to tell the application for which user it should change the password. In many cases this step will be a part of a wizard, or a multi-step operation. In the first step the application will get a request stating for which user we are changing the password, and in the next step the user will provide a new password (without asking for the current one). The ''user'' parameter is used to directly reference the object of the user for whom the password change operation will be performed. To test for this case the tester should attempt to provide a different test username than the one currently logged in, and check whether it is possible to modify the password of another user. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. The value of a parameter is used directly to retrieve a file system resource: &lt;br /&gt;
&lt;br /&gt;
sample request: [http://foo.bar/showImage?img=img00011 http://foo.bar/showImage?img=img00011]  &lt;br /&gt;
&lt;br /&gt;
In this case, the value of the ''file'' parameter is used to tell the application which file the user intends to retrieve. By providing the name or identifier of a different file (for example file=image00012.jpg) the attacker will be able to retrieve objects belonging to other users. To test for this case, the tester should obtain a reference the user is supposed to not be able to access and attempt placing it as the value of ''file''. &lt;br /&gt;
Note: This vulnerability is often exploited in conjunction with a directory/path traversal vulnerability (see [https://www.owasp.org/index.php/Testing_for_Path_Traversal_%28OWASP-AZ-001%29 Testing for Path Traversal]) &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. The value of a parameter is used directly to access application functionality: &lt;br /&gt;
&lt;br /&gt;
sample request: [http://foo.bar/accessPage?menuitem=12 http://foo.bar/accessPage?menuitem=12] &lt;br /&gt;
&lt;br /&gt;
In this case, the value of the ''menuitem'' parameter is used to tell the application which menu item (and therefore which application functionality) the user is attempting to access. Assume the user is supposed to be restricted and therefore has links available only to access to menu items 1,2 and 3. By modifying the value of ''menuitem'' parameter it is possible to bypass authorization and access additional application functionality. To test for this case the tester identifies a location where application functionality is determined by reference to a menu item, maps the values of menu items the given test user can access, and then attempts other menu items. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In the above examples the modification of a single parameter is sufficient. However, sometimes the object reference may be split between more than one parameter, and testing should be adjusted accordingly. &lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
[https://www.owasp.org/index.php/Top_10_2013-A4-Insecure_Direct_Object_References Top 10 2013-A4-Insecure Direct Object References]&lt;/div&gt;</summary>
		<author><name>Irene Abezgauz</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Testing_for_Insecure_Direct_Object_References_(OTG-AUTHZ-004)&amp;diff=164772</id>
		<title>Testing for Insecure Direct Object References (OTG-AUTHZ-004)</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Testing_for_Insecure_Direct_Object_References_(OTG-AUTHZ-004)&amp;diff=164772"/>
				<updated>2013-12-16T20:59:55Z</updated>
		
		<summary type="html">&lt;p&gt;Irene Abezgauz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:OWASP Testing Guide v4}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Brief Summary ==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Insecure Direct Object References occur when an application provides direct access to objects based on user-supplied input. As a result of this vulnerability attackers can bypass authorization and access resources in the system directly, for example database records or files. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Description of the Issue == &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Applications with Insecure Direct Object References allow attackers to bypass authorization and access application resources directly by modifying the value of a parameter used to directly point to an object. Such resources can be database entries belonging to other users, files in the system, and more. This is caused by the fact the application takes user supplied input and uses it to retrieve an object without performing sufficient authorization checks. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Black Box testing and example ==&lt;br /&gt;
To test for this vulnerability the tester needs to first map out all locations in the application where user input is used to reference objects directly. For example – locations where user input is used to access a database row, a file, application pages and more. &lt;br /&gt;
At the next step the tester should modify the value of the parameter used to reference objects directly and assess whether it is possible to retrieve objects belonging to other users or otherwise bypass authorization. &lt;br /&gt;
The best way to test for direct object references would be by having at least two (often more) users to cover different owned objects and functionalities. For example two users each having access to different objects (such as purchase information, private messages, etc), and if relevant users with different privileges (for example administrator users) to see whether there are direct references to application functionality. By having multiple users the tester saves valuable testing time in guessing different object names as he can attempt to access with one user objects that belong to the other. &lt;br /&gt;
&lt;br /&gt;
'''Below are several typical scenarios for this vulnerability and the methods to test for each: '''&amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1. The value of a parameter is used directly to retrieve a database record: &lt;br /&gt;
&lt;br /&gt;
sample request: http://foo.bar/somepage?invoice=12345&lt;br /&gt;
&lt;br /&gt;
In this case, the value of the ''invoice'' parameter is used as an index in an invoices table in the database. The application takes the value of this parameter and uses it in a query to the database. The application then returns the invoice information to the user. &lt;br /&gt;
Since the value of ''invoice'' goes directly into the query, by modifying the value of the parameter it is possible to retrieve any invoice object, regardless of the user to whom the invoice belongs. To test for this case the tester should obtain the identifier of an invoice belonging to a different test user (ensuring he is not supposed to view this information per application business logic), and then check whether it is possible to access objects without authorization. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
2. The value of a parameter is used directly to perform an operation in the system: &lt;br /&gt;
&lt;br /&gt;
sample request: [http://foo.bar/changepassword?user=someuser http://foo.bar/changepassword?user=someuser]  &lt;br /&gt;
&lt;br /&gt;
in this case, the value of the ''user'' parameter is used to tell the application for which user it should change the password. In many cases this step will be a part of a wizard, or a multi-step operation. In the first step the application will get a request stating for which user we are changing the password, and in the next step the user will provide a new password (without asking for the current one). The ''user'' parameter is used to directly reference the object of the user for whom the password change operation will be performed. To test for this case the tester should attempt to provide a different test username than the one currently logged in, and check whether it is possible to modify the password of another user. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. The value of a parameter is used directly to retrieve a file system resource: &lt;br /&gt;
&lt;br /&gt;
sample request: [http://foo.bar/showImage?img=img00011 http://foo.bar/showImage?img=img00011]  &lt;br /&gt;
&lt;br /&gt;
In this case, the value of the ''file'' parameter is used to tell the application which file the user intends to retrieve. By providing the name or identifier of a different file (for example file=image00012.jpg) the attacker will be able to retrieve objects belonging to other users. To test for this case, the tester should obtain a reference the user is supposed to not be able to access and attempt placing it as the value of ''file''. &lt;br /&gt;
Note: This vulnerability is often exploited in conjunction with a directory/path traversal vulnerability (see [https://www.owasp.org/index.php/Testing_for_Path_Traversal_%28OWASP-AZ-001%29 Testing for Path Traversal]) &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. The value of a parameter is used directly to access application functionality: &lt;br /&gt;
&lt;br /&gt;
sample request: [http://foo.bar/accessPage?menuitem=12 http://foo.bar/accessPage?menuitem=12] &lt;br /&gt;
&lt;br /&gt;
In this case, the value of the ''menuitem'' parameter is used to tell the application which menu item (and therefore which application functionality) the user is attempting to access. Assume the user is supposed to be restricted and therefore has links available only to access to menu items 1,2 and 3. By modifying the value of ''menuitem'' parameter it is possible to bypass authorization and access additional application functionality. To test for this case the tester identifies a location where application functionality is determined by reference to a menu item, maps the values of menu items the given test user can access, and then attempts other menu items. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In the above examples the modification of a single parameter is sufficient. However, sometimes the object reference may be split between more than one parameter, and testing should be adjusted accordingly. &lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
[https://www.owasp.org/index.php/Top_10_2013-A4-Insecure_Direct_Object_References Top 10 2013-A4-Insecure Direct Object References]&lt;/div&gt;</summary>
		<author><name>Irene Abezgauz</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=Testing_for_Insecure_Direct_Object_References_(OTG-AUTHZ-004)&amp;diff=164770</id>
		<title>Testing for Insecure Direct Object References (OTG-AUTHZ-004)</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=Testing_for_Insecure_Direct_Object_References_(OTG-AUTHZ-004)&amp;diff=164770"/>
				<updated>2013-12-16T20:51:04Z</updated>
		
		<summary type="html">&lt;p&gt;Irene Abezgauz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:OWASP Testing Guide v4}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Brief Summary ==&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Insecure Direct Object References occur when an application provides direct access to objects based on user-supplied input. As a result of this vulnerability attackers can bypass authorization and access resources in the system directly, for example database records or files. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Description of the Issue == &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Applications with Insecure Direct Object References allow attackers to bypass authorization and access application resources directly by modifying the value of a parameter used to directly point to an object. Such resources can be database entries belonging to other users, files in the system, and more. This is caused by the fact the application takes user supplied input and uses it to retrieve an object without performing sufficient authorization checks. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Black Box testing and example ==&lt;br /&gt;
To test for this vulnerability the tester needs to first map out all locations in the application where user input is used to reference objects directly. For example – locations where user input is used to access a database row, a file, application pages and more. &lt;br /&gt;
At the next step the tester should modify the value of the parameter used to reference objects directly and assess whether it is possible to retrieve objects belonging to other users or otherwise bypass authorization. &lt;br /&gt;
The best way to test for direct object references would be by having at least two (often more) users to cover different owned objects and functionalities. For example two users each having access to different objects (such as purchase information, private messages, etc), and if relevant users with different privileges (for example administrator users) to see whether there are direct references to application functionality. By having multiple users the tester saves valuable testing time in guessing different object names as he can attempt to access with one user objects that belong to the other. &lt;br /&gt;
&lt;br /&gt;
'''Below are several typical scenarios for this vulnerability and the methods to test for each: '''&amp;lt;br&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
1. The value of a parameter is used directly to retrieve a database record: &lt;br /&gt;
&lt;br /&gt;
sample request: http://foo.bar/somepage?invoice=12345&lt;br /&gt;
&lt;br /&gt;
In this case, the value of the ''invoice'' parameter is used as an index in an invoices table in the database. The application takes the value of this parameter and uses it in a query to the database. The application then returns the invoice information to the user. &lt;br /&gt;
Since the value of ''invoice'' goes directly into the query, by modifying the value of the parameter it is possible to retrieve any invoice object, regardless of the user to whom the invoice belongs. To test for this case the tester should obtain the identifier of an invoice belonging to a different test user (ensuring he is not supposed to view this information per application business logic), and then check whether it is possible to access objects without authorization. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
2. The value of a parameter is used directly to perform an operation in the system: &lt;br /&gt;
&lt;br /&gt;
sample request: http://foo.bar/changepassword?user=someuser  &lt;br /&gt;
&lt;br /&gt;
in this case, the value of the ''user'' parameter is used to tell the application for which user it should change the password. In many cases this step will be a part of a wizard, or a multi-step operation. In the first step the application will get a request stating for which user we are changing the password, and in the next step the user will provide a new password (without asking for the current one). The ''user'' parameter is used to directly reference the object of the user for whom the password change operation will be performed. To test for this case the tester should attempt to provide a different test username than the one currently logged in, and check whether it is possible to modify the password of another user. &amp;lt;br&amp;gt;&lt;br /&gt;
3. The value of a parameter is used directly to retrieve a file system resource: &lt;br /&gt;
&lt;br /&gt;
sample request: http://foo.bar/showImage?file=image00011.jpg&lt;br /&gt;
&lt;br /&gt;
In this case, the value of the ''file'' parameter is used to tell the application which file the user intends to retrieve. By providing the name or identifier of a different file (for example file=image00012.jpg) the attacker will be able to retrieve objects belonging to other users. To test for this case, the tester should obtain a reference the user is supposed to not be able to access and attempt placing it as the value of ''file''. &lt;br /&gt;
[Note: This vulnerability is often exploited in conjunction with a directory/path traversal vulnerability (see [https://www.owasp.org/index.php/Testing_for_Path_Traversal_%28OWASP-AZ-001%29 Testing for Path Traversal]) &amp;lt;br&amp;gt;&lt;br /&gt;
4. The value of a parameter is used directly to access application functionality: &lt;br /&gt;
&lt;br /&gt;
sample request: http://foo.bar/accessPage?menuitem=12 &lt;br /&gt;
&lt;br /&gt;
In this case, the value of the ''menuitem'' parameter is used to tell the application which menu item (and therefore which application functionality) the user is attempting to access. Assume the user is supposed to be restricted and therefore has links available only to access to menu items 1,2 and 3. By modifying the value of ''menuitem'' parameter it is possible to bypass authorization and access additional application functionality. To test for this case the tester identifies a location where application functionality is determined by reference to a menu item, maps the values of menu items the given test user can access, and then attempts other menu items. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In the above examples the modification of a single parameter is sufficient. However, sometimes the object reference may be split between more than one parameter, and testing should be adjusted accordingly. &lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
[https://www.owasp.org/index.php/Top_10_2013-A4-Insecure_Direct_Object_References]&lt;/div&gt;</summary>
		<author><name>Irene Abezgauz</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=User:Irene_Abezgauz&amp;diff=135857</id>
		<title>User:Irene Abezgauz</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=User:Irene_Abezgauz&amp;diff=135857"/>
				<updated>2012-09-14T12:35:28Z</updated>
		
		<summary type="html">&lt;p&gt;Irene Abezgauz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
I'm '''Irene Abezgauz'''. I've been living and breathing Application Security for nearly a decade now - as an Application Security Consultant, Jane-of-all-trades Penetration Tester (specializing in Proprietary Protocols and Wreaking Havoc in general), and currently as Product Manager - making rather than breaking for a change! &lt;br /&gt;
&lt;br /&gt;
I am the Product Manager of [http://www.seekersec.com Seeker]. I also lead the '''Seeker Research Center''', where we are constantly on the look for new techniques and exploitation vectors, as well as causing vendors to scratch their heads occasionally when we identify a new vulnerability in one of their products.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Current OWASP involvement: &lt;br /&gt;
      OWASP Testing Guide v4&lt;br /&gt;
      Speaker in OWASP Conferences&lt;/div&gt;</summary>
		<author><name>Irene Abezgauz</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=User:Irene_Abezgauz&amp;diff=135856</id>
		<title>User:Irene Abezgauz</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=User:Irene_Abezgauz&amp;diff=135856"/>
				<updated>2012-09-14T12:34:01Z</updated>
		
		<summary type="html">&lt;p&gt;Irene Abezgauz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
I'm '''Irene Abezgauz'''. I've been living and breathing Application Security for nearly a decade now - as an Application Security Consultant, Jane-of-all-trades Penetration Tester (specializing in Proprietary Protocols and Wreaking Havoc in general), and currently as Product Manager - making rather than breaking for a change! &lt;br /&gt;
&lt;br /&gt;
I am the Product Manager of [http://www.seekersec.com Seeker]. I also lead the '''Seeker Research Center''', where we are constantly on the look for new techniques and exploitation vectors, as well as causing vendors to scratch their heads occasionally when we identify a new vulnerability in one of their products.&lt;br /&gt;
&lt;br /&gt;
Current OWASP involvement: &lt;br /&gt;
     o OWASP Testing Guide v4&lt;br /&gt;
     o Speaker in OWASP Conferences&lt;/div&gt;</summary>
		<author><name>Irene Abezgauz</name></author>	</entry>

	<entry>
		<id>https://wiki.owasp.org/index.php?title=OWASP_Testing_Guide_v4_Table_of_Contents&amp;diff=135848</id>
		<title>OWASP Testing Guide v4 Table of Contents</title>
		<link rel="alternate" type="text/html" href="https://wiki.owasp.org/index.php?title=OWASP_Testing_Guide_v4_Table_of_Contents&amp;diff=135848"/>
				<updated>2012-09-14T08:44:24Z</updated>
		
		<summary type="html">&lt;p&gt;Irene Abezgauz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&lt;br /&gt;
'''This is DRAFT of the table of content of the New Testing Guide v4.'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;You can download the stable version [http://www.owasp.org/images/5/56/OWASP_Testing_Guide_v3.pdf here] &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Back to the OWASP Testing Guide Project:&lt;br /&gt;
http://www.owasp.org/index.php/OWASP_Testing_Project&lt;br /&gt;
&lt;br /&gt;
'''Updated: 31st August 2012'''&lt;br /&gt;
&lt;br /&gt;
[[ OWTGv4 Contributors list|'''Contributors List]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
The following are the main improvements we have to realize: &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(1) - Add new testing techniques and OWASP Top10 update: &amp;lt;br&amp;gt;&lt;br /&gt;
- Testing for HTTP Verb tampering&amp;lt;br&amp;gt;&lt;br /&gt;
- Testing for HTTP Parameter Pollutions&amp;lt;br&amp;gt;&lt;br /&gt;
- Testing for URL Redirection&amp;lt;br&amp;gt;&lt;br /&gt;
- Testing for Insecure Direct Object References&amp;lt;br&amp;gt;&lt;br /&gt;
- Testing for Insecure Cryptographic Storage&amp;lt;br&amp;gt;&lt;br /&gt;
- Testing for Failure to Restrict URL Access&amp;lt;br&amp;gt;&lt;br /&gt;
- Testing for Insufficient Transport Layer Protection&amp;lt;br&amp;gt;&lt;br /&gt;
- Testing for Unvalidated Redirects and Forwards.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
(2) - Review and improve all the sections in v3,&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
(3) - Create a more readable guide, eliminating some sections that are not&lt;br /&gt;
really useful, Rationalize some sections as Session Management Testing.&lt;br /&gt;
&lt;br /&gt;
(4) Pavol says: - add new opensource testing tools that appeared during last 3 years&lt;br /&gt;
(and are missing in the OWASP Testing Guide v3)&lt;br /&gt;
&lt;br /&gt;
- add few useful and life-scenarios of possible&lt;br /&gt;
vulnerabilities in Bussiness Logic Testing (many testers have no idea what&lt;br /&gt;
vulnerabilities in Business Logic exactly mean)&lt;br /&gt;
&lt;br /&gt;
- &amp;quot;Brute force testing&amp;quot; of &amp;quot;session ID&amp;quot; is missing in &amp;quot;Session Management&lt;br /&gt;
Testing&amp;quot;, describe other tools for Session ID entropy analysis&lt;br /&gt;
(e.g. Stompy)&lt;br /&gt;
&lt;br /&gt;
- in &amp;quot;Data Validation Testing&amp;quot; describe some basic obfuscation methods for&lt;br /&gt;
malicious code injection including the statements how it is possible to&lt;br /&gt;
detect it (web application obfuscation is quite succesfull in bypassing&lt;br /&gt;
many data validation controls)&lt;br /&gt;
&lt;br /&gt;
- split the phase Logout and Browser Cache Management&amp;quot; into two sections&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
The following is a DRAFT of the Toc based on the feedback already received.&lt;br /&gt;
&lt;br /&gt;
== Table of Contents ==&lt;br /&gt;
&lt;br /&gt;
==[[Testing Guide Foreword|Foreword by OWASP Chair]]== &lt;br /&gt;
[To review--&amp;gt; OWASP Chair]&lt;br /&gt;
&lt;br /&gt;
==[[Testing Guide Frontispiece |1. Frontispiece]]== &lt;br /&gt;
[To review--&amp;gt; Mat]&lt;br /&gt;
&lt;br /&gt;
'''[[Testing Guide Frontispiece|1.1 About the OWASP Testing Guide Project]]''' &lt;br /&gt;
[To review--&amp;gt; Mat]&lt;br /&gt;
&lt;br /&gt;
'''[[About The Open Web Application Security Project|1.2 About The Open Web Application Security Project]]''' &lt;br /&gt;
[To review--&amp;gt; ]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==[[Testing Guide Introduction|2. Introduction]]==&lt;br /&gt;
&lt;br /&gt;
'''2.1 The OWASP Testing Project'''&lt;br /&gt;
&lt;br /&gt;
'''2.2 Principles of Testing'''&lt;br /&gt;
&lt;br /&gt;
'''2.3 Testing Techniques Explained''' &lt;br /&gt;
&lt;br /&gt;
2.4 [https://www.owasp.org/index.php/Testing_Guide_Introduction#Security_Requirements_Test_Derivation Security requirements test derivation],[https://www.owasp.org/index.php/Testing_Guide_Introduction#Functional_and_Non_Functional_Test_Requirements functional and non functional test requirements], and [https://www.owasp.org/index.php/Testing_Guide_Introduction#Test_Cases_Through_Use_and_Misuse_Cases test cases through use and misuse cases]&lt;br /&gt;
&lt;br /&gt;
2.5 [https://www.owasp.org/index.php/Testing_Guide_Introduction#Security_Test_Data_Analysis_and_Reporting Security test data analysis and reporting: root cause identification and business/role case test data reporting]&lt;br /&gt;
&lt;br /&gt;
==[[The OWASP Testing Framework|3. The OWASP Testing Framework]]==&lt;br /&gt;
&lt;br /&gt;
'''3.1. Overview'''&lt;br /&gt;
&lt;br /&gt;
'''3.2. Phase 1: Before Development Begins '''&lt;br /&gt;
&lt;br /&gt;
'''3.3. Phase 2: During Definition and Design'''&lt;br /&gt;
&lt;br /&gt;
'''3.4. Phase 3: During Development'''&lt;br /&gt;
&lt;br /&gt;
'''3.5. Phase 4: During Deployment'''&lt;br /&gt;
&lt;br /&gt;
'''3.6. Phase 5: Maintenance and Operations'''&lt;br /&gt;
&lt;br /&gt;
'''3.7. A Typical SDLC Testing Workflow '''&lt;br /&gt;
&lt;br /&gt;
==[[Web Application Penetration Testing |4. Web Application Penetration Testing ]]==&lt;br /&gt;
&lt;br /&gt;
[[Testing: Introduction and objectives|'''4.1 Introduction and Objectives''']] [To review--&amp;gt; Mat]&lt;br /&gt;
&lt;br /&gt;
[[Testing Checklist| 4.1.1 Testing Checklist]] [To review at the end of brainstorming --&amp;gt; Mat]&lt;br /&gt;
&lt;br /&gt;
[[Testing: Information Gathering|'''4.2 Information Gathering ''']] [To review--&amp;gt; contributor here]&lt;br /&gt;
&lt;br /&gt;
[[Testing for configuration management|'''4.3 Configuration and Deploy Management Testing ''']]&lt;br /&gt;
&lt;br /&gt;
Infrastructure Configuration management weakness&amp;lt;br&amp;gt;&lt;br /&gt;
Application Configuration management weakness&amp;lt;br&amp;gt;&lt;br /&gt;
File extensions handling&amp;lt;br&amp;gt;&lt;br /&gt;
Old, backup and unreferenced files&amp;lt;br&amp;gt;&lt;br /&gt;
Access to Admin interfaces&amp;lt;br&amp;gt;&lt;br /&gt;
Bad HTTP Methods enabled, [new]&amp;lt;br&amp;gt;&lt;br /&gt;
Informative Error Messages&amp;lt;br&amp;gt;&lt;br /&gt;
Database credentials/connection strings available&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Testing for authentication|'''4.4 Authentication Testing ''']] &lt;br /&gt;
&lt;br /&gt;
Credentials transport over an unencrypted channel [Robert Winkel]&amp;lt;br&amp;gt;&lt;br /&gt;
User enumeration (also Guessable user account) [Robert Winkel]&amp;lt;br&amp;gt;&lt;br /&gt;
Default passwords [Robert Winkel]&amp;lt;br&amp;gt;&lt;br /&gt;
Weak lock out mechanism [New! - Robert Winkel] &amp;lt;br&amp;gt;&lt;br /&gt;
Account lockout DoS [New! - Robert Winkel]&amp;lt;br&amp;gt;&lt;br /&gt;
Bypassing authentication schema&amp;lt;br&amp;gt; &lt;br /&gt;
Vulnerable remember password [Robert Winkel]&amp;lt;br&amp;gt;&lt;br /&gt;
Browser cache weakness [New!]&amp;lt;br&amp;gt;&lt;br /&gt;
Weak password policy [New! - Robert Winkel]&amp;lt;br&amp;gt;&lt;br /&gt;
Weak username policy [New! - Robert Winkel]&amp;lt;br&amp;gt;&lt;br /&gt;
Weak security question/answer [New! - Robert Winkel]&amp;lt;br&amp;gt; &lt;br /&gt;
Failure to restrict access to authenticated resource [New!]&amp;lt;br&amp;gt; &lt;br /&gt;
Weak password change function [New! - Robert Winkel]&amp;lt;br&amp;gt;&lt;br /&gt;
Testing for CAPTCHA&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Testing for Session Management|'''4.5 Session Management Testing''']] &lt;br /&gt;
&lt;br /&gt;
Bypassing Session Management Schema &amp;lt;br&amp;gt;&lt;br /&gt;
Weak Session Token &amp;lt;br&amp;gt;&lt;br /&gt;
Cookies are set not ‘HTTP Only’, ‘Secure’,  and no time validity&amp;lt;br&amp;gt; &lt;br /&gt;
Exposed sensitive session variables &amp;lt;br&amp;gt;&lt;br /&gt;
CSRF &amp;lt;br&amp;gt;&lt;br /&gt;
Session passed over http [New!] &amp;lt;br&amp;gt;&lt;br /&gt;
Session token within URL [New!]&amp;lt;br&amp;gt;&lt;br /&gt;
Session Fixation &amp;lt;br&amp;gt;&lt;br /&gt;
Session token not removed on server after logout [New!]&amp;lt;br&amp;gt;&lt;br /&gt;
Persistent session token [New!]&amp;lt;br&amp;gt;&lt;br /&gt;
Session token not restrcited properly (such as domain or path not set properly) [New!]&amp;lt;br&amp;gt;&lt;br /&gt;
Logout function not properly implemented &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Testing for Authorization|'''4.6 Authorization Testing''']] &lt;br /&gt;
&lt;br /&gt;
Bypassing authorization schema &amp;lt;br&amp;gt;&lt;br /&gt;
Directory traversal/file include [Juan Galiana] &amp;lt;br&amp;gt; &lt;br /&gt;
Privilege Escalation [Irene Abezgauz] &amp;lt;br&amp;gt;&lt;br /&gt;
Insecure Direct Object References [Irene Abezgauz] &amp;lt;br&amp;gt;&lt;br /&gt;
Failure to Restrict access to authorized resource [New!]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Testing for business logic   (OWASP-BL-001)|'''4.7 Business Logic Testing  (OWASP-BL-001)''']] [To review--&amp;gt; contributor here]&lt;br /&gt;
Business Logic&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Testing for Data Validation|'''4.8 Data Validation Testing''']] &lt;br /&gt;
&lt;br /&gt;
Reflected XSS &amp;lt;br&amp;gt;&lt;br /&gt;
Stored XSS &amp;lt;br&amp;gt;&lt;br /&gt;
HTTP Verb Tampering [Brad Causey]&amp;lt;br&amp;gt; &lt;br /&gt;
HTTP Parameter pollution [Brad Causey]&amp;lt;br&amp;gt;&lt;br /&gt;
Unvalidated Redirects and Forwards [Brad Causey]&amp;lt;br&amp;gt; &lt;br /&gt;
SQL Injection [Brad Causey]&amp;lt;br&amp;gt;&lt;br /&gt;
LDAP Injection &amp;lt;br&amp;gt;&lt;br /&gt;
ORM Injection &amp;lt;br&amp;gt;&lt;br /&gt;
XML Injection &amp;lt;br&amp;gt;&lt;br /&gt;
SSI Injection &amp;lt;br&amp;gt;&lt;br /&gt;
XPath Injection &amp;lt;br&amp;gt;&lt;br /&gt;
SOAP Injection &amp;lt;br&amp;gt;&lt;br /&gt;
IMAP/SMTP Injection &amp;lt;br&amp;gt;&lt;br /&gt;
Code Injection &amp;lt;br&amp;gt;&lt;br /&gt;
OS Commanding [Juan Galiana]&amp;lt;br&amp;gt;&lt;br /&gt;
Buffer overflow &amp;lt;br&amp;gt;&lt;br /&gt;
Incubated vulnerability &amp;lt;br&amp;gt; &lt;br /&gt;
HTTP Splitting/Smuggling [Juan Galiana]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Testing for Data Encryption (New!)]]&lt;br /&gt;
&lt;br /&gt;
Application did not use encryption &amp;lt;br&amp;gt;&lt;br /&gt;
Weak SSL/TSL Ciphers, Insufficient &amp;lt;br&amp;gt;&lt;br /&gt;
Transport Layer Protection&amp;lt;br&amp;gt;&lt;br /&gt;
Cacheable HTTPS Response&amp;lt;br&amp;gt;&lt;br /&gt;
Cache directives insecure&amp;lt;br&amp;gt;&lt;br /&gt;
Insecure Cryptographic Storage [mainly CR Guide]&amp;lt;br&amp;gt;&lt;br /&gt;
Sensitive information sent via unencrypted&lt;br /&gt;
channels &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[ XML Interpreter? (New!)]]&lt;br /&gt;
&lt;br /&gt;
Weak XML Structure&lt;br /&gt;
XML content-level&lt;br /&gt;
WS HTTP GET parameters/REST&lt;br /&gt;
WS Naughty SOAP attachments&lt;br /&gt;
WS Replay Testing&lt;br /&gt;
&lt;br /&gt;
[[ Client Side Testing (New!) ]]&lt;br /&gt;
&lt;br /&gt;
DOM XSS&amp;lt;br&amp;gt;&lt;br /&gt;
HTML5 [Juan Galiana]&amp;lt;br/&amp;gt;&lt;br /&gt;
Cross Site Flashing&amp;lt;br&amp;gt;&lt;br /&gt;
ClickHijacking&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
==[[Writing Reports: value the real risk |5. Writing Reports: value the real risk ]]==&lt;br /&gt;
&lt;br /&gt;
[[How to value the real risk |5.1 How to value the real risk]] [To review--&amp;gt; contributor here]&lt;br /&gt;
&lt;br /&gt;
[[How to write the report of the testing |5.2 How to write the report of the testing]] [To review--&amp;gt; contributor here]&lt;br /&gt;
&lt;br /&gt;
==[[Appendix A: Testing Tools |Appendix A: Testing Tools ]]==&lt;br /&gt;
&lt;br /&gt;
* Black Box Testing Tools [To review--&amp;gt; Amro. We need only tools fo webapp testing]&lt;br /&gt;
&lt;br /&gt;
==[[OWASP Testing Guide Appendix B: Suggested Reading | Appendix B: Suggested Reading]]==&lt;br /&gt;
* Whitepapers [To review--&amp;gt; contributor here]&lt;br /&gt;
* Books [To review--&amp;gt; contributor here]&lt;br /&gt;
* Useful Websites [To review--&amp;gt; contributor here]&lt;br /&gt;
&lt;br /&gt;
==[[OWASP Testing Guide Appendix C: Fuzz Vectors | Appendix C: Fuzz Vectors]]==&lt;br /&gt;
&lt;br /&gt;
* Fuzz Categories [To review--&amp;gt; contributor here]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==[[OWASP Testing Guide Appendix D: Encoded Injection | Appendix D: Encoded Injection]]==&lt;br /&gt;
&lt;br /&gt;
[To review--&amp;gt; contributor here]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:OWASP Testing Project]]&lt;/div&gt;</summary>
		<author><name>Irene Abezgauz</name></author>	</entry>

	</feed>