Öffentliche Aufgaben und Richtlinien

Sicheres Programmieren in der Praxis

Informieren Sie sich über Richtlinien für sicheres Programmieren, um Software-Sicherheitslücken wie die OWASP Top 10 zu verstehen und zu beheben, und nehmen Sie an geführten Trainingsmissionen teil, um praktische App-Simulationen zu üben.

学习背景

Durchsuche alle Missionen

查看更多
提高生产力
SQL 注入
我们收到一位用户的报告,称他们利用了网上银行解决方案交易搜索功能中的 SQL 注入漏洞。他们指出,他们可以查看属于其他用户的交易,并指出这个漏洞可以让攻击者对数据库进行各种令人讨厌的操作,如删除表、查看其他表中的数据、插入数据等。请尝试复制该用户在此次任务中的操作。
提高生产力
Spring MvcRequestMatchers
2023 年 3 月,Spring 发布了针对内部发现的漏洞(称为 CVE-2023-20860)的修复程序,在该漏洞中,mvcRequestMatchers 中使用双通配符 ** 可能会导致 Spring Security 和 Spring MVC 之间出现模式错配。这最终可能导致用户未经授权访问某些端点。我们设置了一个非常简单的银行应用程序,其中只有几个端点。请按照说明尝试重现此访问控制漏洞的影响。
提高生产力
通灵签名 - 使用已知易受攻击的组件
CVE-2022-21449 有一个最酷的漏洞别名--Java 中的通灵签名。这个名字是怎么来的?它参考了《神秘博士》中的通灵纸。当给别人看时,这些空白纸片上会填上他们期望看到的内容。类似的情况也发生在 ECDSA 算法的 Java(15 至 18 版)实现中,这对 JWT 的签名验证产生了影响。我们可以提交一个无效的签名,但 Java 会认为它是有效的。想看看它是如何工作的吗?让我们开始吧。
提高生产力
Apache 路径遍历 - 使用已知易受攻击的组件
2021 年 10 月 4 日,Apache 团队发布了 Apache 2.4.49 版本,以解决 Apache 2.4.48 中的路径遍历和远程代码执行漏洞(也称为 CVE-2021-41773)。2021 年 10 月 7 日,由于 2.4.50 热修复程序中的修复尚未完成,他们发布了 2.4.51 版本。该漏洞被追踪为 CVE-2021-42013。请尝试执行此任务,亲自了解如何利用此漏洞。
提高生产力
Log4j - 使用已知易受攻击的组件
2021 年 12 月初,非常流行的日志库 Log4j 宣布了一个 0-day 漏洞(CVE-2021-44228),这在 Java 社区投下了一颗重磅炸弹。该漏洞被称为 Log4Shell,影响 Log4j v2 2.0-beta9 至 2.14.1 版本,可导致远程代码执行。我们已经建立了一个模拟该漏洞的环境,因此您可以亲眼目睹其影响。现在就试试吧。
提高生产力
木马病毒源 - 使用来自不可信来源的组件
我们维京银行的一名开发人员天真地从互联网上一个可能包含易受攻击组件的不可靠来源复制了一些代码,以帮助编写管理信用卡的管理员授权检查。我们注意到用户一直在更改他们的信用卡限额,尽管只有管理员才有此权限。我们认为这段代码有问题。尝试执行任务,调查代码。
提高生产力
Codestashbin - 不安全的密码重置功能
CodeStashBin 是世界上最大的代码版本控制托管公司之一。有传言称,忘记密码程序存在不安全的密码重置功能漏洞。有可能更改特权用户的密码并访问其账户。跳转到此任务中调查问题。
提高生产力
ChatterGPT 中的跨站脚本 (XSS)
该任务揭示了一种流行的 LLM 的熟悉界面,并使用了 2023 年 11 月底生成的真实代码片段。用户可以解读该代码片段,并调查如果将其用于预期目的,是否存在任何潜在的安全隐患。

Alle Richtlinien durchsuchen

搜索:
隐藏过滤器
选拔
显示过滤器
选拔
删除过滤器
关键词
超级图标 [★]
主题
查看更多

Unzureichende Protokollierung und Überwachung

最佳实践:

敏感功能的审计日志
错误日志
在集中位置存储日志
在规定时间内保留日志
定期审计 PII 的日志

Protokollierung und Überwachung sind oft ein nachträglicher Gedanke, wenn bereits etwas schief gelaufen ist, aber in Wirklichkeit kann es sehr kostspielig sein, wenn nicht sichergestellt wird, dass eine ordnungsgemäße Protokollierung und Überwachung erfolgt. Im Extremfall ist es unmöglich, herauszufinden, was tatsächlich passiert ist, wenn ein Vorfall auftritt (ob sicherheitsrelevant oder nicht), wenn nur wenige oder gar keine Protokolle vorliegen. Auf der anderen Seite kann die Protokollierung zu vieler Daten zu Datenschutzproblemen führen, die dann zu Problemen mit den Aufsichtsbehörden führen können. Lesen Sie unseren Leitfaden für bewährte Verfahren zur Vermeidung einer unzureichenden Protokollierung und Überwachung.

查看指南

使用存在已知安全漏洞的组件

{
„Abhängigkeiten“: {
„foo“: „1,0,0-2,9999,9999",
„bar“: „>=1.0.2 <2.1.2"
}
}

Die meisten Anwendungen verwenden große Mengen an Komponenten von Drittanbietern. Diese Komponenten bieten alles, von Logging über Templating bis hin zum Datenbankzugriff und mehr. Dies erleichtert die Softwareentwicklung erheblich und spart viel Zeit. Sie werden aber auch von Menschen gemacht, was bedeutet, dass einige unweigerlich Sicherheitslücken enthalten. Lesen Sie die Richtlinie, um mehr zu erfahren.

查看指南

SQL 注入

importiere mysql.connector
db = mysql.connector.connect
#Bad -Praxis. Vermeide das! Das ist nur zum Lernen.
(host="localhost „, user="newuser „, passwd="pass „, db="sample „)
cur = db.cursor ()
name = raw_input ('Name eingeben: ')
cur.execute („SELECT * FROM Sample_DATA WHERE Name = '%s';“% name) für Zeile in cur.fetchall (): print (row)
db.schließen ()

SQL Injection (SQLi) injiziert Code in SQL-Anweisungen, um eine Anwendung aufzurufen und wichtige Informationen von ihnen zu sammeln. Es handelt sich um eine Sicherheitslücke im Internet. Es ist die gebräuchlichste Hacking-Technik, bei der die Datenbank manipuliert und wichtige Informationen daraus extrahiert werden.

查看指南

安全配置错误

Viele Frameworks verfügen auch über eine Reihe von Endpunkten, die aktiviert werden können, sodass die Anwendung überwacht werden kann, unabhängig davon, ob sich diese in einer Produktions- oder Test-/Entwicklungsumgebung befindet. Diese können beinhalten:

Metriken (Prometheus)
Logs
Informationen zur Umgebung
Pfad-/URL-Zuordnungen

Sicherheitsfehlkonfiguration ist so etwas wie ein Überbegriff, der häufig auftretende Sicherheitslücken abdeckt, die eher auf die Konfigurationseinstellungen einer Anwendung als auf schlechten Code zurückzuführen sind. Es handelt sich um ein weitreichendes Thema, das stark von Faktoren wie Ihrem Technologie-Stack abhängt. Oft scheint die Behebung dieser Probleme einfach zu sein, wie das Ändern einer Konfigurationsdatei oder sogar einer einzelnen Codezeile, aber die Auswirkungen und Folgen dieser Sicherheitslücken können schwerwiegend sein. Lesen Sie unsere Richtlinie, um mehr über diese Sicherheitsanfälligkeit zu erfahren und zu erfahren, wie Sie sie beheben können.

查看指南

服务器端请求伪造

ts
lass url = request.params.url;

lass response = http.get (url);
let render = response.render ();

render.export () zurückgeben;

Sicherheitslücken durch serverseitige Anforderungsfälschung treten auf, wenn ein Benutzer eine Anwendung veranlassen kann, HTTP-Anfragen an eine vom Angreifer bestimmte Domain zu stellen. Wenn eine Anwendung Zugriff auf private/interne Netzwerke hat, kann ein Angreifer die Anwendung auch veranlassen, Anfragen an interne Server zu stellen. Wir werden uns das anhand einiger Beispiele genauer ansehen, um besser zu verstehen, wie es in dieser Richtlinie in Aktion aussieht.

查看指南

Speicherung von Passwörtern

功能 加密哈希值 密码哈希值 速度 非常快 故意慢 工作系数可调整 否 是

Wenn Ihre Anwendung Benutzer authentifiziert, wird sie wahrscheinlich auch mit Passwörtern umgehen. Der Umgang mit Benutzerkennwörtern ist eine wirklich große Sache, und der angemessene Umgang mit ihnen ist noch wichtiger. Es ist schwer, sich ein schlimmeres Szenario vorzustellen, als wenn eine Anwendung angegriffen wird und Benutzerkennwörter für alle sichtbar im Internet durchgesickert sind. Wie können Passwörter sicher und gemäß den besten Praktiken gespeichert werden? Schauen wir uns ein paar Möglichkeiten an.

查看指南

Massenzuweisung

html
<form method="POST">
<input name="Id" type="hidden" value="666">
<input name="Name" type="text" value="Bad guy">
<input name="EmailAddress" type="text" value="hacker@attacker.com">
<input name="IsAdmin" type="hidden" value="true">
<input type="submit">
</form>

Massenzuweisungen sind eine Sicherheitslücke, bei der API-Endpunkte nicht einschränken, welche Eigenschaften des zugehörigen Objekts von einem Benutzer geändert werden können. Diese Sicherheitsanfälligkeit kann auftreten, wenn eine Bibliothek/ein Framework verwendet wird, das die automatische Bindung von HTTP-Parametern an ein Modell ermöglicht, das dann ohne Überprüfung verwendet wird. Die Verwendung der automatischen Bindung von einer Anfrage an ein Objekt kann manchmal äußerst hilfreich sein, kann aber auch zu Sicherheitsproblemen führen, wenn das Modell Eigenschaften hat, auf die der Benutzer nicht zugreifen kann. Lesen Sie die Richtlinie für weitere Informationen.

查看指南

Fehlkonfiguration der Sicherheitseinstellungen — XXE detailliert

xml
<? xml-Version = „1.0"? >
<! DOCTYPE Äußeres Element [
<! ] >
<outerElement>&Externe Entität;</outerElement>

Bei der Schwachstellenklasse „XML eXternal Entities“ (XXE) handelt es sich um eine Sicherheitsfehlkonfiguration, an der XML-Parser beteiligt sind. Der XML-Standard beinhaltet Möglichkeiten, auf „Entitäten“ wie Dateien und URLs zu verweisen. Es ist oft die Standardeinstellung, dass Parser externe Entitäten vollständig auflösen, was bedeutet, dass XML-Dokumente zur Offenlegung von Dateien und anderen vertraulichen Informationen für potenzielle Angreifer führen können. Lesen Sie die vollständige Richtlinie für weitere Informationen.

查看指南

Injektion — Pfaddurchquerung

Pseudo-
lass BaseFolder = „/var/www/api/documents/“;
let path = BaseFolder + request.params.filename;

gib file.read (Pfad) zurück;

Path Traversal ist eine weitere ziemlich häufige Art von Injektionsanfälligkeit. Sie treten in der Regel auf, wenn durch die Erstellung einer URI (sei es für eine URL, einen Dateipfad oder etwas anderes) nicht ordnungsgemäß sichergestellt wird, dass der vollständig aufgelöste Pfad nicht außerhalb des Stammverzeichnisses des vorgesehenen Pfads zeigt. Die Auswirkungen einer Sicherheitslücke durch Pfaddurchquerung hängen stark vom Kontext ab, in dem die Traversierung stattfindet, und von der Art der Absicherung, die insgesamt vorgenommen wurde. Lesen Sie die Richtlinie, um mehr zu erfahren.

查看指南

Authentifizierung und Autorisierung

cs

// Ensure the default behaviour is to authenticate requests, and check if they are admin
[Authenticate]
[Authorize("Admin")]
public class SecureController : Controller
{

}

public class MyController : SecureController
{

    // Overrides the Authorize attribute inherited to allow any user to access the page

查看指南

Injektion - XSS

```html
<!--- UNSAFE: The htmlSnippet will get interpreted without any escaping --->
@Html .Raw (HTML-Ausschnitt)
```

Cross-Site Scripting, auch bekannt als XSS, ist eine weitere Art von Injection-Schwachstelle, die zur Auswertung eines vom Angreifer gesteuerten Skripts im Browser eines anderen Benutzers führt. XSS kann auch als HTML/JavaScript-Injection-Schwachstelle betrachtet werden. Schauen wir uns an, auf welche XSS-Typen Sie stoßen können.

查看指南

Injektion 101

最常见的注入类型包括:

SQL 注入
跨站脚本(HTML/JavaScript 注入)
路径遍历(路径/Url 注入)
命令注入
代码注入

Eine der bekanntesten Klassen von Sicherheitslücken sind in der Regel Injection-Schwachstellen, insbesondere, und das überrascht niemanden, das unbestrittene Aushängeschild: SQL Injection. Es ist schwer zu vermeiden, in der Technologiewelt von SQL-Injection zu hören, also werden wir einfach darüber sprechen. Lesen Sie weiter, um eine kurze Einführung in Injektionsfehler zu erhalten.

查看指南

Datei hochladen

öffentliche Zeichenfolge uploadProfilePicture (formFile uploadedFile)
{
//Generieren Sie den Pfad zum Speichern der hochgeladenen Datei unter
var-Pfad = $“. /uploads/avatare/ {request.user.ID}/{uploadedFile.filename}“;

//Speichere die Datei
var LocalFile = file.openWrite (Pfad);
Lokaldatei.write (hochgeladene Datei.readToEnd ());
Lokaldatei.flush ();
Lokaldatei.close ();

//Aktualisiere das Profilbild
userProfile.updateUserProfilePicture (request.User, Pfad)

Rückweg;
}

Es kommt sehr häufig vor, dass Anwendungen irgendwann Benutzern erlauben müssen, eine Datei (entweder zur Verwendung oder nur zur Speicherung) irgendwo in der Anwendung hochzuladen. Es scheint zwar einfach zu sein, aber die Art und Weise, wie diese Funktion implementiert wird, kann aufgrund der potenziellen Risiken, die mit der Handhabung von Datei-Uploads verbunden sind, ziemlich wichtig sein. Lesen Sie die Richtlinie für weitere Informationen.

查看指南

Befehlsinjektion

let ip = request.params.IPAddress;

system („ping" + ip);

Schauen wir uns Command Injection selbst an. Wir werden uns hauptsächlich auf einige verschiedene Beispiele konzentrieren, damit es einfacher ist, zu sehen, wie es in Aktion aussieht. Zur kleinen Auffrischung: Command Injection-Schwachstellen treten auf, wenn Benutzereingaben einen Teil eines Betriebssystembefehls verwenden. Lesen Sie die Richtlinie für weitere Informationen.

查看指南