directory writeup

This commit is contained in:
gurkenhabicht 2025-07-21 00:12:46 +02:00
parent 38b0ff2fb5
commit 80e5c93e25
15 changed files with 174 additions and 92 deletions

1
.gitignore vendored
View File

@ -3,3 +3,4 @@ templates/blog/*
flask_run.sh
poetry.lock
build
venv

1
.python-version Normal file
View File

@ -0,0 +1 @@
3.11.0

View File

@ -0,0 +1,95 @@
2025-07-20
# Directory Writeup — TryHackMe
This blog post is a writeup of the
[Directory](https://tryhackme.com/room/directorydfirroom) challenge on
[TryHackMe](https://tryhackme.com)
**What ports did the threat actor initially find open? Format: from lowest to
highest, separated by a comma.**
We can see that the attacker is scanning ports on the target system. If there
would be an open port on the target system, the answer would include SYN/ACK,
which is a flag of `0x12`.
```sh
tshark -r ./traffic-1725627206938.pcap \
-T fields -Y tcp.flags == 0x12 \
-e tcp.srcport -e ip.dst_host \
| sort -n | uniq | sort -rn
```
**The threat actor found four valid usernames, but only one username allowed
the attacker to achieve a foothold on the server. What was the username?
Format: Domain.TLD\username**
After extracting all HTTP files, the result shows that there are some potential usernames
to be crafted from the names of the people mentioned on the page, which the
adversary
could try to login.
Filtering for Kerberos packages, it is clearly visible that the attacker tried
to bruteforce the usernames
<p><img alt="Wireshark, listing kerberos packages"
src="../../static/images/usernames-kerberos.jpg" title="SureStore DAT40"
/></p>
Only two requests did not end up in an error as a response. These contain the username
we are looking for.
We need the `CNameString` as well as the `SNameString` in combination to get
the correct login name.
**The threat actor captured a hash from the user in question 2. What are the
last 30 characters of that hash?**
The same `AS-REP` response package from the previous question contains an
encrypted part, which contains the hash as a cipher of type
`eType-ARFOUR-HMAC-MD5 (23)`. This is the hash we are looking for.
**What is the user's password?**
We can use
[Krb5RoastParser](https://github.com/jalvarezz13/Krb5RoastParser.git) to
extract the AS-REP hash and crack it.
```
$krb5asrep$23$larry.doe@DIRECTORY.THM:f8716efbaa984508ddde606756441480$805ab8be8cfb018a282718f7c040cd43924c6f9afeb6171230bbd3dccc79294dcf2f877a44c1a0981aadb7bb7a9510dd52d8dda4039ef4dcb444f18c9902be1623035e10aebf16ce4bdf5f7064f480e67e96ec2eb32bad95c5a1247bd7a241273fe80e281f4e6a99926f7969fcf803190c7096b947a33407f8578d4c0fb8b52d2aa8d0405a44b72bd21e014563cb71e82aee0e12538d0d440c930b98abf766e18ddc99a964e6e812ecf8dc8994a912a02074d40e5e6906915c1d216653d45df88636b51656f2c37de2020a2fd86ee7ecf6f0afe3f509fd31144e1573f9587155616532b664cd0b50cda8d4ba469f
```
Use john or hashcat to decrypt the password.
```sh
john --wordlist=/usr/share/seclists/Passwords/Leaked-Databases/rockyou.txt ../kerb.hash
```
**What were the second and third commands that the threat actor executed on the
system? Format: command1,command2**
There is a script to decrypt winrm traffic on [jborean93's github
page](https://gist.github.com/jborean93/d6ff5e87f8a9f5cb215cd49826523045/).
Using the password we aquired before, the traffic can be decoded.
```sh
python winrm_decrypt.py ./traffic-1725627206938.pcap --password '********' > winrm.output
```
The parts we are interested in are the Powershell commands. We need to decode
the commands, since these are b64 encoded.
```sh
grep "AAAAAA" winrm.output | cut -d '>' -f2 | cut -d '<' -f1 | base64 -d >> decoded.out
```
Now we can take e look at the commands using less or some other tool.
**What is the flag?**
We already decoded the commands in the previous step, just do a search for the
flag structure in the already decoded output.
```
THM{***************}
```

View File

@ -9,7 +9,7 @@
<title>Hello, this is my </title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<div class="menu">
<a href="/" style="text-decoration:none">Stefan Friese's Website</a>
<a href="/" style="text-decoration:none">Stefan Etringer's Website</a>
</div>
<style>
/* Stylesheet 1 */
@ -26,7 +26,7 @@
<hr style="width: 36ch;"/>
<div class="menu">
<a href="/about.html" style="text-decoration:none">about&emsp;</a>
<a href="/about.html" style="text-decoration:none">about&emsp;</a>
<a href="/contact.html" style="text-decoration:none">contact&emsp;</a>
<a href="/rss.xml" style="text-decoration:none">rss&emsp;</a>
<a href="https://git.stefan.works" style="text-decoration:none">git</a>
@ -41,14 +41,14 @@
</head>
<body>
<div lang="en" class="content">
My name is Stefan Friese. I am fascinated by computers since I first saw my Dad working on the ZX Spectrumn. For me, the greatest thing is to learn something new. I like music, engineering, art, design and security CTFs. I write blog entries on my journey, so I&rsquo;ll be able to look stuff up, remember and share it with you and students at work.<p></p><div class="contact";><script src="https://tryhackme.com/badge/502760"></script><p></p></div>
My name is Stefan Etringer. I am fascinated by computers since I first saw my Dad working on the ZX Spectrumn. For me, the greatest thing is to learn something new. I like music, engineering, art, design and security CTFs. I write blog entries on my journey, so I&rsquo;ll be able to look stuff up, remember and share it with you and students at work.<p></p><div class="contact";><script src="https://tryhackme.com/badge/502760"></script><p></p></div>
</div>
<div id="footer">
<hr/>
<p></p>
<center>
&copy; Stefan Friese
&copy; Stefan Etringer
</center>
</div>

View File

@ -9,7 +9,7 @@
<title>Stefan's Blog</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<div class="menu">
<a href="/" style="text-decoration:none">Stefan Friese's Website</a>
<a href="/" style="text-decoration:none">Stefan Etringer's Website</a>
</div>
<style>
/* Stylesheet 1 */
@ -26,7 +26,7 @@
<hr style="width: 36ch;"/>
<div class="menu">
<a href="/about.html" style="text-decoration:none">about&emsp;</a>
<a href="/about.html" style="text-decoration:none">about&emsp;</a>
<a href="/contact.html" style="text-decoration:none">contact&emsp;</a>
<a href="/rss.xml" style="text-decoration:none">rss&emsp;</a>
<a href="https://git.stefan.works" style="text-decoration:none">git</a>
@ -67,6 +67,7 @@ span.linenos.special { color: #000000; background-color: #ffffc0; padding-left:
.codehilite .cs { color: #7F848E } /* Comment.Special */
.codehilite .gd { color: #ABB2BF } /* Generic.Deleted */
.codehilite .ge { color: #ABB2BF } /* Generic.Emph */
.codehilite .ges { color: #ABB2BF } /* Generic.EmphStrong */
.codehilite .gr { color: #ABB2BF } /* Generic.Error */
.codehilite .gh { color: #ABB2BF } /* Generic.Heading */
.codehilite .gi { color: #ABB2BF } /* Generic.Inserted */
@ -228,7 +229,7 @@ the following snippet. After the dictionary is sorted by date,
returns a string. The result will be interpreted by the browser in
HTML/CSS format.</p>
<div class="codehilite"><pre><span></span><code> <span class="nd">@app</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s1">&#39;/&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">index</span><span class="p">(</span><span class="n">_paths</span><span class="o">=</span><span class="n">meta_data</span><span class="p">):</span>
<span class="k">def</span><span class="w"> </span><span class="nf">index</span><span class="p">(</span><span class="n">_paths</span><span class="o">=</span><span class="n">meta_data</span><span class="p">):</span>
<span class="n">sorted_meta_data</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span><span class="nb">sorted</span><span class="p">(</span><span class="n">meta_data</span><span class="o">.</span><span class="n">items</span><span class="p">(),</span> <span class="n">reverse</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="k">lambda</span> <span class="n">item</span> <span class="p">:</span> <span class="n">item</span><span class="p">[</span><span class="mi">1</span><span class="p">]))</span>
<span class="k">return</span> <span class="n">render_template</span><span class="p">(</span><span class="s2">&quot;index.html&quot;</span><span class="p">,</span> <span class="n">_paths</span><span class="o">=</span><span class="n">sorted_meta_data</span><span class="p">)</span>
</code></pre></div>
@ -256,7 +257,7 @@ returns the articles if you want to visit the site. It handles URL
encoding as well. This is pretty neat since there are spaces in the
names.</p>
<div class="codehilite"><pre><span></span><code> <span class="nd">@app</span><span class="o">.</span><span class="n">route</span><span class="p">(</span><span class="s1">&#39;/blog/&lt;blog_item&gt;/index.html&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">blog</span><span class="p">(</span><span class="n">blog_item</span><span class="p">,</span> <span class="n">_date</span><span class="o">=</span><span class="n">meta_data</span><span class="p">):</span>
<span class="k">def</span><span class="w"> </span><span class="nf">blog</span><span class="p">(</span><span class="n">blog_item</span><span class="p">,</span> <span class="n">_date</span><span class="o">=</span><span class="n">meta_data</span><span class="p">):</span>
<span class="k">return</span> <span class="n">render_template</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;blog/</span><span class="si">{</span><span class="n">blog_item</span><span class="si">}</span><span class="s2">/index.html&quot;</span><span class="p">,</span> <span class="n">_date</span><span class="o">=</span><span class="n">meta_data</span><span class="p">[</span><span class="n">blog_item</span><span class="p">])</span>
</code></pre></div>
@ -284,7 +285,7 @@ ISBN:9780465051366</a><br />
<hr/>
<p></p>
<center>
&copy; Stefan Friese
&copy; Stefan Etringer
</center>
</div>

View File

@ -9,7 +9,7 @@
<title>Stefan's Blog</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<div class="menu">
<a href="/" style="text-decoration:none">Stefan Friese's Website</a>
<a href="/" style="text-decoration:none">Stefan Etringer's Website</a>
</div>
<style>
/* Stylesheet 1 */
@ -26,7 +26,7 @@
<hr style="width: 36ch;"/>
<div class="menu">
<a href="/about.html" style="text-decoration:none">about&emsp;</a>
<a href="/about.html" style="text-decoration:none">about&emsp;</a>
<a href="/contact.html" style="text-decoration:none">contact&emsp;</a>
<a href="/rss.xml" style="text-decoration:none">rss&emsp;</a>
<a href="https://git.stefan.works" style="text-decoration:none">git</a>
@ -67,6 +67,7 @@ span.linenos.special { color: #000000; background-color: #ffffc0; padding-left:
.codehilite .cs { color: #7F848E } /* Comment.Special */
.codehilite .gd { color: #ABB2BF } /* Generic.Deleted */
.codehilite .ge { color: #ABB2BF } /* Generic.Emph */
.codehilite .ges { color: #ABB2BF } /* Generic.EmphStrong */
.codehilite .gr { color: #ABB2BF } /* Generic.Error */
.codehilite .gh { color: #ABB2BF } /* Generic.Heading */
.codehilite .gi { color: #ABB2BF } /* Generic.Inserted */
@ -256,7 +257,7 @@ ISBN:9780131429017</a></p>
<hr/>
<p></p>
<center>
&copy; Stefan Friese
&copy; Stefan Etringer
</center>
</div>

View File

@ -9,7 +9,7 @@
<title>Hello, this is my </title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<div class="menu">
<a href="/" style="text-decoration:none">Stefan Friese's Website</a>
<a href="/" style="text-decoration:none">Stefan Etringer's Website</a>
</div>
<style>
/* Stylesheet 1 */
@ -26,7 +26,7 @@
<hr style="width: 36ch;"/>
<div class="menu">
<a href="/about.html" style="text-decoration:none">about&emsp;</a>
<a href="/about.html" style="text-decoration:none">about&emsp;</a>
<a href="/contact.html" style="text-decoration:none">contact&emsp;</a>
<a href="/rss.xml" style="text-decoration:none">rss&emsp;</a>
<a href="https://git.stefan.works" style="text-decoration:none">git</a>
@ -51,7 +51,7 @@
<hr/>
<p></p>
<center>
&copy; Stefan Friese
&copy; Stefan Etringer
</center>
</div>

View File

@ -9,7 +9,7 @@
<title>Stefan's Blog</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<div class="menu">
<a href="/" style="text-decoration:none">Stefan Friese's Website</a>
<a href="/" style="text-decoration:none">Stefan Etringer's Website</a>
</div>
<style>
/* Stylesheet 1 */
@ -26,7 +26,7 @@
<hr style="width: 36ch;"/>
<div class="menu">
<a href="/about.html" style="text-decoration:none">about&emsp;</a>
<a href="/about.html" style="text-decoration:none">about&emsp;</a>
<a href="/contact.html" style="text-decoration:none">contact&emsp;</a>
<a href="/rss.xml" style="text-decoration:none">rss&emsp;</a>
<a href="https://git.stefan.works" style="text-decoration:none">git</a>
@ -44,6 +44,8 @@
<p>Welcome to my website</p>
<span class="index">
<p><a href="/blog/Directory%20Writeup%20%E2%80%94%20TryHackMe/index.html">2025-07-20&emsp;&emsp;Directory Writeup — TryHackMe</a></p>
<p><a href="/blog/Restoring%20(NT)Backups%20From%20a%20SCSI%20Tape%20Drive/index.html">2023-09-27&emsp;&emsp;Restoring (NT)Backups From a SCSI Tape Drive</a></p>
<p><a href="/blog/The%20Joy%20of%20One-Liners/index.html">2022-05-29&emsp;&emsp;The Joy of One-Liners</a></p>
@ -57,7 +59,7 @@
<hr/>
<p></p>
<center>
&copy; Stefan Friese
&copy; Stefan Etringer
</center>
</div>

View File

@ -1,2 +1,2 @@
<?xml version='1.0' encoding='UTF-8'?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0"><channel><title>Website of Stefan Friese</title><link>https://stefan.works</link><description>test</description><atom:link href="https://stefan.works" rel="self"/><docs>http://www.rssboard.org/rss-specification</docs><generator>python-feedgen</generator><language>en-us</language><lastBuildDate>Wed, 11 Oct 2023 19:32:42 +0000</lastBuildDate><item><title>Restoring (NT)Backups From a SCSI Tape Drive</title><link>https://stefan.works/blog/Restoring (NT)Backups From a SCSI Tape Drive/index.html</link><guid isPermaLink="false">https://stefan.works/blog/Restoring (NT)Backups From a SCSI Tape Drive/index.html</guid><pubDate>Wed, 27 Sep 2023 00:00:00 +0200</pubDate></item><item><title>The Joy of One-Liners</title><link>https://stefan.works/blog/The Joy of One-Liners/index.html</link><guid isPermaLink="false">https://stefan.works/blog/The Joy of One-Liners/index.html</guid><pubDate>Sun, 29 May 2022 00:00:00 +0200</pubDate></item><item><title>Keep It Simple</title><link>https://stefan.works/blog/Keep It Simple/index.html</link><guid isPermaLink="false">https://stefan.works/blog/Keep It Simple/index.html</guid><pubDate>Tue, 01 Jun 2021 00:00:00 +0200</pubDate></item></channel></rss>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0"><channel><title>Website of Stefan Friese</title><link>https://stefan.works</link><description>test</description><atom:link href="https://stefan.works" rel="self"/><docs>http://www.rssboard.org/rss-specification</docs><generator>python-feedgen</generator><language>en-us</language><lastBuildDate>Sun, 20 Jul 2025 22:08:29 +0000</lastBuildDate><item><title>Directory Writeup — TryHackMe</title><link>https://stefan.works/blog/Directory Writeup — TryHackMe/index.html</link><guid isPermaLink="false">https://stefan.works/blog/Directory Writeup — TryHackMe/index.html</guid><pubDate>Sun, 20 Jul 2025 00:00:00 +0200</pubDate></item><item><title>Restoring (NT)Backups From a SCSI Tape Drive</title><link>https://stefan.works/blog/Restoring (NT)Backups From a SCSI Tape Drive/index.html</link><guid isPermaLink="false">https://stefan.works/blog/Restoring (NT)Backups From a SCSI Tape Drive/index.html</guid><pubDate>Wed, 27 Sep 2023 00:00:00 +0200</pubDate></item><item><title>The Joy of One-Liners</title><link>https://stefan.works/blog/The Joy of One-Liners/index.html</link><guid isPermaLink="false">https://stefan.works/blog/The Joy of One-Liners/index.html</guid><pubDate>Sun, 29 May 2022 00:00:00 +0200</pubDate></item><item><title>Keep It Simple</title><link>https://stefan.works/blog/Keep It Simple/index.html</link><guid isPermaLink="false">https://stefan.works/blog/Keep It Simple/index.html</guid><pubDate>Tue, 01 Jun 2021 00:00:00 +0200</pubDate></item></channel></rss>

View File

@ -1,2 +1,2 @@
<?xml version='1.0' encoding='UTF-8'?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0"><channel><title>Website of Stefan Friese</title><link>https://stefan.works</link><description>test</description><atom:link href="https://stefan.works" rel="self"/><docs>http://www.rssboard.org/rss-specification</docs><generator>python-feedgen</generator><language>en-us</language><lastBuildDate>Sat, 15 Jul 2023 21:28:59 +0000</lastBuildDate><item><title>The Joy of One-Liners</title><link>https://stefan.works/blog/The Joy of One-Liners/index.html</link><guid isPermaLink="false">https://stefan.works/blog/The Joy of One-Liners/index.html</guid><pubDate>Sun, 29 May 2022 00:00:00 +0200</pubDate></item><item><title>Keep It Simple</title><link>https://stefan.works/blog/Keep It Simple/index.html</link><guid isPermaLink="false">https://stefan.works/blog/Keep It Simple/index.html</guid><pubDate>Tue, 01 Jun 2021 00:00:00 +0200</pubDate></item></channel></rss>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0"><channel><title>Website of Stefan Friese</title><link>https://stefan.works</link><description>test</description><atom:link href="https://stefan.works" rel="self"/><docs>http://www.rssboard.org/rss-specification</docs><generator>python-feedgen</generator><language>en-us</language><lastBuildDate>Wed, 11 Oct 2023 19:32:42 +0000</lastBuildDate><item><title>Restoring (NT)Backups From a SCSI Tape Drive</title><link>https://stefan.works/blog/Restoring (NT)Backups From a SCSI Tape Drive/index.html</link><guid isPermaLink="false">https://stefan.works/blog/Restoring (NT)Backups From a SCSI Tape Drive/index.html</guid><pubDate>Wed, 27 Sep 2023 00:00:00 +0200</pubDate></item><item><title>The Joy of One-Liners</title><link>https://stefan.works/blog/The Joy of One-Liners/index.html</link><guid isPermaLink="false">https://stefan.works/blog/The Joy of One-Liners/index.html</guid><pubDate>Sun, 29 May 2022 00:00:00 +0200</pubDate></item><item><title>Keep It Simple</title><link>https://stefan.works/blog/Keep It Simple/index.html</link><guid isPermaLink="false">https://stefan.works/blog/Keep It Simple/index.html</guid><pubDate>Tue, 01 Jun 2021 00:00:00 +0200</pubDate></item></channel></rss>

View File

@ -19,14 +19,16 @@ app = Flask(__name__)
Markdown(app)
meta_data = {
root[len("./blog/"):]: datetime.strptime(
open(os.path.join(root, "index.md"), encoding='UTF-8')
.readline().rstrip(),
"%Y-%m-%d"
)
root[len("./blog/") :]: datetime.strptime(
open(os.path.join(root, "index.md"), encoding="UTF-8").readline().rstrip(),
"%Y-%m-%d",
)
for root, dirs, files in os.walk("./blog")
if "index.md" in files
}
}
app.config["blog"] = toml.load("settings.toml")
content_path = app.config["blog"]["content"]["path"]
@ -40,59 +42,47 @@ app.config["blog"]["style"] = toml.load("style.toml")
colors = app.config["blog"]["style"][highlight_style]
@app.route('/')
@app.route("/")
def index(_paths=meta_data):
''' Main Site.
'''
"""Main Site."""
sorted_meta_data = dict(
sorted(
meta_data.items(),
reverse=True,
key=lambda item: item[1]
)
)
sorted(meta_data.items(), reverse=True, key=lambda item: item[1])
)
return render_template("index.html", colors=colors, _paths=sorted_meta_data)
@app.route('/blog/<blog_item>/index.html')
@app.route("/blog/<blog_item>/index.html")
def blog(blog_item, _date=meta_data):
''' Blog Pages.
'''
"""Blog Pages."""
md_file_path = os.path.join(f"blog/{blog_item}/index.md")
with open(md_file_path, "r") as _f:
md_file = _f.read()
md_extensions = [
'toc',
"toc",
TocExtension(toc_class="", title=""),
"fenced_code",
"codehilite",
"tables",
"mdx_math"
"mdx_math",
]
md_configs = {"mdx_math": {"enable_dollar_delimiter": True}}
md = markdown.Markdown(
extensions=md_extensions,
extension_configs=md_configs
)
md = markdown.Markdown(extensions=md_extensions, extension_configs=md_configs)
html = md.convert(md_file)
formatter = HtmlFormatter(
style=highlight_style,
full=True,
cssclass="codehilite"
)
formatter = HtmlFormatter(style=highlight_style, full=True, cssclass="codehilite")
css_string = formatter.get_style_defs()
md_css_string = "<style>" + css_string + "</style>"
md_template = md_css_string + html
res = render_template(
"blog.html",
#toc=md.toc,
# toc=md.toc,
md_doc=md_template,
colors=colors,
stylesheet=STYLESHEET,
#stylesheet_auto_complete=STYLESHEET_AUTO_COMPLETE,
# stylesheet_auto_complete=STYLESHEET_AUTO_COMPLETE,
project_name=project_name,
project_title=project_title,
# tree=cut_path_tree(
@ -100,12 +90,12 @@ def blog(blog_item, _date=meta_data):
# make_tree(content_path),
# content_path,
# ".md" # )
_date=meta_data[blog_item]
)
_date=meta_data[blog_item],
)
response = make_response(res)
response.headers["Content-Type"] = "text/html; charset=utf-8"
return response
return response
# return render_template(
# f"blog/{blog_item}/index.html",
@ -115,31 +105,32 @@ def blog(blog_item, _date=meta_data):
@app.route("/about.html")
def about():
''' About Page.
'''
"""About Page."""
return render_template("about.html", colors=colors)
@app.route("/contact.html")
def contact():
''' Contact Page.
'''
"""Contact Page."""
return render_template("contact.html", colors=colors)
@app.route("/rss.xml")
def rss(_items=meta_data):
''' RSS Feed.
"""RSS Feed.
Generates RSS feed as XML
'''
"""
# rss_feed = []
_tz = pytz.timezone('Europe/Berlin')
_tz = pytz.timezone("Europe/Berlin")
_fg = FeedGenerator()
_fg.title("Website of Stefan Friese")
_fg.description("test")
_fg.language("en-us")
# _fg.author({'name': "Stefan Friese", 'email': 'stefan@stefan.works'})
_fg.link(href="https://stefan.works", rel="self")
for key in meta_data.keys():
_fe = _fg.add_entry()
_fe.id(f"https://stefan.works/blog/{key}/index.html")
@ -149,50 +140,42 @@ def rss(_items=meta_data):
_fe.link(href=f"https://stefan.works/blog/{key}/index.html")
_fe.pubDate(pubDate=_tz.localize(meta_data[key]))
_fg.rss_str(pretty=True)
_fg.rss_file('./static/rss.xml')
return send_from_directory(
os.path.join(
app.root_path,
'static'
),
'rss.xml'
)
_fg.rss_file("./static/rss.xml")
return send_from_directory(os.path.join(app.root_path, "static"), "rss.xml")
@app.route('/favicon.ico')
@app.route("/favicon.ico")
def favicon():
''' Provides favicon.
'''
return send_from_directory(
os.path.join(
app.root_path,
'static'
),
'favicon.ico'
)
"""Provides favicon."""
return send_from_directory(os.path.join(app.root_path, "static"), "favicon.ico")
@app.errorhandler(404)
def page_not_found(_error):
''' Error Handling.
"""Error Handling.
Error 404
'''
"""
return render_template("/status_code/404.html", colors=colors), 404
@app.errorhandler(400)
def bad_request(_error):
''' Error Handling.
"""Error Handling.
Error 400
'''
"""
return render_template("/status_code/400.html", colors=colors), 400
@app.errorhandler(500)
def internal_server_error(_error):
''' Error Handling.
"""Error Handling.
Error 500
'''
"""
return render_template("/status_code/500.html", colors=colors), 500

Binary file not shown.

After

Width:  |  Height:  |  Size: 253 KiB

View File

@ -1,2 +1,2 @@
<?xml version='1.0' encoding='UTF-8'?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0"><channel><title>Website of Stefan Friese</title><link>https://stefan.works</link><description>test</description><atom:link href="https://stefan.works" rel="self"/><docs>http://www.rssboard.org/rss-specification</docs><generator>python-feedgen</generator><language>en-us</language><lastBuildDate>Wed, 11 Oct 2023 19:32:42 +0000</lastBuildDate><item><title>Restoring (NT)Backups From a SCSI Tape Drive</title><link>https://stefan.works/blog/Restoring (NT)Backups From a SCSI Tape Drive/index.html</link><guid isPermaLink="false">https://stefan.works/blog/Restoring (NT)Backups From a SCSI Tape Drive/index.html</guid><pubDate>Wed, 27 Sep 2023 00:00:00 +0200</pubDate></item><item><title>The Joy of One-Liners</title><link>https://stefan.works/blog/The Joy of One-Liners/index.html</link><guid isPermaLink="false">https://stefan.works/blog/The Joy of One-Liners/index.html</guid><pubDate>Sun, 29 May 2022 00:00:00 +0200</pubDate></item><item><title>Keep It Simple</title><link>https://stefan.works/blog/Keep It Simple/index.html</link><guid isPermaLink="false">https://stefan.works/blog/Keep It Simple/index.html</guid><pubDate>Tue, 01 Jun 2021 00:00:00 +0200</pubDate></item></channel></rss>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0"><channel><title>Website of Stefan Friese</title><link>https://stefan.works</link><description>test</description><atom:link href="https://stefan.works" rel="self"/><docs>http://www.rssboard.org/rss-specification</docs><generator>python-feedgen</generator><language>en-us</language><lastBuildDate>Sun, 20 Jul 2025 22:08:29 +0000</lastBuildDate><item><title>Directory Writeup — TryHackMe</title><link>https://stefan.works/blog/Directory Writeup — TryHackMe/index.html</link><guid isPermaLink="false">https://stefan.works/blog/Directory Writeup — TryHackMe/index.html</guid><pubDate>Sun, 20 Jul 2025 00:00:00 +0200</pubDate></item><item><title>Restoring (NT)Backups From a SCSI Tape Drive</title><link>https://stefan.works/blog/Restoring (NT)Backups From a SCSI Tape Drive/index.html</link><guid isPermaLink="false">https://stefan.works/blog/Restoring (NT)Backups From a SCSI Tape Drive/index.html</guid><pubDate>Wed, 27 Sep 2023 00:00:00 +0200</pubDate></item><item><title>The Joy of One-Liners</title><link>https://stefan.works/blog/The Joy of One-Liners/index.html</link><guid isPermaLink="false">https://stefan.works/blog/The Joy of One-Liners/index.html</guid><pubDate>Sun, 29 May 2022 00:00:00 +0200</pubDate></item><item><title>Keep It Simple</title><link>https://stefan.works/blog/Keep It Simple/index.html</link><guid isPermaLink="false">https://stefan.works/blog/Keep It Simple/index.html</guid><pubDate>Tue, 01 Jun 2021 00:00:00 +0200</pubDate></item></channel></rss>

View File

@ -4,7 +4,5 @@
{{ super() }}
{% endblock %}
{% block content %}
My name is Stefan Friese. I am fascinated by computers since I first saw my Dad working on the ZX Spectrumn. For me, the greatest thing is to learn something new. I like music, engineering, art, design and security CTFs. I write blog entries on my journey, so I&rsquo;ll be able to look stuff up, remember and share it with you and students at work.<p></p><div class="contact";><script src="https://tryhackme.com/badge/502760"></script><p></p></div>
My name is Stefan Etringer. I am fascinated by computers since I first saw my Dad working on the ZX Spectrumn. For me, the greatest thing is to learn something new. I like music, engineering, art, design and security CTFs. I write blog entries on my journey, so I&rsquo;ll be able to look stuff up, remember and share it with you and students at work.<p></p><div class="contact";><script src="https://tryhackme.com/badge/502760"></script><p></p></div>
{% endblock %}

View File

@ -8,7 +8,7 @@
<title>{% block title %}Stefan's Blog{% endblock %}</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<div class="menu">
<a href="{{ url_for('index') }}" style="text-decoration:none">Stefan Friese's Website</a>
<a href="{{ url_for('index') }}" style="text-decoration:none">Stefan Etringer's Website</a>
</div>
<style>
/* Stylesheet 1 */
@ -25,7 +25,7 @@
<hr style="width: 36ch;"/>
<div class="menu">
<a href="{{ url_for('about') }}" style="text-decoration:none">about&emsp;</a>
<a href="{{ url_for('about') }}" style="text-decoration:none">about&emsp;</a>
<a href="{{ url_for('contact') }}" style="text-decoration:none">contact&emsp;</a>
<a href="{{ url_for('rss') }}" style="text-decoration:none">rss&emsp;</a>
<a href="https://git.stefan.works" style="text-decoration:none">git</a>
@ -44,7 +44,7 @@
<hr/>
<p></p>
<center>
&copy; Stefan Friese
&copy; Stefan Etringer
</center>
{% endblock %}
</div>