> For the complete documentation index, see [llms.txt](https://g4b0.gitbook.io/g4b0-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://g4b0.gitbook.io/g4b0-docs/documentation/hacking-web/sql/subverting-query-logic.md).

# Subverting Query Logic

Aquí empieza la inyección práctica: en vez de ejecutar queries completas, primero aprendes a **modificar la lógica** de la query original inyectando el operador `OR` y comentarios. El ejemplo clásico es el **bypass de autenticación**.

**El escenario**

Un login de admin ejecuta esta query:

```sql
SELECT * FROM logins WHERE username='admin' AND password='p@ssw0rd';
```

El `AND` exige que **ambos** campos coincidan. Si la base devuelve un registro, el login es válido. Con credenciales incorrectas, el `AND` da falso y falla. Tu objetivo: entrar como admin **sin conocer el password**.

**Descubrir la vulnerabilidad (SQLi Discovery)**

Primero pruebas si el formulario es inyectable metiendo caracteres especiales y viendo si rompe algo. Los payloads de prueba (con su versión URL-encoded):

| Payload | URL Encoded |
| ------- | ----------- |
| `'`     | `%27`       |
| `"`     | `%22`       |
| `#`     | `%23`       |
| `;`     | `%3B`       |
| `)`     | `%29`       |

Al inyectar una comilla simple (`'`), aparece un **error de sintaxis SQL** en vez del "Login Failed". Eso confirma que tu input llega crudo a la query: hay número impar de comillas y se rompe. Señal de que es vulnerable.

**OR Injection**

La idea es hacer que la query **siempre** devuelva true. Aprovechas que el `AND` se evalúa **antes** que el `OR` (precedencia): basta con que exista una condición verdadera junto a un `OR` para que toda la query dé true.

La condición siempre verdadera es `'1'='1'`. Pero para mantener un número **par** de comillas, le quitas la última: `'1'='1` (la comilla que sobra de la query original cierra por ti).

Inyectas como username:

```sql
admin' or '1'='1
```

La query queda:

```sql
SELECT * FROM logins WHERE username='admin' or '1'='1' AND password='something';
```

Cómo se evalúa:

1. Primero el `AND`: `'1'='1'` (true) AND `password='something'` (false) → **false**
2. Luego el `OR`: `username='admin'` (true) OR false → **true**

Resultado: entras como admin. El password es irrelevante.

**¿Y si no conoces un username válido?**

Si pruebas `notAdmin' or '1'='1`, falla — porque ese usuario no existe y todo el `OR` da false. La solución es **inyectar también un `OR` en el campo password**, para forzar el true por ese lado. Como password metes:

```sql
something' or '1'='1
```

La query final:

```sql
SELECT * FROM logins WHERE username='notAdmin' OR '1'='1' AND password='something' OR '1'='1';
```

Ahora el `WHERE` devuelve **toda la tabla**, y se loguea con el primer registro (que suele ser admin).

Como ambas condiciones dan true, ni siquiera necesitas un username/password de prueba — directamente inyectas en ambos campos con:

```sql
' or '1'='1
```

Y entras, sin importar usuario ni contraseña.

📌 Nota: este es solo uno de muchos payloads de auth bypass. En **PayloadsAllTheThings** tienes una lista completa, cada uno adaptado a distintos tipos de query.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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, and the optional `goal` query parameter:

```
GET https://g4b0.gitbook.io/g4b0-docs/documentation/hacking-web/sql/subverting-query-logic.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
