# JAVA

## Identifier les entrées utilisateur

| Variable                                                                                      | Description                                                                        |
| --------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- |
| <p>getParameter </p><p>getParameterNames </p><p>getParameterValues </p><p>getParameterMap</p> | Contient les interactions avec les paramètres d'une requête                        |
| getQueryString                                                                                | Contient la chaîne de caractère de la requête entière                              |
| <p>getHeader</p><p>getHeaders </p><p>getHeaderNames</p>                                       | Contient les en-têtes entrées                                                      |
| <p>getRequestURI </p><p>getRequestURL</p>                                                     | Contient les url et uri entrées                                                    |
| getCookies                                                                                    | Contient les cookies entrées                                                       |
| getRequestedSessionId                                                                         | Contient les ID de session entrées                                                 |
| <p>getInputStream </p><p>getReader</p>                                                        | Contient les données brute d'une requête                                           |
| getMethod                                                                                     | Contient la méthode HTTP utilisée                                                  |
| getProtocol                                                                                   | Contient le protocole utilisé                                                      |
| getServerName                                                                                 | Contenu de l'en-tête "Host:"                                                       |
| <p>getRemoteUser </p><p>getUserPrincipal</p>                                                  | Si l'utilisateur est authentifié, cela contient les informations de l'utilisateur. |
| <p>setAttribute </p><p>putValue</p>                                                           | Utilisées pour stocker des données dans la session courante                        |
| <p>getAttribute</p><p>getValue </p><p>getAttributeNames </p><p>getValueNames</p>              | Utilisées pour demander des données stockées dans la session courante              |

## SQLi

* Statement
* CallableStatement
* PreparedStatement => Rarement vulnérable
* executeUpdate()
* execute()
* executeQuery()
* jdbc:

## Open redirect

* sendRedirect
* setStatus
* addHeader

## Path traversal

* filename
* getrealPath()
* getPathTranslated()

## LFI

* include()
* require()
* forward()

### JSP LFI

* <%@ include file="exemple.jsp" %>
* \<jsp:include page="exemple.jsp" />

{% hint style="info" %}
Les exemples ci-dessus ne sont pas vulnérables, cependant si le fichier peut être défini avec une entrée utilisateur, il est possible d'exploiter une LFI

Exemple:

\<jsp:include page='<%="browserActions/" + request.getParameter("\_actionPage") + ".jsp"%>'
{% endhint %}

## OS injection

* getruntime()
* exec()

## XSS

* \<c> => Pas d'escaping
* \<c:out> => escaping

## XXE

* SAXParserFactory&#x20;
* DOM4J&#x20;
* DocumentBuilderFactory&#x20;
* XMLInputFactory&#x20;
* TransformerFactory&#x20;
* javax.xml.validation.Validator&#x20;
* SchemaFactory&#x20;
* SAXTransformerFactory&#x20;
* XMLReader&#x20;
* SAXBuilder&#x20;
* SAXReader&#x20;
* javax.xml.bind.Unmarshaller&#x20;
* XPathExpression&#x20;
* DOMSource&#x20;
* StAXSource

## ELi

\<spr(ing)?:(message|theme|transform|eval|hasBindErrors|bind|nestedpath)\[^>]+${param

## Sockets

* java.net.Socket

## Fichiers d'interet

* WEB-INF/web.xml

## Paramètres intéressants

| Paramètre           | Utilité                                                                                                                                                                                                                                                                      |
| ------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| login-config        | <p>Informations d'authentification + méthode d'authentification (forms-based, Basic Auth, Client-Cert). <br><br>Si la méthode forms-based est utilisé, il est préférable d'utiliser l'action "j\_security\_check" ainsi que les paramètres "j\_username" et j\_password"</p> |
| security-constraint | Ce paramètre permet de restreindre des accès aux rôles définis dans "role-name".                                                                                                                                                                                             |
| session-config      | permet de configurer les paramètres de la session dont le timeout.                                                                                                                                                                                                           |
| error-page          | Permet de gérer les erreurs (code de status, type d'exception etc).                                                                                                                                                                                                          |
| init-param          | Contient des paramètres d'initialisation tels que "listings" qui doit être à false ou debug qui lui doit être à 0.                                                                                                                                                           |


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://blog.s1rn3tz.ovh/pentest-web/analyse-statique/java.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
